前言
- 在接口测试里我们会比较2个json的返回值是否相同 咋搞呢?
解释
DeepDiff模块常用来效验两个对象是否一致,并找出其中差异之处,提供了:
- DeepDiff:字典,可迭代项,字符串和其他对象的深层差异。它将递归查找所有更改。
- DeepSearch:在其它对象在搜索对象
- DeepHash:根据对的内容对其进行哈希处理
- 官网地址:https://deepdiff.readthedocs.io/en/latest/
- 本文只介绍DeepDiff的使用
解释
DeepDiff可以用来校验多种类型的文件内容,例如:txt、json、图片等
校验:txt文件
场景1:a和b两个文件中内容都相同
a.txt 内容:python入门学习
b.txt 内容: python入门学习
相同输出:{}空字典,可以通过空字典进行判断
代码
from deepdiff import DeepDiff
f1, f2 = open("a", "r", encoding="utf-8").read(), open("b", "r", encoding="utf-8").read()
print(DeepDiff(f1, f2))
#相同输出:{}
场景2
a和b两个文件中内容不相同
a.txt 内容:python学习,django学习
b.txt 内容: python入门学习
代码
from deepdiff import DeepDiff f1, f2 = open("a", "r", encoding="utf-8").read(), open("b", "r", encoding="utf-8").read() print(DeepDiff(f1, f2))
当两个文件内容中存在不同时,输出如下:
{'values_changed': {'root': {'new_value': 'python入门学习', 'old_value': 'python学习,django学习'}}}
通过是否有values_changed来判断不同,root中列出了那些内容不相同。
校验:json
示例:
from deepdiff import DeepDiff
class deepdiff_Handle(object,):
def __init__(self,data1,data2):
self.deep=DeepDiff(data1,data2)
def diff_return(self):
# print(self.deep)
if dict(self.deep).get('dictionary_item_added') != None:
return 'dictionary_item_added数据有新增'
elif dict(self.deep).get('dictionary_item_removed') != None:
return 'dictionary_item_removed数据有删除'
elif dict(self.deep).get('values_changed') != None:
return 'values_changed值有改变'
else:
return '没有异常'
if __name__ == '__main__':
d1 = {"a": 1, "b": 2, "c": 3, "e": {"a": 3}}
# 数据有新增
# d2 = {"a": 1, "b": 2, "c": 3, "d": 4, "e": {"a": 1}}
# 数据有删除
# d2 = {"a": 1, "b": 2, "c": 3}
# 值有改变
# d2 = {"a": 1, "b": 2, "c": 3, "e": {"a": 4}}
# 没有变化
d2 = {"a": 1, "b": 2, "c": 3, "e": {"a": 3}}
deep=deepdiff_Handle(d1, d2)
print(deep.diff_return())
总结
a和b b中有的字段a中没有,输出:dictionary_item_added, a和b a中有的字段b中没有,输出:dictionary_item_removed,当两个对象中都存在,只是值不相同时,输出:values_changed: