回覆列表
  • 1 # 軟體測試開發技術棧

    在測試工作中,一般都會接觸到期望結果資料與實際結果資料一致性比對的測試場景,對於複雜、龐大資料的比對工作。如果依靠人工執行,其成本相當高,難以保障執行結果的一致性(多次執行可能存在偏差),並且重複性極高。因此,通常我們需要考慮如何透過自動化工具實現資料的比對。

    之前分享過《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

  • 中秋節和大豐收的關聯?
  • 發簡訊時顯示請檢查網路服務,對方沒接到簡訊,是怎麼回事啊?