![測試工具鏈—— Python實現JSON數據的一致性校驗](http://p2.ttnews.xyz/loading.gif)
在測試工作中,一般都會接觸到期望結果數據與實際結果數據一致性比對的測試場景,對於複雜、龐大數據的比對工作。如果依靠人工執行,其成本相當高,難以保障執行結果的一致性(多次執行可能存在偏差),並且重複性極高。因此,通常我們需要考慮如何通過自動化工具實現數據的比對。
之前分享過 文章,主要應用於文件一致性比對的測試場景。今天分享下如何實現Json數據的一致性校驗的整體設計與實現。
JSON的兩種數據結構
1.Key-Value對集合,在Python語言中可以理解為字典(Dict),如下圖。
![測試工具鏈—— Python實現JSON數據的一致性校驗](http://p2.ttnews.xyz/loading.gif)
2.有序集合,在Python語言中可以理解為列表(List),如下圖。
一致性校驗核心設計
在測試工作中接觸的Json數據校驗,大多是請求響應體的校驗,設計主要考慮了以下兩點:
1.需支持複雜JSON比對,如查詢地市編碼基本信息接口的響應體中包含,省份編碼、省份地市的基本信息(地市編碼、地市名稱、地市排序),例如 :
2.需支持比對結果的可追溯,比如地市數量(Count)不一致時,不能僅輸出期望、實際結果的地市數量,還需要輸出整個JSON的哪個節點的值不一致,或者缺失哪個節點,如Detail.Count的值不一致,例如:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同:
<actual>: 2
<expect>: 3
/<expect>/<actual>
設計實現
一致性比對的整體設計包含三個模塊:遞歸解析模塊,格式轉換模塊,數據比對模塊,具體描述如下。
遞歸解析模塊
遞歸解析,按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
/<expect>/<actual>
若對你有所幫助,歡迎大家評論、留言。
閱讀更多 測試開發技術棧 的文章