json字符串比较,测试常用需求,整理了一下代码,全部比较完成后,输出比较结果。
说明:
1、对于json格式,先转为python dict;对于python dict,直接比较。
2、比较方式采用递归算法。
3、对于接口返回json串,一般不太大,这里全部比较完再返回,确保拿到全部比较结果。
#!/usr/bin/env python
# -*-coding:utf-8-*-
class comm_tools:
def __init__(self):
pass
def cmp_dict(self,src_data, dst_data,ret_result):
if isinstance (src_data, dict):
"""若为dict格式"""
for key in dst_data:
if key not in src_data:
result="src不存在这个key:%s" % (key)
ret_result.append(result)
for key in src_data:
if key in dst_data:
"""递归"""
self.cmp_dict (src_data[key], dst_data[key],ret_result)
else:
result="dst不存在这个key:%s" % (key)
ret_result.append (result)
elif isinstance (src_data, list):
"""若为list格式"""
if len (src_data) != len (dst_data):
print("list len: '{}' != '{}'".format (len (src_data), len (dst_data)))
for src_list, dst_list in zip (sorted (src_data), sorted (dst_data)):
"""递归"""
self.cmp_dict (src_list, dst_list,ret_result)
else:
if str (src_data) != str (dst_data):
result="字符串核对不通过,两个值分别为:src_data is:%s,dst_data is:%s" %( str(src_data),str(dst_data))
ret_result.append (result)
if ret_result:
return False,ret_result
else:
return True,ret_result
if __name__ == '__main__':
tool = comm_tools ()
src_data={'a' : 1, 'b' : 3, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,6],'g':{'a':'1','b':2}}
dst_data={'a' : 1, 'b' : 3, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,6],'g':{'a':'1','b':2}}
#dst_data={'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,7],'g':{'a':'1','b':2}}
check_detail=[]
check_result,check_detail= tool.cmp_dict(src_data,dst_data,check_detail)
if check_result:
print "核对通过"
else:
print "核对不通过,结果为:"
for r in check_detail:
print r

853

被折叠的 条评论
为什么被折叠?



