博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xml文件对比或xml大字符串对比方法(蛮精简的)
阅读量:7071 次
发布时间:2019-06-28

本文共 1825 字,大约阅读时间需要 6 分钟。

  现在测试很多接口返回的类型是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]
本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/282596,如需转载请自行联系原作者
你可能感兴趣的文章
Spring Boot 2.2首个里程碑版本发布,改进性能和内存使用
查看>>
访谈:当开发者成为技术主管 如何领导团队
查看>>
Google发布App Engine第二代运行时,提供Python 3.7和PHP 7.2支持
查看>>
安全狗:云时代的服务器安全守护者
查看>>
从初创型到独角兽企业,监控架构演进的那些事儿
查看>>
BAT集体升级云事业部,这背后都藏着哪些“小心思”?
查看>>
Oracle 裁员史:技术人死于重组,卒于云计算
查看>>
GNU parallel 笔记
查看>>
性能之巅:Linux网络性能分析工具
查看>>
InfoQ就Spring Boot 2.0 GA版发布采访了项目牵头人Phil Webb
查看>>
Oracle回应用户锁定,自治数据库是更好选择
查看>>
微软在C# 8中引入预览版可空引用类型
查看>>
度量和提高代码质量
查看>>
批量创建用户及密码
查看>>
redis cluster (1) 原理与基本操作
查看>>
数据库的三大范式以及五大约束
查看>>
Nginx学习笔记(二)——搭建Web服务器
查看>>
BGP之间建立邻居
查看>>
python作业
查看>>
DNS配置,主从,子域,转发
查看>>