需求
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