python接口自动化整体设计框架(基础-data_compare模块)六

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信息以及用例怎么写

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值