背景
    领导:
    断言resful接口返回所有数据,不是单个数据,是所有数据是否正确。
    拿到这个需求表示看不懂,接口自动化测试,自动化断言真的需要如此精准?
    既然建议无效,那就想办法吧…………

    解决方案:
    1、python 内置模块,difflib.ndiff
    确实能找出不同,似乎是解决了问题,领导不满意的是给出的比较结果不够友好,相同的不同的都有,能不能再友好一点
    想了许久,确实没有那么好用。另辟他路了

    2、python 第三库,jsonSceam,模版对比
    这个包,经过思考,多用于数据类型的校验等等,而且1个返回就是1个模版

    3、自行研究,如何解决
    思路1:json返回,以键值对的方式给出数据,考虑键出的值的类型做相应处理操作
    思路2:每个json返回都不一样,有的数据量很大,嵌套层数很多,如何解决不定长的返回数据
    灵感1 —- 职业生涯,号解包,自动填入不定长参数 -> func(args)
    灵感2 必须让它自动化起来,无论返回的嵌套多少层
    最终想起读过的一本书,自动化的解决问题——》 递归函数,一直处理,直到它不能再处理即结束
    源码如下

    def assert_recursion(self, expected, actual):
    exp_type = type(expected)
    if exp_type is list:
    for exp, act in zip(expected, actual):
    self.
    assert_recursion(exp, act)
    elif exp_type is dict:
    for exp, act in zip(expected.items(), actual.items()):
    self.assert_recursion(exp, act)
    elif exp_type in (int, str, bool, float):
    self.
    baseAssert_items(expected, actual, condition=’equal’)
    elif exp_type is tuple:
    tuple_value_type, tuple_key, tuple_value = type(expected[1]), expected[1], actual[1]
    if tuple_value_type is list:
    self.assert_recursion(tuple_key, tuple_value)
    elif tuple_value_type is dict:
    self.
    assert_recursion(tuple_key, tuple_value)
    elif tuple_value_type in (int, str, bool, float):
    self.__baseAssert_items(expected, actual, condition=’equal’)
    else:
    raise TypeError(tuple_value_type)
    else:
    raise TypeError(exp_type)