示例#1
0
    def assert_sql(self, check_sql_str):
        self.get_sql_comp_res(check_sql_str)
        # 关闭数据库连接
        self.db.close()

        if False in self.sql_com_res.values():
            logger.error("断言失败,数据库比对不成功!")
            raise AssertionError
        else:
            logger.info("数据库比对成功!")
示例#2
0
    def test_business_flow_api(self, case):
        logger.info("#################开始执行业务流接口#######################")
        # 替换
        case = replace_case_with_re(case)

        # 请求
        # 判断是否要添加token
        if hasattr(Data, "token"):
            resp = self.hr.send_requests(case["method"], case["url"], case["request_data"], token=getattr(Data, "token"))
        else:
            resp = self.hr.send_requests(case["method"], case["url"], case["request_data"])

        # 如果有提取字段,从响应消息中提取对应字段,赋值给Data属性
        if case["extract"]:
            set_dataclass_attr_from_resp(resp.json(), case["extract"])

        # 如果有预期结果,则将实际结果与预期结果进行比较
        if case["expected"]:
            actual = resp.json()
            logger.info("用例执行实际结果:{}".format(actual))
            expected = eval(case["expected"])
            logger.info("用例预期结果:{}".format(expected))
            # 断言
            try:

                assert actual["code"] == expected["code"]
                assert actual["msg"] == expected["msg"]
            except AssertionError:
                logger.exception("断言失败!")
                raise
            except Exception:
                logger.exception("除断言以外的报错!")
                raise
示例#3
0
def replace_case_with_re(case_dict):
    case_str = str(case_dict)
    # 提取正则表达式
    replace_mark_list = re.findall("#(\w+)#", case_str)
    logger.info("用例中提取到的正则结果{}".format(replace_mark_list))

    # 如果有手机号需要未注册的,调用函数生成新的未注册过手机号
    if "phone" in replace_mark_list:
        new_phone = get_new_phone()
        setattr(Data, "phone", new_phone)  # 将新生成的手机号设置成Data类属性
        logger.info("如果有手机号需要未注册的,调用函数生成新的未注册过手机号,将新生成的手机号设置成Data类属性")
    if replace_mark_list:
        for mark in replace_mark_list:  # 遍历正则结果列表
            case_str = case_str.replace(f"#{mark}#", getattr(Data, mark))
            logger.info(f"替换#{mark}#,替换后{mark}值为:{getattr(Data, mark)}")
        logger.info("替换后用例为:\n {}".format(case_str))
    return eval(case_str)
示例#4
0
 def send_requests(self, method, url, data=None, token=None):
     logger.info("==================开始发起请求============================")
     logger.info("请求方法为:{}".format(method))
     # 请求头处理
     self.__deal_header(token)
     # 请求数据处理
     self.__deal_data(data)
     # 处理url
     self.__deal_url(url)
     if method.upper() == "GET":
         response = requests.get(self.url, self.data, headers=self.headers)
     elif method.upper() == "PATCH":
         response = requests.patch(self.url,
                                   json=self.data,
                                   headers=self.headers)
     else:
         response = requests.post(self.url,
                                  json=self.data,
                                  headers=self.headers)
     logger.info("请求响应状态码:{}".format(response.status_code))
     logger.info("请求响应为:\n {}".format(response.json()))
     return response
示例#5
0
    def testRecharge(self, case):
        logger.info("*****************开始执行充值接口用例**************************")
        # 替换
        case = replace_case_with_re(case)

        logger.info("当前测试用例为:\n {}".format(case))
        # 发起请求
        # 判断是否要传递token值
        if hasattr(Data, "token"):
            res = self.hr.send_requests(case["method"],
                                        case["url"],
                                        case["request_data"],
                                        token=getattr(Data, "token"))
        else:
            res = self.hr.send_requests(case["method"], case["url"],
                                        case["request_data"])

        # 如果有提取字段,那么需要从响应中提取对应数据,设置为Data.token
        if case["extract"]:
            set_dataclass_attr_from_resp(res.json(), case["extract"])

        # 如果有预期结果,需要把响应结果与预期结果进行比较
        if case["expected"]:
            # 响应结果
            actual = res.json()
            logger.info("用例实际执行结果:\n {}".format(actual))
            expected = eval(case["expected"])
            logger.info("用例预期结果:\n {}".format(expected))

            # 断言
            try:
                assert actual["code"] == expected["code"]
                assert actual["msg"] == expected["msg"]
                if actual["data"]['leave_amount']:
                    assert actual["data"]['leave_amount'] == float(
                        getattr(Data, "money"))
            except AssertionError:
                logger.exception("断言失败!")
                raise  # 把异常抛给unittest框架
            except Exception:
                logger.exception("除断言以外的异常报错!")
                raise

        # 如果有数据库校验,则进行数据库校验
        if case["check_sql"]:
            ha = HandleAssert()
            ha.assert_sql(case["check_sql"])
