我正在评估用于rest服务黑盒测试的citrus框架。
有没有办法使用java和条件容器来根据状态代码进行验证?
http(httpActionBuilder -> httpActionBuilder
.client(sutClient)
.receive()
.response()
.messageType(MessageType.JSON)
.extractFromPayload("$.", "operationReponse")
.extractFromHeader(HttpMessageHeaders.HTTP_STATUS_CODE, "statusCode"));
conditional().when("${statusCode} = 200").actions(
// how to validate on ${operationResponse} ??
.validate("$.field1", "${expectedUUID}")
.validate("$.elements[0].result", "APPROVED")
);
conditional().when("${statusCode} = 301").actions(
// how to extract from a variable ${operationResponse} ??
extractFromPayload("$.pollUrl", "idToGet");
http(hab -> hab.client(sutClient).send().get("/v1/myendpoint"));
http(hab -> hab.client(sutClient).receive().response(HttpStatus.OK)
.messageType(MessageType.JSON)
.validate("$.field1", "${expectedUUID}")
.validate("$.elements[0].result", "APPROVED")
);最终想要创建一个在不同测试用例上重用的行为。
发布于 2020-02-18 15:51:30
这里需要的是将接收到的Http响应存储到本地消息存储库中,以便稍后进行验证。您可以为接收到的消息添加一个名称,而不是将有效负载提取到变量:
http(httpActionBuilder -> httpActionBuilder
.client(sutClient)
.receive()
.response()
.messageType(MessageType.JSON)
.name("operationResponse")
.extractFromHeader(HttpMessageHeaders.HTTP_STATUS_CODE, "statusCode"));您可以稍后在进一步的测试步骤中访问命名的消息内容。
echo("citrus:message(helloMessage.payload())")对于更复杂的逻辑,我将添加一个自定义测试操作,并访问消息库以按其名称加载消息:
action(new AbstractTestAction() {
@Override
public void doExecute(TestContext context) {
// do something with stored message
Message message = context.getMessageStore().getMessage("operationResponse");
}
})顺便说一句,我在你的示例代码中发现了一个使用"operationReponse“和"operationResponse”的拼写错误。
https://stackoverflow.com/questions/60090159
复制相似问题