专栏文章 Python 仓库 Deepdiff 简单介绍

simonpatrick · 2020年08月06日 · 最后由 大海 回复于 2020年08月06日 · 5709 次阅读

DeepDiff 使用

DeepDiff的用处:

Deep Difference of dictionaries, iterables, strings and other objects. It will recursively look for all the changes.

DeepDiff 的初衷是用来找出不同数据的差别,在使用了一下之后,如果可以直接使用作为测试的 assertion,感觉效果应该是不错的.

Deepdiff 比较 JSON 的差异


val = dict()
val['test'] = "value"
val['key'] = {"sub_key": "sub_value"}
result = to_json(val)
expected = """{"key": {"sub_key1": "sub_value"}, "test": "value"}"""
result = DeepDiff(result, expected, view='tree')
print(result)
print(result.to_json())

result 差异的结果是:

{"values_changed": {"root": {"new_value": "{\"key\": {\"sub_key1\": \"sub_value\"}, \"test\": \"value\"}", "old_value": "{\"key\": {\"sub_key\": \"sub_value\"}, \"test\": \"value\"}"}}}

然后实际上根据这个返回的 json 获取所有的差别.

DeepDiff 忽略 Order

在实际 assertion 的时候,有时对象顺序不一样,但是实际情况两个值还是一样的,所以可以在比较的时候加入 ignore order 或者 ignore string case(忽略大小写):

result = DeepDiff(result, expected, view='tree',ignore_order=True,ignore_string_case=True)

使用 DeepDiff 的好处是:

  1. api 测试的时候,可以直接将全部的 json 比较,来确定是不是一样,可以少写很多代码
  2. 数据库数据比较的时候也是一样可以,使用 sql 查处结果之后,直接变成 json 就可以和期望的 json 对比了

这个仓库个人感觉可以继续再深挖,应该可以在测试过程中有更好的使用.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

这个挺好的,我项目里都是自己封装的方法来比较 json,麻烦😂

点赞,这个在工作中能减轻很多工作量

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册