在接口测试过程中,有时候会遇到需要对返回或获取到的json 数据进行比较的情况,如果json数据量较少的时候。我们可以通过手工直接找到不同。但是如果需要比较的json 数据量比较大的时候。我们就需要借助一些工具或者编写一些脚本来帮助我们实现对json 文件的比较。这里简单讲讲json_tools 这个模块中如何比较json文件
import json_tools
import json_diffrent
对于两个字典的比较
a = {‘a’: 1, ‘b’: 2, “e”: 8}
b = {‘a’: 1, ‘b’: 2, ‘e’: 8}
d = {‘b’: 2, ‘a’: 1, “e”: 8}
c = {‘a’: 1, ‘b’: 3, “d”: 5}
直接使用== 可以判断两个字典是否一样
print(a == b)
print(a == d)
print(a == c)
使用json_tools 比较两个json文件
查看json_tools 的属性
print(dir(json_tools))
比较两个json数据的变化,用法:diff(a,b) 表示,b相对与a的变化!!
res = json_tools.diff(a, c) # diff 返回的是一个列表,列表中是字典
print(res)
“”"
[{‘replace’: ‘/b’, ‘value’: 3, ‘prev’: 2},
replace:表示值不一样的键的名称
value:表示变化后即当前该键的值 也就是c列表中键b的值
prev:prev表示该键此前的值 也就是a列表中键b的值
{‘remove’: ‘/e’, ‘prev’: 8},
remove:表示c相对于a少了一个组键值对,键名称为:e
prev:c相对于a少了的键e对应的值为:8
{‘add’: ‘/d’, ‘value’: 5}]
add:表示c相对于a多了一个组键值对,键名称为:d
value:c相对于a多了的键e对应的值为:5
“”"
比较两个json文件
res1 = json_tools.diff(json_diffrent.data1, json_diffrent.data2)
print(res1)
可以发现直接使用json文件比较是不能识别出不同的地方的。需要先将json 文件转换成字典
“”"
[{‘replace’: ‘/’, ‘value’: ‘{“a”: 1, “b”: 3, “d”: 5}’, ‘prev’: ‘{“a”: 1, “b”: 2, “e”: 8}’}]
“”"
多层嵌套的比较
a = {“class”: {“1”: {“name”: “xiaoxiao”, “age”: 18, “name1”: “xiaoli”, “age1”: 20}}}
b = {“class”: {“1”: {“name”: “xiaoxiao1”, “age”: 18, “name12”: “xiaoli2”, “age1”: 20}}}
res3 = json_tools.diff(a, b)
print(res3)
“”"
[{‘replace’: ‘/class/1/name’, ‘value’: ‘xiaoxiao1’, ‘prev’: ‘xiaoxiao’},
{‘remove’: ‘/class/1/name1’, ‘prev’: ‘xiaoli’},
{‘add’: ‘/class/1/name12’, ‘value’: ‘xiaoli2’}]
“”"