Проблема : Как повторно использовать одно и то же сообщение HTTP двумя разными способами (на одном шаге) в Citrus Framework
Версии : Цитрус 2.8.0-SNAPSHOT ; огурец 3.0.2 ; Java 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 код:
@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
будет задано время ожидания, поскольку Цитрус ожидает получения второго сообщения (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));
В двух разных методах.