python:deepdiff断言使用

前言

  • 在接口测试里我们会比较2个json的返回值是否相同 咋搞呢?

解释

DeepDiff模块常用来效验两个对象是否一致,并找出其中差异之处,提供了:

  1. DeepDiff:字典,可迭代项,字符串和其他对象的深层差异。它将递归查找所有更改。
  2. DeepSearch:在其它对象在搜索对象
  3. DeepHash:根据对的内容对其进行哈希处理
  4. 官网地址:https://deepdiff.readthedocs.io/en/latest/
  5. 本文只介绍DeepDiff的使用

解释

python: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:

上一篇:vue-element-admin layout组件解析【Sidebar】


下一篇:接口自动化测试,一键快速校验接口返回值全部字段