在測試工作中,一般都會接觸到期望結果資料與實際結果資料一致性比對的測試場景,對於複雜、龐大資料的比對工作。如果依靠人工執行,其成本相當高,難以保障執行結果的一致性(多次執行可能存在偏差),並且重複性極高。因此,通常我們需要考慮如何透過自動化工具實現資料的比對。
之前分享過《Python實現複雜場景下文字資料的一致性比對》文章,主要應用於檔案一致性比對的測試場景。今天分享下如何實現Json資料的一致性校驗的整體設計與實現。
1.Key-Value對集合,在Python語言中可以理解為字典(Dict),如下圖。
2.有序集合,在Python語言中可以理解為列表(List),如下圖。
在測試工作中接觸的Json資料校驗,大多是請求響應體的校驗,設計主要考慮了以下兩點:
1.需支援複雜JSON比對,如查詢地市編碼基本資訊介面的響應體中包含,省份編碼、省份地市的基本資訊(地市編碼、地市名稱、地市排序),例如 :
2.需支援比對結果的可追溯,比如地市數量(Count)不一致時,不能僅輸出期望、實際結果的地市數量,還需要輸出整個JSON的哪個節點的值不一致,或者缺失哪個節點,如Detail.Count的值不一致,例如:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同: <actual>: 2 <expect>: 3
一致性比對的整體設計包含三個模組:遞迴解析模組,格式轉換模組,資料比對模組,具體描述如下。
遞迴解析模組
遞迴解析,按key的層次關係,每層生成資料結構為[[key1,key2,value1],[key1,key2,value2]],程式碼設計如下:
格式轉換模組
建立節點流及值對映,資料結構為{key1.key2:value1,key1.key3:value2},如下
資料比對模組
針對格式轉換模組的結果,遍歷比對各節點流(如,Detail.City.sort),校驗節點與值是否一致,對於不一致的資料輸出節點流及值,輸出節點流及值,如下。
結果輸出如下:
在測試工作中,一般都會接觸到期望結果資料與實際結果資料一致性比對的測試場景,對於複雜、龐大資料的比對工作。如果依靠人工執行,其成本相當高,難以保障執行結果的一致性(多次執行可能存在偏差),並且重複性極高。因此,通常我們需要考慮如何透過自動化工具實現資料的比對。
之前分享過《Python實現複雜場景下文字資料的一致性比對》文章,主要應用於檔案一致性比對的測試場景。今天分享下如何實現Json資料的一致性校驗的整體設計與實現。
JSON的兩種資料結構1.Key-Value對集合,在Python語言中可以理解為字典(Dict),如下圖。
2.有序集合,在Python語言中可以理解為列表(List),如下圖。
一致性校驗核心設計在測試工作中接觸的Json資料校驗,大多是請求響應體的校驗,設計主要考慮了以下兩點:
1.需支援複雜JSON比對,如查詢地市編碼基本資訊介面的響應體中包含,省份編碼、省份地市的基本資訊(地市編碼、地市名稱、地市排序),例如 :
2.需支援比對結果的可追溯,比如地市數量(Count)不一致時,不能僅輸出期望、實際結果的地市數量,還需要輸出整個JSON的哪個節點的值不一致,或者缺失哪個節點,如Detail.Count的值不一致,例如:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同: <actual>: 2 <expect>: 3
設計實現一致性比對的整體設計包含三個模組:遞迴解析模組,格式轉換模組,資料比對模組,具體描述如下。
遞迴解析模組
遞迴解析,按key的層次關係,每層生成資料結構為[[key1,key2,value1],[key1,key2,value2]],程式碼設計如下:
格式轉換模組
建立節點流及值對映,資料結構為{key1.key2:value1,key1.key3:value2},如下
資料比對模組
針對格式轉換模組的結果,遍歷比對各節點流(如,Detail.City.sort),校驗節點與值是否一致,對於不一致的資料輸出節點流及值,輸出節點流及值,如下。
結果輸出如下:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同: <actual>: 2 <expect>: 3