def handle_path(cls, path_str: str) -> str: """路径参数处理 :param path_str: 带提取表达式的字符串 /&$.case_005.data.id&/state/&$.case_005.data.create_time& 上述内容表示,从响应字典中提取到case_005字典里data字典里id的值,假设是500,后面&$.case_005.data.create_time& 类似,最终提取结果 return /511/state/1605711095 """ # /&$.case.data.id&/state/&$.case_005.data.create_time& return rep_expr(path_str, cls.response_dict)
def handle_data(cls, variable: str) -> dict: """请求数据处理 :param variable: 请求数据,传入的是可转换字典/json的字符串,其中可以包含变量表达式 return 处理之后的json/dict类型的字典数据 """ if variable != '': data = rep_expr(variable, cls.response_dict) variable = convert_json(data) return variable
def handle_path(cls, path_str: str) -> str: """ 路径参数处理 :param path_str: 带提取表达式的字符串 /&$.case_005_data.id&/stats/&$.case_005.data.create_time& 上述内容解析为:从响应字典中提取到case_005字典里datazi字典里的id的值,假设是500,后面&$.case_005.data.create_time& 类似,最终提取结果为: :return: /500/state/123456 """ # /&$.case_005.data.id&/state/&$.case_005.data.create_time& return rep_expr(path_str, cls.response_dict)
def handle_path(cls, path_str: str, env: str) -> str: """路径参数处理 :param path_str: 带提取表达式的字符串 /&$.case_005.data.id&/state/&$.case_005.data.create_time& :param env: 环境名称, 对应的是环境基准地址 上述内容表示,从响应字典中提取到case_005字典里data字典里id的值,假设是500,后面&$.case_005.data.create_time& 类似,最终提取结果 return /511/state/1605711095 """ # /&$.case.data.id&/state/&$.case_005.data.create_time& url = ReadFile.read_config(f'$.server.{env}') + rep_expr( path_str, cls.response_dict) allure_step_no(f'请求地址: {url}') return url
def handle_sql(cls, sql: str, db: object): """处理sql,并将结果写到响应字典中""" if sql not in ['no', '']: sql = rep_expr(sql, DataProcess.response_dict) else: sql = None allure_step('运行sql', sql) logger.info(sql) if sql is not None: # 查后置sql result = db.fetch_one(sql) allure_step('sql执行结果', {"sql_result": result}) logger.info(f'结果:{result}') if result is not None: # 将查询结果添加到响应字典里面,作用在,接口响应的内容某个字段 直接和数据库某个字段比对,在预期结果中 # 使用同样的语法提取即可 DataProcess.response_dict.update(result)
def assert_result(cls, response: dict, expect_str: str): """ 预期结果实际结果断言方法 :param response: 实际响应结果 :param expect_str: 预期响应内容,从excel中读取 return None """ # 后置sql变量转换 expect_str = rep_expr(expect_str, DataProcess.response_dict) expect_dict = convert_json(expect_str) index = 0 for k, v in expect_dict.items(): # 获取需要断言的实际结果部分 actual = extractor(response, k) index += 1 logger.info( f'第{index}个断言,实际结果:{actual} | 预期结果:{v} \n断言结果 {actual == v}') allure_step(f'第{index}个断言', f'实际结果:{actual} = 预期结果:{v}') try: assert actual == v except AssertionError: raise AssertionError(f'断言失败 -|- 实际结果:{actual} || 预期结果: {v}')
def handle_sql(cls, sql: str, db: DB): """ 处理sql,如果sql执行的结果不会空,执行sql的结果和响应结果字典合并 :param sql: 支持单条或者多条sql,其中多条sql使用 ; 进行分割 多条sql,在用例中填写方式如下select * from user; select * from goods 每条sql语句之间需要使用 ; 来分割 单条sql,select * from user 或者 select * from user; :param db: 数据库连接对象 :return: """ sql = rep_expr(sql, DataProcess.response_dict) for sql in sql.split(";"): sql = sql.strip() if sql == '': continue # 查后置sql result = db.execute_sql(sql) allure_step(f'执行sql: {sql}', result) logger.info(f'执行sql: {sql} \n 结果: {result}') if result is not None: # 将查询结果添加到响应字典里面,作用在,接口响应的内容某个字段 直接和数据库某个字段比对,在预期结果中 # 使用同样的语法提取即可 DataProcess.response_dict.update(result)