unittest框架下,用例执行后断言结果的公共方法,需配合excel

这个方法是笔者最新更新的断言方法,主要是可以一次性的断言多个接口返回值。
以下是断言的公共方法,具体的运用需要在执行的时候传入具体的值。

class Assert_Dic(unittest.TestCase):
    def __init__(self):
        super().__init__()

    def find_exception_data(self, target, dictData, notFound='notFound!!'):
        dictData=dictData
        # 判断期望的值和实际的值是否能一致
        # 这里的循环是只要找不到值就要一直循环,找到了跳出循环
        while len(dictData) > 0:
            for key, value in dictData.items():
                if key == target:
                    dictData={}
                    return value
                elif type(value) == dict:
                    dictData=value
        return notFound

    def assert_model(self, exception_dict, actual_dict, test_num):
        # 遍历期望的字典,去实际的字段取值
        for key in exception_dict:
            # 用期望的key去遍历实际的接口返回,也有可能是嵌套多层的key
            actual_data = str(self.find_exception_data(key, actual_dict))
            except_data = str(exception_dict[key])
            self.assertEqual(except_data, actual_data)


    def assert_result(self, asserttype, expectdata, res, test_num, title,flagname=None,actualmsql=None):
        self.Log.info(title)
        # 将返回的text为字典格式
        actual_dict = json.loads(res.text)
        # 返回响应码
        actual_status = res.status_code
        # 将期望值转换为字典格式
        # 如果传入的是非字典格式就不需要转化json格式
        try:
            exception_dict = json.loads(expectdata)
        except:
            expectdata=expectdata
        if asserttype == "flag":
            # flag是平级,直接将期望的字段和实际返回的字段对比
            self.assert_model(exception_dict, actual_dict, test_num)
        elif asserttype == "flagname":
            # 取值嵌套列表里的实际结果值
            value_dict = get_flagdata(res, flagname)
            self.assert_model(exception_dict, value_dict, test_num)
        elif asserttype == "statuscode":
            # 取值接口的响应码
            self.assertEqual(int(expectdata), int(actual_status))
		#直接取期望值和实际值对比
        elif asserttype == "mysql":
            if isinstance(expectdata, float):
                expectdata = int(expectdata)
            self.assertEqual(str(expectdata), str(actualmsql))

你可能感兴趣的:(python语法,自动化断言,python)