首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Citrus-Framework:依赖于状态代码的条件验证

Citrus-Framework:依赖于状态代码的条件验证
EN

Stack Overflow用户
提问于 2020-02-06 16:00:32
回答 1查看 195关注 0票数 0

我正在评估用于rest服务黑盒测试的citrus框架。

有没有办法使用java和条件容器来根据状态代码进行验证?

代码语言:javascript
复制
       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")

        );

最终想要创建一个在不同测试用例上重用的行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-18 15:51:30

这里需要的是将接收到的Http响应存储到本地消息存储库中,以便稍后进行验证。您可以为接收到的消息添加一个名称,而不是将有效负载提取到变量:

代码语言:javascript
复制
http(httpActionBuilder -> httpActionBuilder
                .client(sutClient)
                .receive()
                .response()
                .messageType(MessageType.JSON)
                .name("operationResponse")
                .extractFromHeader(HttpMessageHeaders.HTTP_STATUS_CODE, "statusCode"));

您可以稍后在进一步的测试步骤中访问命名的消息内容。

代码语言:javascript
复制
echo("citrus:message(helloMessage.payload())")

对于更复杂的逻辑,我将添加一个自定义测试操作,并访问消息库以按其名称加载消息:

代码语言:javascript
复制
action(new AbstractTestAction() {
    @Override
    public void doExecute(TestContext context) {
        // do something with stored message
        Message message = context.getMessageStore().getMessage("operationResponse"); 
    }
})

顺便说一句,我在你的示例代码中发现了一个使用"operationReponse“和"operationResponse”的拼写错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60090159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档