之前都使用xmlunit來對比xml字串,今天發現當出現如下需求時,xmlunit無法滿足或者說有bug,特自己寫了對比方法。
需求:需要對比如下xml字串,要求不對比其中的sign和time欄位,其他欄位都需要對比。
<?xml version="1.0" encoding="utf-8"?>
elb_wsi_001
1236586307734
822a379aec82755afaa9c63eea3b05b9
1236586307734
7ce9e326cb28b0084f7f331dcbb79f50
elb_wsi_002
1236586307734
2ea135b978c75fb639fe65909283dcba
嘗試使用xmlunit的方法
xmlassert.assertxpathvaluesequal(path7,expxmltext,path7,actxmltext);
結果發現只對第乙個slotpermresult節點的內容(子節點進行對比),不符合我們的需求。
原因xmlassert根據path找節點,只找第乙個節點。所以只好自己寫**。
關鍵函式,需要根據path找到符合這一路徑的所有節點原始碼如下
public static nodelist selectnodes(string express, string xmlstr) throws exception
catch (xpathexpressionexception e)
return result; }
輔助函式:由於我們要傳入的都是xml字串,所以在這之前需要把字串轉成stream
原始碼如下
static inputstream string2inputstream(string str) throws exception
搞定之後,我們需要對所有需要對比的路徑都放在list引數中傳給對比函式,讓對比函式逐一進行對比
對比函式原始碼如下
@suppresswarnings("unchecked")
public static void assertequalsnodes(string expxml,string actxml,list list) throws exception
}}
呼叫時候的**片段如下:
string expxmltext = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "" + ""
+ "elb_wsi_001 "
+ "1236586307734 "
+ "822a379aec82755afaa9c63eea3b05b9 "
+ " "
+ " " + " "
+ ""
+ " " + "1236586307734 "
+ "7ce9e326cb28b0084f7f331dcbb79f50 "
+ " "
+ " " + " "
+ ""
+ "elb_wsi_002 "
+ "1236586307734 "
+ "2ea135b978c75fb639fe65909283dcba "
+ " "
+ " "
+ "";
listnodes = new arraylist();
nodes.add("/slotpermresult-array/slotpermresult/slotids");
nodes.add("/slotpermresult-array/slotpermresult/errorcode");
nodes.add("/slotpermresult-array/slotpermresult/errormessage");
。。。。(在這裡通過測試執行得到actxmltest)
assertequalsnodes(expxmltext, actxmltest,nodes);
XML字串對比技巧二
之前都使用xmlunit來對比xml字串,今天發現當出現如下需求時,xmlunit無法滿足或者說有bug,特自己寫了對比方法。需求 需要對比如下xml字串,要求不對比其中的sign和time欄位,其他欄位都需要對比。elb wsi 001 1236586307734 822a379aec82755a...
XML字串對比技巧二
之前都使用xmlunit來對比xml字串,今天發現當出現如下需求時,xmlunit無法滿足或者說有bug,特自己寫了對比方法。需求 需要對比如下xml字串,要求不對比其中的sign和time欄位,其他欄位都需要對比。elb wsi 001 1236586307734 822a379aec82755a...
xml檔案對比或xml大字串對比方法(蠻精簡的)
現在測試很多介面返回的型別是xml的字串,當返回值為較小的值的時候。期望結果直接寫在 裡邊是靠普的。但是當返回結果相當大的時候,期望值儲存在 呢,以前我也做過直接寫在 裡,結果造成 行相當的長,幾乎 乙個測試用例只能看見期望結果的資料了,自然不好。那麼如果存在檔案裡如何呢?可能會有這樣的問題存在檔案...