现在测试很多接口返回的类型是xml的字符串,当返回值为较小的值的时候。期望结果直接写在代码里边是靠普的。但是当返回结果相当大的时候,期望值保存在哪里呢,以前我也做过直接写在代码里,结果造成代码行相当的长,几乎一个测试用例只能看见期望结果的数据了,自然不好。那么如果存在文件里如何呢?可能会有这样的问题存在文件里如何对比呢,采用文本内容对比吗?总觉得不太靠普,至少xml特性没能体现,譬如不能告诉我是哪个节点出错了。
今天我发现xmlunit有这个功能(有点后知后觉,大家不要笑话);而且结合xml其他的jar包可以快速解决这个问题,而且代码也很精简,特贴代码如下
public void tet() throws Exception
{
String actXmlText ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +"\r\n"+
"<error_response>" +"\r\n"+
" <args>" +"\r\n"+
" <arg></arg>" +"\r\n"+
" </args>" +"\r\n"+
" <code>16</code>" +"\r\n"+
" <msg>wang wang service return error</msg>" +"\r\n" +
" <sub_code>33000</sub_code>" +"\r\n" +
" <sub_msg>wang wang service error: param error.</sub_msg>" +"\r\n" +
"</error_response>";
System.out.println(actXmlText);
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
InputStream is= new FileInputStream("c:/11.xml");
Document doc = dombuilder.parse(is);
InputStream is1 = new FileInputStream("c:/12.xml");
Document doc1 = dombuilder.parse(is1);
Document doc2 = dombuilder.parse( new ByteArrayInputStream(actXmlText.getBytes()));
XMLAssert.assertXMLEqual(doc2, doc);
XMLAssert.assertXMLEqual(doc2, doc1);
}
这里为了方便代码展示没有将actXmlText写成大字符串,实际上通常测试场景中这个代表调用接口返回值,代码会是类似下面的代码
WebConversation conversation = new WebConversation();
WebRequest request = new PostMethodWebRequest(Url);
WebResponse response = conversation.getResponse(request);
System.out.println(response.getText());
String actXmlText = response.getText();
测试结果错误会报如下内容,明确告诉你哪个节点出错了:
junit.framework.AssertionFailedError: org.custommonkey.xmlunit.Diff
[different] Expected text value ‘16′ but was ‘15′ – comparing 16 at /error_response[1]/code[1]/text()[1] to 15 at /error_response[1]/code[1]/text()[1]
今天我发现xmlunit有这个功能(有点后知后觉,大家不要笑话);而且结合xml其他的jar包可以快速解决这个问题,而且代码也很精简,特贴代码如下
public void tet() throws Exception
{
String actXmlText ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +"\r\n"+
"<error_response>" +"\r\n"+
" <args>" +"\r\n"+
" <arg></arg>" +"\r\n"+
" </args>" +"\r\n"+
" <code>16</code>" +"\r\n"+
" <msg>wang wang service return error</msg>" +"\r\n" +
" <sub_code>33000</sub_code>" +"\r\n" +
" <sub_msg>wang wang service error: param error.</sub_msg>" +"\r\n" +
"</error_response>";
System.out.println(actXmlText);
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
InputStream is= new FileInputStream("c:/11.xml");
Document doc = dombuilder.parse(is);
InputStream is1 = new FileInputStream("c:/12.xml");
Document doc1 = dombuilder.parse(is1);
Document doc2 = dombuilder.parse( new ByteArrayInputStream(actXmlText.getBytes()));
XMLAssert.assertXMLEqual(doc2, doc);
XMLAssert.assertXMLEqual(doc2, doc1);
}
这里为了方便代码展示没有将actXmlText写成大字符串,实际上通常测试场景中这个代表调用接口返回值,代码会是类似下面的代码
WebConversation conversation = new WebConversation();
WebRequest request = new PostMethodWebRequest(Url);
WebResponse response = conversation.getResponse(request);
System.out.println(response.getText());
String actXmlText = response.getText();
测试结果错误会报如下内容,明确告诉你哪个节点出错了:
junit.framework.AssertionFailedError: org.custommonkey.xmlunit.Diff
[different] Expected text value ‘16′ but was ‘15′ – comparing 16 at /error_response[1]/code[1]/text()[1] to 15 at /error_response[1]/code[1]/text()[1]
本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/282596,如需转载请自行联系原作者