示例#6
0
    def test_register(self, case):
        logger.info(
            "*************************** 开始执行注册接口测试用例 ***************************"
        )
        # 替换手机号
        case = replace_case_with_re(case)
        # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*phone*") != -1:
            phone = conf.get("user", "user")
            case["request_data"] = case["request_data"].replace(
                "*phone*", phone)
            # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*pwd*") != -1:
            pwd = conf.get("user", "pwd")
            case["request_data"] = case["request_data"].replace("*pwd*", pwd)

        # 发起请求
        resp = self.hr.send_requests(case["method"], case["url"],
                                     case["request_data"])
        logger.info("当前测试用例为:\n {}".format(case))
        if case["expected"]:
            # 响应结果
            actual = resp.json()
            logger.info("用例实际执行结果:\n {}".format(actual))
            expected = eval(case["expected"])
            logger.info("用例预期结果:\n {}".format(expected))

            # 断言
            try:
                assert actual["code"] == expected["code"]
                assert actual["msg"] == expected["msg"]
            except AssertionError:
                logger.exception("断言失败!")
                raise  # 把异常抛给unittest框架
            except Exception:
                logger.exception("除断言以外的异常报错!")
                raise

        if case["check_sql"]:
            sleep(0.5)  # 等待服务器数据与数据库交互完成
            ha = HandleAssert()
            ha.assert_sql(case["check_sql"])
示例#7
0
    def test_add_bid_api(self, case):
        logger.info(
            "########################开始执行添加项目接口#########################")
        # 替换
        case = replace_case_with_re(case)

        logger.info("当前执行用例为:\n {}".format(case))
        # 请求
        # 判断是否需要传递token
        if hasattr(Data, "token"):
            resp = self.hr.send_requests(case["method"],
                                         case["url"],
                                         case["request_data"],
                                         token=getattr(Data, "token"))
        else:
            resp = self.hr.send_requests(case["method"], case["url"],
                                         case["request_data"])

        # 提取需要的变量
        if case["extract"]:
            set_dataclass_attr_from_resp(resp.json(), case["extract"])

        # 如果有预期结果则用实际结果与预期结果进行比较
        if case["expected"]:
            actual = resp.json()
            logger.info("用例执行结果为: {}".format(actual))
            expected = eval(case["expected"])
            logger.info("用例预期结果为:{}".format(expected))
            try:
                assert actual["code"] == expected["code"]
                if expected.get("msg"):
                    assert actual["msg"] == expected["msg"]
            except AssertionError:
                logger.exception("断言失败!")
                raise AssertionError
            except:
                logger.exception("断言以外的报错!")
                raise
示例#8
0
 def __deal_data(self, data):
     if isinstance(data, str):
         self.data = json.loads(data)
     else:
         self.data = data
     logger.info("请求数据为:\n {}".format(self.data))
示例#9
0
 def __deal_header(self, token=None):
     if token is not None:
         self.headers["Authorization"] = f"Bearer {token}"
     logger.info("请求头为:\n {}".format(self.headers))
示例#10
0
    def get_sql_comp_res(self, check_sql_str):

        check_sql_dict = eval(check_sql_str)
        logger.info("数据库校验为:\n{}".format(check_sql_dict))

        if check_sql_dict["check_type"] == "value":
            logger.info("比较sql语句查询结果之后的值")
            sql_res = self.db.get_one(check_sql_dict["check_sql"])
            logger.info("执行sql:{}".format(check_sql_dict["check_sql"]))
            logger.info("查询结果:{}".format(sql_res))
            logger.info("预期结果为:{}".format(check_sql_dict["expected"]))

            # 执行的结果进行比较。sql_res为字典类型
            for key, value in check_sql_dict["expected"].items():
                if key in sql_res.keys():
                    if isinstance(sql_res[key], Decimal):
                        sql_res[key] = float(sql_res[key])
                        logger.info("将Decimal转换为float后的值:{}".format(sql_res[key]))
                    if value == sql_res[key]:
                        self.sql_com_res[key] = True  # 比较成功 存储到sql_com_res中
                        logger.info("比较成功!")
                    else:
                        self.sql_com_res[key] = False  # 比较失败 存储到sql_com_res中
                        logger.info("比较失败!")
                else:
                    logger.info("sql查询结果里面没有对应的列名{},请检查预期结果或查询语句是否正确}".format(key))
        # 比对slq语句查询之后的条数
        elif check_sql_dict["check_type"] == "count":
            logger.info("比较sql语句查询之后的条数,sql查询结果为整数,只要比对数字即可!")
            sql_res = self.db.get_count(check_sql_dict["check_sql"])
            logger.info("执行sql:{}".format(["check_sql"]))
            logger.info("查询结果:{}".format(sql_res))
            logger.info("预期结果为:{}".format(check_sql_dict["expected"]))
            # 比对
            if sql_res == check_sql_dict["expected"]:
                self.sql_com_res["count"] = True
                logger.info("比较成功!")
            else:
                self.sql_com_res["count"] = False
                logger.info("比较失败!")