验证http get的返回值

时间:2018-08-04 16:37:15

标签: java http-get citrus-framework

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

@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的返回值并检查其是否匹配 预定义的xml结构或满足xpath-expression? 就我而言,我绝对必须知道http-get返回的内容,并将其与某些预期的xml进行比较。 我希望有人可以在这里提供帮助,我已经花了很多时间:/

1 个答案:

答案 0 :(得分:0)

Citrus客户端发送GET请求并从服务器获取响应。您完全没有测试代码示例中的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本质上是一种同步协议,因此发送操作会阻止测试,直到收到服务器的响应为止。

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