data_compare使用来进行数据对比的,这个主要用来使预期结果和实际结果进行对比,方法使采用递归进行对比
如果存在结果不一致的,返回每一个键对应的比对结果元组列表
这样就有助于我们发现用例执行失败之后,看哪方面有问题
from common.logger import Log
class DataCompare:
"""
预期结果和实际结果比对,返回比对结果
"""
def __init__(self):
self.log = Log('测试结果比对').get_logger()
# 存放比对结果
self._compare_result = []
def compare(self, excepted, response):
"""
递归比对,注:第一个参数是预期结果
:param excepted: 预期结果dict
:param response: 实际结果dict
:return: 若存在结果不一致的,返回每一个键对应的比对结果元组列表;否则返回空列表
"""
if excepted == {}:
return self._compare_result
if type(excepted) != type(response) and (excepted and response is not None):
self.log.error('预期结果格式错误,比对失败:{}'.format(excepted))
if isinstance(excepted, dict) and isinstance(response, dict):
for key in excepted:
self.compare(excepted[key], response[key])
elif isinstance(excepted, list) and isinstance(response, list):
if excepted and response:
for e, r in zip(excepted, response):
self.compare(e, r)
else:
self.compare(str(excepted), str(response))
else:
try:
assert excepted == response, \
'比对结果不一致:excepted "{}" != "{}" actual'.format(excepted, response)
except AssertionError as e:
self._compare_result.append((excepted, response))
self.log.error(e)
return self._compare_result
预期结果我们是写在yaml文件中,以字典的类型读出来
实际结果也是字典类型
因字典类型中可能嵌套字典或者列表,所以需要递归调用compare函数
下一篇: 写用例的yaml文件中,api信息以及用例怎么写