gpt4 book ai didi

java - 在 Citrus Framework 中的不同方法中重用 HTTP 消息

转载 作者:行者123 更新时间:2023-11-30 02:00:02 25 4
gpt4 key购买 nike

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

版本:Citrus 2.8.0-SNAPSHOT cucumber 3.0.2Java 8

有这个小 cucumber :

    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代码:

  @Then("the client receives status code of {int}")
public void the_client_receives_status_code_of(Integer statusCode) {

designer.http().client(httpClient).receive().response(HttpStatus.valueOf(statusCode))
.contentType("application/json;charset=UTF-8"):
}

@Then("the client receives a response with {string}")
public void the_client_receives_a_response_with(String payload) {

designer.http().client(httpClient).receive().response().payload(payload);
}

如果运行此代码,它会在方法 the_client_receives_a_response_with 中给出超时,因为 Citrus 期望接收第二条消息(send) > 方法仅被调用一次)。

这里的目标是将 HTTP 代码的验证与有效负载分开,因此通过创建两个方法来实现分离。如何重用方法 the_client_receives_status_code_of 中收到的消息?

已经尝试过以下方法但没有成功:

为收到的消息命名:

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");

返回null

但是使用这个:

designer.echo("citrus:message(currentMessage)");

打印正确的消息。

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

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 注入(inject)在这里不起作用,因为您会得到一个不同的实例,其中指定的消息未知。

作为替代方案,您可以遵循此处描述的默认命名消息步骤 BDD API:https://citrusframework.org/citrus/reference/html/index.html#named-messages

也许消息创建器 BDD API 也会有所帮助:https://citrusframework.org/citrus/reference/html/index.html#message-creator-steps

关于java - 在 Citrus Framework 中的不同方法中重用 HTTP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53195707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com