3

假设我有一个像下面这样的测试(使用黄瓜) -

Scenario: Login successfully to Facebook
  Given the user test exists
  And user name and password is entered
  When the login form is submitted
  Then I expose a HTTP-Rest service to validate the user name and password
  When I receive a validation success message
  Then display the welcome message to the user

在这里,当"the login form is submitted"被调用时,它将请求提交给 HTTP REST 服务,该服务会将用户名和密码传递给另一个 HTTP Rest 服务(将由 Citrus 框架公开),使用"I expose a HTTP-Rest service to validate the user name and password"该服务将验证数据并发送成功响应。"the login form is submitted"因此,“和”的步骤定义"I expose a HTTP-Rest service to validate the user name and password应该异步执行。

你能帮我吗?我怎么能用黄瓜(或/和柑橘)来做到这一点。

注意:我没有使用任何stub应用程序来为“公开 HTTP Rest 服务"I expose a HTTP-Rest service to validate the user name and password;我正在尝试使用Citrus框架公开该服务。

步骤定义是用 java 编写的。

4

1 回答 1

2

首先,您需要在项目中设置 citrus-cucumber 扩展。然后您应该能够使用 @CitrusResource 注释将测试运行程序实例注入您的步骤类:

@CitrusResource
private TestRunner runner;

您还可以注入应该接收请求的 http 服务器实例。

@CitrusEndpoint(name = "userServer")
private HttpServer userServer;

然后您可以使用测试运行器和服务器接收请求并在步骤定义中发送响应:

@Then("^I expose a HTTP-Rest service to validate the user name and password$")
public void exposeHttpRestService() {
    runner.http(http -> http.server(userServer)
        .receive()
        .post()
        .payload("{\"username\": \"test\", \"password\": \"secret\"}"));

    runner.http(http -> http.server(userServer)
        .send()
        .response(HttpStatus.OK));
}

登录表单应使用单独的线程在单独的步骤定义中提交,以创建异步性质:

@When("^the login form is submitted$")
public void submitForm() {
    ExecutorService executor = Executors.newSingleThreadExecutor();
    executor.submit(() -> {
        // do submit the form
    });    
}
于 2017-08-30T10:09:52.640 回答