运行中出现了问题是因为,小鱼我偷偷的在utils.py中增加了代码
咱们使用递归的方式进行获取json的key值,utlis.py代码增加如下:
# 获取接口返回值的格式,在httpcaps.py中进行调用喽
def compare_key_value(json_p):
list_key = []
def getkey_value_all(input_json={}):
if isinstance(input_json, dict): # isinstance() 函数来判断一个对象是否是一个已知的类型
for key in input_json.keys(): # keys() 函数以列表返回一个字典所有的键。
key_value = input_json.get(key) # get() 函数返回指定键的值,如果值不在字典中返回默认值。
if isinstance(key_value, dict): # dict字典
getkey_value_all(key_value)
elif isinstance(key_value, list):
for json_array in key_value:
getkey_value_all(json_array)
else:
# " = " + str(key_value)
# print(str(key))
# 对象下面的key
list_key.append(str(key))
pass
# 对象类型的key
list_key.append(str(key))
elif isinstance(input_json, list):
for input_json_array in input_json:
getkey_value_all(input_json_array)
getkey_value_all(json_p)
return list_key
# 写入token
def writetoken(token):
path = Path('config') / ('txt_final.txt')
# 方法可以写入token和普通常量
f = open(path, 'a')
f.write(token)
f.close()
这个方法,会获取到预期结果和接口返回信息的key值,进行格式校验
内容值不关注,是因为每个接口的信息内容是巨大的,而且自动化不能完全替代手工,所以重要的信息,还是自己动手关注一下比较好,writetoken函数方法,这里提前考虑了登录接口返回的标识码,咱们将标识码存入文本中,方便进行获取
将获取到两个key进行对比
# 对比两个json的函数
def iscompare_json(sub, parent):
# 将json内容传入获取key值
a1 = compare_key_value(sub)
a2 = compare_key_value(parent)
# 两个key值进行对比
flag = operator.eq(a1, a2)
# 一致则通过
if flag == True:
return 'Pass'
# 不通过
else:
return 'Fail'
接下来在utlis文件里面进行一下调试:
if __name__ == '__main__':
sub = {'phone': '17547817934', 'type': '1'}
parent = {'phone': '17547817934', 'type': '1'}
print(iscompare_json(sub, parent))
结果如下:
修改其中一个json的信息:
if __name__ == '__main__':
sub = {'phone': '17547817934', 'type': '1'}
parent = {'phone': '17547817934', 'sort': '1'}
print(iscompare_json(sub, parent))
结果如下:
到了这里再次运行httpcaps.py文件就不会出错了哦
原文链接:https://blog.csdn.net/weixin_45344334/java/article/details/94497629