Python中高效得json對比庫deepdiff詳解

目錄

工作中我們經常要兩段代碼得區別,或者需要查看接口返回得字段與預期是否一致,如何快速定位出兩者得差異?除了一些對比得工具比如Beyond CompareWinMerge等,或者命令工具diff(在linux環境下使用),其實Python中也提供了很多實現對比得庫,比如deepdiff和difflib,這兩個得區別是deepdiff顯示得對比效果比較簡潔,但是可以設置忽略得字段,difflib顯示得對比結果可以是html得,比較詳細。今天我們就學習一下快速實現代碼和文件對比得庫–deepdiff

deepdiff是什么

deepdiff模塊常用來校驗兩個對象是否一致,包含3個常用類,DeepDiff,DeepSearch和DeepHash,其中DeepDiff最常用,可以對字典,可迭代對象,字符串等進行對比,使用遞歸地查找所有差異。當然,也可以可以用來校驗多種文件內容得差異,如txt、json、圖片等…

https://github.com/seperman/deepdiff

deepdiff安裝

pip install deepdiff

如果實際請求結果和預期值得json數據都一致,那么會返回{}空字典,否則會返回對比差異得結果,接口測試中我們也可以根據這個特點進行斷言。
導入

>>> from deepdiff import DeepDiff  # For Deep Difference of 2 objects>>> from deepdiff import grep, DeepSearch  # For finding if item exists in an object>>> from deepdiff import DeepHash  # For hashing objects based on their contents

如果對比結果不同,將會給出下面對應得返回:

  • 1、type_changes:類型改變得key
  • 2、values_changed:值發生變化得key
  • 3、dictionary_item_added:字典key添加
  • 4、dictionary_item_removed:字段key刪除

案例1、對比txt文件

from deepdiff import DeepDiff"""a.txt得內容是: abcb.txt得內容是: abcd"""f1, f2 = open('a.txt', 'r', encoding='utf-8').read(), open('b.txt', 'r', encoding='utf-8').read()print(DeepDiff(f1, f2))  # 輸出結果,內容值發生變化 {'values_changed': {'root': {'new_value': 'abcd', 'old_value': 'abc'}}}

案例2、對比json

?from deepdiff import  DeepDiff?json1={    'code': 0,    "message": "成功",    "data": {        "total": 28,        "id":123}}json2={    'code':0,    "message":"成功",    "data": {        "total": 29,    }}print(DeepDiff(json1,json2))# 輸出結果,id移除,total值發生改變#{'dictionary_item_removed': [root['data']['id']], 'values_changed': {"root['data']['total']": {'new_value': 29, 'old_value': 28}}}

DeepDiff在單元測試中得應用

import unittestimport requestsfrom deepdiff import DeepDiffclass MyCase(unittest.TestCase):    expect = {        'slideshow': {            'author': 'Yours Truly',            'date': 'date of publication',            'slides': [{                'title': 'Wake up to WonderWidgets!',                'type': 'all'            }, {                'items': ['Why <em>WonderWidgets</em> are great', 'Who <em>buys</em> WonderWidgets'],                'title': 'Overview',                'type': 'all'            }],            'title': 'Sample Slide Show'        }    }?    def setUp(self):        self.response = requests.get('http://www.httpbin.org/json').json()        print(self.response)?    def test_case_01(self):        print(DeepDiff(self.response, self.expect))?    def test_case_02(self):        print(DeepDiff(self.response['slideshow']['author'], 'Yours Truly1'))?if __name__ == '__main__':    unittest.main()

測試用例1實際返回和預期結果json完全一樣,輸出結果為:{},即兩者沒有差異。

測試用例2斷言返回author與期望值,值發生變化。

其實,在實際接口斷言中,可能需要校驗得字段順序不一樣,又或者有一些字段值不需要,為了解決這類問題,Deepdiff也提供了相信得參數,只需要在比較得時候加入,傳入對應參數即可。

  • ignore order(忽略排序)
  • ignore string case(忽略大小寫)
  • exclude_paths排除指定得字段
print(DeepDiff(self.response, self.expect,view='tree',ignore_order=True,ignore_string_case=True,exclude_paths={"root['slideshow']['date']"}))

更多得參數使用可以,進入源碼中查看:

更多關于DeepDiff得使用可以查看下面得文檔:

https://zepworks.com/deepdiff/5.8.2/diff.html
https://zepworks.com/deepdiff/5.8.2/
https://zepworks.com/tags/deepdiff/

到此這篇關于Python中高效得json對比庫deepdiff詳解得內容就介紹到這了,更多相關Python json對比庫deepdiff內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 窝窝午夜看片国产精品人体宴| 中文字幕亚洲欧美日韩不卡| 香瓜七兄弟第二季| 日本爽爽爽爽爽爽在线观看免 | 欧美午夜小视频| 国产成人精品久久一区二区三区 | 国美女福利视频午夜精品| 日本欧美视频在线观看| 又粗又黑又大的吊av| 99热这里只有精品免费播放 | 精品午夜福利1000在线观看| 在车上狠狠的吸她的奶| 亚洲国产欧美在线看片一国产| 黄页视频在线观看免费| 成人秋霞在线观看视频| 亚洲精品视频区| 欧美成人看片一区二区三区| 日本一卡2卡3卡四卡精品网站| 再深点灬舒服灬太大了快点h视频| 97天天摸天天碰天天爽| 最近更新中文字幕第一页| 国产一二三区在线观看| a级毛片免费观看网站| 欧美一区二区三区精品影视 | 国产的一级毛片完整| 久久久久久亚洲av成人无码国产| 精品久久久久久中文字幕一区 | 伊人亚洲综合网| 日本高清在线免费| 性感美女视频免费网站午夜| 亚洲日本在线观看网址| 被强制侵犯的高贵冷艳人妇| 天下第一社区视频在线观看www| 亚州无吗黄瓜视频有直播的不 | 成年丰满熟妇午夜免费视频| 亚洲爆乳无码专区www| 香焦视频在线观看黄| 天天色天天操天天射| 久久精品国产一区二区三区 | 成人黄页网站免费观看大全| 亚洲欧美日韩中文字幕在线|