python3对接口响应结果进行自定义断言

需求

1.响应结果可能:  json/列表/多层复杂嵌套

2.检查对象:按响应层次进行校验

不支持:返回文本或字符串检查(这块较少直接可以用响应码处理)

思路

1.首先搞一个主的检查数据入口方法,进行数据类型判断

2.对于字典类型的数据直接调用对应的处理方法

3.对于列表类型的数据直接调用对应的方法

4.多层嵌套内部逻辑依旧函数间互调处理

根据键值对递归,如果匹配上返回true,否则返回false,一个失败则迭代结束返回失败,整体断言成功是每层的键值都完全匹配

实现代码

def resp_check(self, info, code, respTime, infoCode):
    '''
    实际结果和预期结果断言
    :param info: 实际响应结果
    :param code: 预期结果
    :param respTime: 响应时间
    :param infoCode: 响应码
    :return:
    '''
    infoJson = info.json()
    infoText = info.text
    if isinstance(infoJson, dict):
        if bool(self.__checkdict(infoJson, code)):
            return excep.assert_info(infoText, respTime, code)
        else:
            return excep.assert_err_exception(infoText, respTime, infoCode)
    elif isinstance(infoJson, list):
        if bool(self.__checklist(infoJson, code)):
            return excep.assert_info(infoText, respTime, infoCode)
        else:
            return excep.assert_err_exception(infoText, respTime, infoCode)

def __checklist(self, info, code):
    '''
    检查列表
    :param info: 接口响应
    :param code: 预期结果
    :return:
    '''
    try:
        for i in code:
            if isinstance(i, str) or isinstance(i, int):
                if i in info:
                    continue
                else:
                    return False
            for j in info:
                if isinstance(i, dict):
                    if bool(self.__checkdict(j, i)):
                        break
                    else:
                        return False
                elif isinstance(i, list):
                    if bool(self.__checklist(j, i)):
                        break
                    else:
                        return False
                break
            else:
                return False
        return True
    except Exception as e:
        return False

def __checkdict(self, info, code):
    '''
    检查json
    :param info:接口响应
    :param code: 预期结果
    :return:
    '''
    try:
        for k, v in code.items():
            for k2, v2 in info.items():
                if k == k2:
                    if isinstance(v2, list):
                        if bool(self.__checklist(v2, v)):
                            break
                        else:
                            return False
                    elif isinstance(v2, dict):
                        if bool(self.__checkdict(v2, v)):
                            break
                        else:
                            return False
                    elif v == v2:
                        break
                    else:
                        return False
                else:
                    continue
            else:
                return False
        return True
    except Exception as e:
        return False
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值