主要是利用递归,逐层级、逐次、逐字段比较;可以用于幂等类接口的返回体校验。
class JsonCompare:
def __init__(self, second_data, first_data, debug_model=False):
"""
用于两个json串比对,输出两串json字段差异
:param second_data: 用于比对的新json
:param first_data: 基准json
:param debug_model: 为True时将在控制台输出比对结果,默认不开启
"""
self.compare_result = [] # 存放字段差异
self.compare_error = [] # 存放字段比对异常
self.compare(second_data, first_data)
if debug_model:
for i in self.compare_result:
print(i)
for i in self.compare_error:
print(i)
def compare(self, second_data, first_data, path=''):
try:
if not isinstance(second_data, (list, tuple, dict)):
# 比对非list\tuple\dict类型的数据
if not second_data == first_data:
msg = {
'field': path,
'error_type': 'field value diff',
'secondResp': second_data,
'firstResp': first_data
}
self.compare_result.append(msg)
elif isinstance(second_data, (list, tuple)):
# 如果新数据是list/tuple,则判断老数据是否类型一致;不一致则追加到compare_error
if type(second_data) != type(first_data):
msg = {
'field': path,
'error_type': "field type diff",
'secondResp': f"type is {
type(second_data)}",
'firstResp': f"type is {
type(first_data)}"
}
self.compare_result.append(msg)
return
if