背景:在接口测试中,一般返回都是json字符串,同一个接口随着开发代码的改动或者相关业务需求的变更,需要反复测试多次,但使用的case都是一样的,反复的人工比对效率低下还容易出错,于是想着如果能实现两个json字符串的自动比对的话,岂不是可以解放很多的人工比对工作,哈哈哈哈哈------于是乎,想做一个懒人的自己终于开始了实现json比对函数编写的开始,废话不多数,上代码:
def compare_one(src_data,dst_data,flag):
flag=flag
#print("------------------进入compare",flag)
from collections import Iterable
if isinstance(dst_data,Iterable) and isinstance(src_data,Iterable):
if len(dst_data)!=len(src_data):
print("dst_data和src_data的长度不一致:%s-----%s"%(dst_data,src_data))
flag=0
return flag
if isinstance(src_data,dict) and isinstance(src_data,dict):
#print("----进入instance_dict_____")
for key in dst_data:
if key not in(src_data):
print("src_data不存在这个:%s"% key)
flag=0
return flag
if isinstance(dst_data[key],(dict,list)):
flag=compare_one(src_data[key],dst_data[key],flag)
else:
if dst_data[key]!=src_data[key]:
print("dst_data和src_data的:%s的值对应不上:%s--%s"% (key,dst_data[key],src_data[key]),'\n')
flag=0
return flag
if isinstance(dst_data,list) and isinstance(src_data,list):
#print("----进入instance_list_____")
for i in range(len(dst_data)):
if isinstance(dst_data[i],(dict,list)):
flag=compare_one(dst_data[i],src_data[i],flag)
else:
if dst_data[i] not in src_data:
print("%s和%s列表的值对不上"%(dst_data,dst_data),'\n')
flag=0
return flag
return flag
参数:
src_data:用于作为参考的json串
dst_data:接口返回的json串
flag:初始传入为1,如果返回1表示两个json串一致,如果返回1表示不一致