XML字串對比技巧二

2021-09-21 21:28:14 字數 2022 閱讀 8628

之前都使用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的字串,當返回值為較小的值的時候。期望結果直接寫在 裡邊是靠普的。但是當返回結果相當大的時候,期望值儲存在 呢,以前我也做過直接寫在 裡,結果造成 行相當的長,幾乎 乙個測試用例只能看見期望結果的資料了,自然不好。那麼如果存在檔案裡如何呢?可能會有這樣的問題存在檔案...