在接口自动化测试过程中,经常会断言响应;当碰到复杂响应时,很难全量匹配判断是否符合预期,可以使用比对响应报文中是否包含预期的结果,来判断用例是否执行成功。网上搜索了一下,试了几个方式都没有达到预期结果,于是基于jsonpath模块,自己手写了一个函数。
import jsonpath
def cmp_data(exp, data): """ 判断exp表达式,是否为data的子集。 :param exp: 表达式 :param data: 对比的数据。 :return: data 里面包含exp 返回True, 反之返回False """ val_data_list = jsonpath.jsonpath(data, "$..*") for val in val_data_list: if isinstance(exp, list): if isinstance(val, list): for exp_data in exp: if not isinstance(exp_data, list) and not isinstance(exp_data, dict) and exp_data not in val: break if isinstance(exp_data, list) or isinstance(exp_data, dict): return cmp_data(exp_data, val) else: return True elif isinstance(exp, dict): i