且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用xmlUnit对XML字符串对比的一些技巧

更新时间:2022-10-04 20:56:53

今天又遭遇比较变态的 XML 字符串对比。所以特意将几种特殊的对比总结了一下:
1.     如何对比 XML 中某些特定路径节点是否相等,而不是整体对比。测试场景,如得到订购信息,可能订购的结束日期是实时生成的,假如我们不需要对比(每次回归都回出错)。那么参加如下脚本
 String ExpXmlText ="<?xml version=\"1.0\" encoding=\"utf-8\"?><AppSubscResult>"+"\r\n"+
       "  <result>Yes</result>"+"\r\n"+
       "  <subscUserId>9950001</subscUserId>"+"\r\n"+
       "  <appInstanceId></appInstanceId>"+"\r\n"+
       "  <gmtStart>2008-08-11 00:00:00</gmtStart>"+"\r\n"+
       "  <gmtEnd>2008-10-10 23:59:59</gmtEnd>"+"\r\n"+
       "  <subscUrl></subscUrl>"+"\r\n"+
       "  <errorMessage></errorMessage>"+"\r\n"+
       "</AppSubscResult>";
  String path1 = "/AppSubscResult/result";
          String path2 = "/AppSubscResult/subscUserId";
          String path4 = "/AppSubscResult/gmtStart";
          String path5 = "/AppSubscResult/gmtEnd";
          String path6 = "/AppSubscResult/subscUrl";
          String path7 = "/AppSubscResult/errorMessage";
          XMLAssert.assertXpathValuesEqual(path1,ExpXmlText,path1,ActXmlText);
          XMLAssert.assertXpathValuesEqual(path2,ExpXmlText,path2,ActXmlText);
          XMLAssert.assertXpathValuesEqual(path4,ExpXmlText,path4,ActXmlText);
          XMLAssert.assertXpathValuesEqual(path5,ExpXmlText,path5,ActXmlText);
          XMLAssert.assertXpathValuesEqual(path6,ExpXmlText,path6,ActXmlText);
          XMLAssert.assertXpathValuesEqual(path7,ExpXmlText,path7,ActXmlText);
2.     如果 xml 文件中含多个同节点路径的节点,如何只断言内容,而不关注节点次序。 测试场景如下,测试下面的期望结果,不关系 a 节点的排序情况。
<root>
<a>1</a>
  <a>2</a>
  <a>3</a>
</root>
 String ActXmlText = response.getText();
       System.out.println(ActXmlText);
  
     Diff myDiff = new Diff(ExpXmlText, ActXmlText);
     myDiff.overrideElementQualifier(new MultiLevelElementNameAndTextQualifier(1));
     XMLAssert.assertXMLEqual("GetTribMemberList 列表 ",
                     myDiff, true);
3 . 但是如果用 xmlunit1.1 的版本对于下面的 xml 字符串,如果期望附录 a 的节点的次序不一致的问题就无能为力了 ,那么用户就要升级 xmlunit 了,升级到 xmlunit1.2 的版本
<root>
  <a><c>1.1</c><d>1.2</d></a>
  <a><c>2.1</c><d>2.2</d></a>
</root>
代码如下:
Diff myDiff = new Diff(ExpXmlText, ActXmlText);
     //RecursiveElementNameAndTextQualifier
     myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
     XMLAssert.assertXMLEqual("GetTribChiefUser 列表 ",
                     myDiff, true);


本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/282603,如需转载请自行联系原作者