assert响应断言封装

import ast
import jsonpath

from common.mylogger import logger

class MyAssert:

    def assert_response_value(self,check_str, response_dict):
        """
        :param check_str: 从excel当中,读取出来的断言列。是一个列表形式的字符串。里面的成员是一个断言
        :param response_dict: 接口请求之后的响应数据,是字典类型。
        :return: None
        """
        # 所有断言的比对结果列表
        check_res = []

        # 把字符串转换成python列表
        check_list = ast.literal_eval(check_str)  # 比eval安全一点。转成列表。

        for check in check_list:
            logger.info("要断言的内容为:\n{}".format(check))
            # 通过jsonpath表达式,从响应结果当中拿到了实际结果
            actual = jsonpath.jsonpath(response_dict, check["expr"])
            if isinstance(actual, list):
                actual = actual[0]
            logger.info("从响应结果当中,提取到的值为:\n{}".format(actual))
            logger.info("期望结果为:\n{}".format(check["expected"]))
            # 与实际结果做比对
            if check["type"] == "==":
                logger.info("比对2个值是否相等。")
                logger.info("比对结果为:\n{}".format(actual == check["expected"]))
                check_res.append(actual == check["expected"])
            elif check["type"] == "gt":
                logger.info("比对2个值的大小。")
                logger.info("比对结果为:\n{}".format(actual > check["expected"]))

        if False in check_res:
            logger.error("部分断言失败!,请查看比对结果为False的")
            raise AssertionError
        else:
            logger.info("所有断言成功!")

 

posted @ 2022-01-06 20:43  乘风破浪的小落夜  阅读(156)  评论(0编辑  收藏  举报