假设您有一些这样的测试用例:
@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进行比较。 我希望有人可以在这里提供帮助,我已经花了很多时间:/
答案 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表达式以进行验证。