Citrus-Framework:根据状态码进行条件验证
Citrus-Framework: Conditional validation depending on status code
我正在评估用于休息服务黑盒测试的柑橘框架。
有没有办法使用 java DSL 和条件容器来根据状态代码进行验证?
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")
);
最终想创建一个行为以在不同的测试用例上重用。
这里你需要的是将接收到的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" 的示例代码中发现了一个拼写错误。
我正在评估用于休息服务黑盒测试的柑橘框架。
有没有办法使用 java DSL 和条件容器来根据状态代码进行验证?
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")
);
最终想创建一个行为以在不同的测试用例上重用。
这里你需要的是将接收到的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" 的示例代码中发现了一个拼写错误。