自动化测试,判断接口响应报文,是否与模板一致或key相同。

def cmp_tmp_data(tmplate_data, data, match_val=False):
“”"
比较数据与模板是否一致。
1:可忽略比较值是否相等,eg:如match_val=False {“aa”:11}与{“aa”:22}返回为True; {“a”:[1, 2]}与{“a”:[1,2,“sd”]} 也返回True
如果match_val=True 则返回False,如果match_val=True 校验字典的key和val,校验列表的索引和元素是否相等,即完全一致。
:param tmplate_data: 用于比较的模板字典
:param data: 数据字典
:param match_val: 校验值是否相等。校验字典的key,val是否相等,校验列表的索引和元素是否一一对应,且相等。为False时,不校验字典值是否相等,
不校验列表中元素与索引是否一一对应,只校验模板中的key是否都在数据字典中;非复杂数据类型(字典,列表)元素,数据类型是否一致;
模板列表中的元素都在数据列表中(索引可不一致)。
:return: True/False
“”"
if type(tmplate_data) != type(data):
log.warning(f"比对的两个数据,格式不一样。模板数据为{tmplate_data}, 对比数据为{data}“)
return False
if isinstance(tmplate_data, dict):
# 判断字典key是否相等。
if match_val:
if set(tmplate_data.keys()) != set(data.keys()):
log.warning(f"严格比对,两个字典key不完全一样,模板的key集合为{set(tmplate_data.keys())},”
f"比对数据的key集合为{set(data.keys())}“)
return False
for k, val in tmplate_data.items():
print(k, val, “比对字典”)
if not isinstance(val, list) and not isinstance(val, dict):
if match_val:
if data.get(k) != val:
log.warning(f"严格比对,模板的值为{k}:{val},比对数据的值为{data.get(k)},两者不一致”)
return False
else:
if type(val) != type(data.get(k)):
log.warning(f"非严格比对,模板数据和对比数据数据类型不一致:模板数据为:{k}:{val}, 比对数据为:{k}:{data.get(k)}“)
return False
if isinstance(val, list) or isinstance(val, dict):
result = cmp_tmp_data(val, data.get(k))
if not result:
return False
else:
return True
elif isinstance(tmplate_data, list):
if match_val:
if len(tmplate_data) != len(data):
log.warning(f"严格比对,模板数据列表长度与比对数据长度不一致。模板数据为{tmplate_data},比对数据为:{data}”)
return False
for index, tmp in enumerate(tmplate_data):
print(“索引为:”,index, tmp, “比对列表”)
if not isinstance(tmp, list) and not isinstance(tmp, dict):
if match_val:
try:
if tmp != data[index]:
log.warning(f"严格比对,模板数据与比对数据不一致,模板数据为{tmp}, 比对数据为:{data[index]}“)
return False
except Exception as e:
log.warning(f"严格比对:对比数据列表没有对应索引,索引为{index},比对数据为{data}”)
return False
if isinstance(tmp, dict):
if match_val:
try:
result = cmp_tmp_data(tmp, data[index], match_val=True)
if not result:
return False
except Exception as e:
return False
else:
for data_1 in data:
result = cmp_tmp_data(tmp, data_1)
if result:
break
else:
return False
if isinstance(tmp, list):
if match_val:
try:
result = cmp_tmp_data(tmp, data[index], match_val=True)
if not result:
return False
except Exception as e:
return False
else:
for data_1 in data:
result = cmp_tmp_data(tmp, data_1)
if result:
break
else:
return False
else:
return True
else:
if match_val:
if tmplate_data == data:
return True
else:
return False
else:
return True

写出来后,还没有大量的测试验证,可能还有问题,如有发现bug,希望及时指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值