Java citrusframework中不同方法重用HTTP消息

Java citrusframework中不同方法重用HTTP消息,java,bdd,citrus-framework,Java,Bdd,Citrus Framework,问题:如何在Citrus框架中以两种不同的方法(在同一步骤中)重用相同的HTTP消息 版本:柑橘2.8.0-SNAPSHOT;黄瓜3.0.2;爪哇8 有这个小黄瓜: Scenario: Client has permission to access the action Given that client has access to action When the client calls the endpoint /some-endpoint/clien

问题:如何在Citrus框架中以两种不同的方法(在同一步骤中)重用相同的HTTP消息

版本:柑橘2.8.0-SNAPSHOT;黄瓜3.0.2;爪哇8

有这个小黄瓜:

    Scenario: Client has permission to access the action
        Given that client has access to action
        When the client calls the endpoint /some-endpoint/client/1/action/some-action
        Then the client receives status code of 200
        And the client receives a response with {"action" : "some-action", "permission": "AUTHORIZED"}
下面是一段Java代码:

如果运行此代码,它将在方法
中给出一个超时,因为Citrus希望接收第二条消息(
send
方法只调用了一次)

这里的目标是将HTTP代码的验证与有效负载分离,因此通过创建两个方法进行分离。如何重用在方法
中接收的消息\u客户端\u接收的\u状态\u代码\u的

已尝试以下操作但未成功:

为接收到的消息命名:

designer.http().client(httpClient).receive().response(HttpStatus.valueOf(statusCode)).name("currentMessage")
        .contentType("application/json;charset=UTF-8");
但是尝试这样访问消息:

@CitrusResource
private TestContext testContext;
...
testContext.getMessageStore().getMessage("currentMessage");
Assert.assertTrue(testContext.getMessageStore().getMessage("currentMessage").getPayload().equals(payload));
@Then("the client receives a response with {string}")
public void the_client_receives_a_response_with(String payload) {
    designer.action(new AbstractTestAction() {
        public void doExecute(TestContext context) {
            Assert.assertTrue(context.getMessageStore()
                                         .getMessage("currentMessage")
                                         .getPayload(String.class)
                                         .equals(payload));
        }
    });
}
返回
null

但是使用这个:

designer.echo("citrus:message(currentMessage)");
打印正确的消息

那么,我如何访问Java代码中的消息,即访问消息以执行以下操作:

@CitrusResource
private TestContext testContext;
...
testContext.getMessageStore().getMessage("currentMessage");
Assert.assertTrue(testContext.getMessageStore().getMessage("currentMessage").getPayload().equals(payload));
@Then("the client receives a response with {string}")
public void the_client_receives_a_response_with(String payload) {
    designer.action(new AbstractTestAction() {
        public void doExecute(TestContext context) {
            Assert.assertTrue(context.getMessageStore()
                                         .getMessage("currentMessage")
                                         .getPayload(String.class)
                                         .equals(payload));
        }
    });
}

有两种不同的方法。

您可以这样做:

@CitrusResource
private TestContext testContext;
...
testContext.getMessageStore().getMessage("currentMessage");
Assert.assertTrue(testContext.getMessageStore().getMessage("currentMessage").getPayload().equals(payload));
@Then("the client receives a response with {string}")
public void the_client_receives_a_response_with(String payload) {
    designer.action(new AbstractTestAction() {
        public void doExecute(TestContext context) {
            Assert.assertTrue(context.getMessageStore()
                                         .getMessage("currentMessage")
                                         .getPayload(String.class)
                                         .equals(payload));
        }
    });
}
抽象操作始终与正在运行的测试的当前TestContext实例一起提供。因此,
@CitrusResource
注入在这里不起作用,因为您得到了另一个实例,其中命名消息未知

另外,您也可以遵循此处描述的默认命名消息步骤BDD API:

也许消息创建者BDD API也会有所帮助: