有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java验证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的返回值并检查它是否匹配 预定义的xml结构或满足xpath表达式? 在我的例子中,我一定要知道http get返回什么,并将其与一些预期的xml进行比较。 我希望有人能帮忙,我已经投入了很多时间:/


共 (1) 个答案

  1. # 1 楼答案

    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表达式