验证 http get 的 return 值

Validate return value of http get

假设您有这样的测试用例:

@Test
public class MsgFlowIT extends TestNGCitrusTestDesigner {

    @Autowired
    private HttpClient todoClient;

    @CitrusTest(name = "SampleJavaTest.Send")
    public void Send() {

        http()
        .client(todoClient)
        .send()
        .post("/api/values/Method1")
        .contentType("application/xml")
        .name("Method1")
        .messageType(MessageType.XML)
        .payload(<XmlMessage>msg1</XmlMessage>);

        http()
        .client(todoClient)
        .send()
        .get("/api/values/Method2")
        //.response(HttpStatus.OK)
        .contentType("application/xml")
        .messageType(MessageType.XML)
        .name("Method2")
        //.accept("text/html") 
        .expect(<XmlMessage>msg2</XmlMessage>); // check if the return value of "get" matches the ".expect"
}

是否可以使用 http-get 的 return 值并检查它是否匹配 预定义的 xml 结构或满足 xpath 表达式? 就我而言,我肯定必须知道 http-get return 是什么并将其与某些预期的 xml 进行比较。 我希望有人能在这里提供帮助,我已经投入了很多时间:/

Citrus 客户端发送 GET 请求并从服务器获得响应。您完全缺少测试代码示例中的 receive 部分。在您的示例中,您只是发送了两个请求而没有在测试中收到响应以进行验证。

您可以使用预期 header 和负载信息验证响应消息。我建议在您的代码示例中使用以下 send-receive 操作:

@Test
public class MsgFlowIT extends TestNGCitrusTestDesigner {

    @Autowired
    private HttpClient todoClient;

    @CitrusTest(name = "SampleJavaTest.Send")
    public void sendAndReceive() {
        http()
            .client(todoClient)
            .send()
            .post("/api/values/Method1")
            .contentType("application/xml")
            .name("Method1")
            .messageType(MessageType.XML)
            .payload("<XmlMessage>msg1</XmlMessage>");

        http()
            .client(todoClient)
            .receive()
            .response(HttpStatus.OK)
            .header("X-SomeHeader", "expectedValue")
            .payload("<SomeExpectedXml>foo</SomeExpectedXml>");

        http()
            .client(todoClient)
            .send()
            .get("/api/values/Method2")
            .contentType("application/xml")
            .messageType(MessageType.XML)
            .name("Method2");

        http()
            .client(todoClient)
            .receive()
            .response(HttpStatus.FOUND)
            .header("X-SomeHeader", "expectedValue")
            .xpath("/some/expression", "expectedValue")
            .payload("<SomeExpectedXml>foo</SomeExpectedXml>");
    }
}

每个 send 后跟同一个客户端端点上的 receive。另请注意,Http 本质上是一种同步协议,因此发送操作会阻止测试,直到收到来自服务器的响应。

除了使用预期 header 和有效载荷验证接收到的响应消息外,您还可以在该接收操作上定义 XPath 表达式以进行验证。