From a4243cab11fecda42b7c281fdcdb2c38cbbe16e0 Mon Sep 17 00:00:00 2001 From: floraachy <1622042529@qq.com> Date: Mon, 25 Aug 2025 09:29:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0allure=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=8A=A5=E5=91=8Alogo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom-logo-plugin/static/logo.svg | 2 +- lib/allure_config/logo.svg | 2 +- lib/allure_config/logo02.svg | 1 + lib/allure_config/logo03.svg | 1 + run.py | 2 -- settings.py | 1 + test_case/conftest.py | 6 ++-- utils/assertion_utils/assert_control.py | 4 +-- .../case_generate_utils/case_fun_generate.py | 6 ++-- .../case_generate_utils/conftest_template.txt | 6 ++-- utils/data_utils/data_handle.py | 2 +- utils/data_utils/extract_data_handle.py | 12 ++++---- utils/report_utils/get_results_handle.py | 8 ++--- utils/report_utils/push_allure_report.py | 18 +++++------ utils/report_utils/send_result_handle.py | 6 ++-- utils/requests_utils/base_request.py | 12 ++++---- utils/requests_utils/case_dependence.py | 10 +++---- utils/requests_utils/request_control.py | 30 +++++++++---------- 18 files changed, 65 insertions(+), 64 deletions(-) create mode 100644 lib/allure_config/logo02.svg create mode 100644 lib/allure_config/logo03.svg diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg index b864454..09772a5 100644 --- a/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg +++ b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/lib/allure_config/logo.svg b/lib/allure_config/logo.svg index b864454..09772a5 100644 --- a/lib/allure_config/logo.svg +++ b/lib/allure_config/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/lib/allure_config/logo02.svg b/lib/allure_config/logo02.svg new file mode 100644 index 0000000..b79f59d --- /dev/null +++ b/lib/allure_config/logo02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/allure_config/logo03.svg b/lib/allure_config/logo03.svg new file mode 100644 index 0000000..69b46ad --- /dev/null +++ b/lib/allure_config/logo03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/run.py b/run.py index 96ae791..e3f7845 100644 --- a/run.py +++ b/run.py @@ -63,9 +63,7 @@ from utils.report_utils.allure_handle import generate_allure_report def run(env, m, report): try: # ------------------------ 捕获日志---------------------------- - LOG_LEVEL = "INFO" capture_logs(level=LOG_LEVEL, filename=os.path.join(LOG_DIR, "service.log")) - logger.info(f"""\n\n _ _ _ _____ _ __ _ _ __ (_) / \\ _ _| |_ __|_ _|__ ___| |_ diff --git a/settings.py b/settings.py index a2f7321..435785d 100644 --- a/settings.py +++ b/settings.py @@ -40,6 +40,7 @@ SEND_RESULT_TYPE = 0 # 指定日志收集级别 LOG_LEVEL = "DEBUG" # 可选值:TRACE DEBUG INFO SUCCESS WARNING ERROR CRITICAL +LOG_LEVEL_STD = "SUCCESS" """ 支持的日志级别: TRACE: 最低级别的日志级别,用于详细追踪程序的执行。 diff --git a/test_case/conftest.py b/test_case/conftest.py index 5d7a262..56d7e6d 100644 --- a/test_case/conftest.py +++ b/test_case/conftest.py @@ -24,15 +24,15 @@ def case_control(request): # 使用 request.getfixturevalue() 方法来获取测试用例函数的参数值 # 注意这里的"case"需要与@pytest.mark.parametrize("case", cases)中传递的保持一致 case = request.getfixturevalue("case") - logger.info("\n\n-----------------------------START-开始执行用例-----------------------------\n\n") + logger.info(f"\n-----------------------------START-开始执行用例- {case.get("id")} || {case.get("title")}-----------------------------") # 添加用例标题作为allure中显示的用例标题 allure_title(case.get("title", "")) if case.get("run") is None or case.get("run") is False: - reason = f"{case.get('title')}: 标记了该用例为false,不执行\\n" + reason = f"{case.get("id")} || {case.get("title")}: 标记了该用例不执行(run=False)。" logger.warning(f"{reason}") pytest.skip(reason) yield - logger.info("\n\n-----------------------------END-用例执行完成-----------------------------\n\n") + logger.info("-----------------------------END-用例执行完成-----------------------------") def pytest_collection_modifyitems(config, items): diff --git a/utils/assertion_utils/assert_control.py b/utils/assertion_utils/assert_control.py index af74f27..d9b6e21 100644 --- a/utils/assertion_utils/assert_control.py +++ b/utils/assertion_utils/assert_control.py @@ -125,7 +125,7 @@ class AssertUtils: expect_value = self.get_expect_value message = str(self.get_message) assert_type = self.get_assert_type - logger.debug(f"\nmessage: {message}\n" + logger.trace(f"\nmessage: {message}\n" f"assert_type: {assert_type}\n" f"expect_value: {expect_value}\n" f"actual_value: {actual_value}\n") @@ -150,7 +150,7 @@ class AssertHandle(AssertUtils): else: assert_list.append(v) else: - logger.debug(f"断言数据为空或者不是字典格式,跳过断言!\n" + logger.trace(f"断言数据为空或者不是字典格式,跳过断言!\n" f"断言数据:{self.assert_data}") return assert_list diff --git a/utils/case_generate_utils/case_fun_generate.py b/utils/case_generate_utils/case_fun_generate.py index 3674a4e..cad6b71 100644 --- a/utils/case_generate_utils/case_fun_generate.py +++ b/utils/case_generate_utils/case_fun_generate.py @@ -45,7 +45,7 @@ def __load_yaml_data(file): if os.path.basename(file) == "init_data.yaml" or os.path.basename(file) == "init_data.yml": """识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件""" os.makedirs(os.path.dirname(file), exist_ok=True) - logger.debug(f"识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件") + logger.trace(f"识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件") generate_conftest_file( template_path=CONFTEST_TEMPLATE_DIR, init_data=yaml_data, @@ -74,7 +74,7 @@ def __load_yaml_data(file): if os.path.basename(file) == "init_data.yaml" or os.path.basename(file) == "init_data.yml": """识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件""" os.makedirs(os.path.dirname(file), exist_ok=True) - logger.debug(f"识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件") + logger.trace(f"识别到init_data.yaml或者init_data.yml文件,自动生成conftest.py文件") generate_conftest_file( template_path=CONFTEST_TEMPLATE_DIR, init_data=yaml_data, @@ -208,7 +208,7 @@ def gen_case_file(filename, case_template_path, config, common_dependence, case_ # 这里是预计往 @pytest.mark.parametrize( 这一行的上面插入标记 if content.strip().startswith('@pytest.mark.parametrize('): # 往测试用例模板中插入自定义标记 - # logger.debug(f"获取到的pytest_markers:{pytest_markers}, {type(pytest_markers)}") + # logger.trace(f"获取到的pytest_markers:{pytest_markers}, {type(pytest_markers)}") for case_marker in pytest_markers: # 获取符合要求格式的自定义标记名称,并插入到测试模板中 marker = is_valid_marker(case_marker) diff --git a/utils/case_generate_utils/conftest_template.txt b/utils/case_generate_utils/conftest_template.txt index 9f14c65..fe7a845 100644 --- a/utils/case_generate_utils/conftest_template.txt +++ b/utils/case_generate_utils/conftest_template.txt @@ -20,10 +20,10 @@ def init_data(): 运行测试之前,初始化数据; 运行测试之后,清理数据 """ - logger.debug(f"打印一下全局变量:{GLOBAL_VARS}") + logger.trace(f"打印一下全局变量:{GLOBAL_VARS}") dependence_handler = CaseDependenceHandler(GLOBAL_VARS) init_data = ${init_data} - logger.info("Start ----- 开始初始化数据...") + logger.debug("Start ----- 开始初始化数据...") if init_data.get("setup"): dependence_results = dependence_handler.case_dependence_handle( case_dependence=init_data["setup"], @@ -37,4 +37,4 @@ def init_data(): GLOBAL_VARS.update(dependence_results if dependence_results else {}) - logger.info("End ----- 初始化数据完成!") \ No newline at end of file + logger.debug("End ----- 初始化数据完成!") \ No newline at end of file diff --git a/utils/data_utils/data_handle.py b/utils/data_utils/data_handle.py index da88acf..7e95b55 100644 --- a/utils/data_utils/data_handle.py +++ b/utils/data_utils/data_handle.py @@ -136,7 +136,7 @@ class DataHandle: """ for key, funcs in funcs.items(): # 遍历方法字典调用并替换 func = funcs[1] - # logger.debug("invoke func : ", func) + # logger.trace("invoke func : ", func) try: if "." in func: if func.startswith("faker."): diff --git a/utils/data_utils/extract_data_handle.py b/utils/data_utils/extract_data_handle.py index 7efa602..99bd93d 100644 --- a/utils/data_utils/extract_data_handle.py +++ b/utils/data_utils/extract_data_handle.py @@ -25,13 +25,13 @@ def json_extractor(obj, expr: str = '.'): """ try: result = jsonpath(obj, expr)[0] if len(jsonpath(obj, expr)) == 1 else jsonpath(obj, expr) - logger.debug(f"\n提取对象:{obj}\n" + logger.trace(f"\n提取对象:{obj}\n" f"提取表达式: {expr} \n" f"提取值类型: {type(result)}\n" f"提取结果:{result}\n") return result except Exception as e: - logger.debug(f"\n提取对象:{obj}\n" + logger.trace(f"\n提取对象:{obj}\n" f"提取表达式: {expr}\n" f"提取对象: {obj}\n" f"错误信息:{e}\n") @@ -48,13 +48,13 @@ def re_extract(obj: str, expr: str = '.'): # 如果提取后的数据长度为1,则取第一个元素(返回str),否则返回列表 result = re.findall(expr, obj)[0] if len(re.findall(expr, obj)) == 1 else re.findall(expr, obj) # 由于提取出来的数据都是str格式,将eval一样,还原数据格式 - logger.debug(f"\n提取对象:{obj}\n" + logger.trace(f"\n提取对象:{obj}\n" f"提取表达式: {expr}\n" f"提取值类型: {type(result)}\n" f"提取结果:{result}\n") return result except Exception as e: - logger.debug(f"\n提取对象:{obj}\n" + logger.trace(f"\n提取对象:{obj}\n" f"提取表达式: {expr}\n" f"提取对象: {obj}\n" f"错误信息:{e}\n") @@ -69,7 +69,7 @@ def response_extract(response: Response, expr: str = '.'): """ try: result = eval(expr) - logger.debug(f"\n提取表达式: {expr}\n" + logger.trace(f"\n提取表达式: {expr}\n" f"提取值类型: {type(result)}\n" f"提取结果:{result}\n") # 将从Response对象提取的cookiejar对象转换为dict格式, 避免后续使用cookies的时候出现类型错误 @@ -77,7 +77,7 @@ def response_extract(response: Response, expr: str = '.'): result = utils.dict_from_cookiejar(result) return result except Exception as e: - logger.debug(f"\n提取表达式: {expr}\n" + logger.trace(f"\n提取表达式: {expr}\n" f"提取对象: {response}\n" f"错误信息:{e}\n") diff --git a/utils/report_utils/get_results_handle.py b/utils/report_utils/get_results_handle.py index 36e34ac..24c7938 100644 --- a/utils/report_utils/get_results_handle.py +++ b/utils/report_utils/get_results_handle.py @@ -25,9 +25,9 @@ def get_test_results_from_from_allure_report(allure_html_path): data = json.load(file) case_count = data['statistic'] _time = data['time'] - logger.debug(f"获取到的data是:{data}") - logger.debug(f"获取到的_time是:{data['time']}") - logger.debug(f"获取到的start是:{_time['start']}") + logger.trace(f"获取到的data是:{data}") + logger.trace(f"获取到的_time是:{data['time']}") + logger.trace(f"获取到的start是:{_time['start']}") keep_keys = {"passed", "failed", "broken", "skipped", "total"} test_results = {k: v for k, v in data['statistic'].items() if k in keep_keys} # 判断运行用例总数大于0 @@ -56,7 +56,7 @@ def get_test_results_from_from_allure_report(allure_html_path): env_data = json.load(file) for data in env_data: test_results[data['name']] = data["values"][0] - logger.debug(f"获取到的测试结果:{test_results}") + logger.trace(f"获取到的测试结果:{test_results}") return test_results except FileNotFoundError as e: logger.error(f"程序中检查到您未生成allure报告,通常可能导致的原因是allure环境未配置正确,{e}") diff --git a/utils/report_utils/push_allure_report.py b/utils/report_utils/push_allure_report.py index edc84e7..557f496 100644 --- a/utils/report_utils/push_allure_report.py +++ b/utils/report_utils/push_allure_report.py @@ -41,18 +41,18 @@ def push_allure_report(allure_report_dir: str, remote_url: str, username: str, p repo_name = remote_url[:-4].split("/")[-1] repo_path = os.path.join(os.path.dirname(allure_report_dir), repo_name) print(f"本地仓库地址:{repo_path}") - logger.info(f"本地仓库地址:{repo_path}") + logger.debug(f"本地仓库地址:{repo_path}") try: # 检查目录是否存在 if os.path.exists(repo_path): print(f"目录已存在,正在删除: {repo_path}") - logger.info(f"目录已存在,正在删除: {repo_path}") + logger.debug(f"目录已存在,正在删除: {repo_path}") shutil.rmtree(repo_path) # 删除目录及其内容 # 重新创建目录 os.makedirs(repo_path) - logger.info(f"目录已重新创建: {repo_path}") + logger.debug(f"目录已重新创建: {repo_path}") print(f"目录已重新创建: {repo_path}") except Exception as e: logger.error(f"操作失败: {e}") @@ -62,27 +62,27 @@ def push_allure_report(allure_report_dir: str, remote_url: str, username: str, p # -------------初始化本地仓库并提交代码 ----------------- subprocess.run(["git", "-C", repo_path, "init"], check=True) print("初始化本地仓库成功") - logger.info("初始化本地仓库成功") + logger.debug("初始化本地仓库成功") auth_remote_url = f"https://{username}:{password}@{remote_url.split("//")[-1]}" print(f"添加远程仓库: {auth_remote_url}") - logger.info(f"添加远程仓库: {auth_remote_url}") + logger.debug(f"添加远程仓库: {auth_remote_url}") subprocess.run(["git", "-C", repo_path, "remote", "add", "origin", auth_remote_url], check=True) print("复制 Allure HTML报告所有文件到本地仓库") - logger.info("复制 Allure HTML报告所有文件到本地仓库") + logger.debug("复制 Allure HTML报告所有文件到本地仓库") copy_all_files(src_dir=allure_report_dir, dst_dir=repo_path) print("将更改添加到暂存区") - logger.info("将更改添加到暂存区") + logger.debug("将更改添加到暂存区") subprocess.run(["git", "-C", repo_path, "add", "."], check=True) print("提交更改") - logger.info("提交更改") + logger.debug("提交更改") subprocess.run(["git", "-C", repo_path, "commit", "-m", message], check=True) print("强制推送代码") - logger.info("强制推送代码") + logger.debug("强制推送代码") subprocess.run(["git", "-C", repo_path, "push", "--force", "origin", branch], check=True) print("Allure 报告推送成功!") diff --git a/utils/report_utils/send_result_handle.py b/utils/report_utils/send_result_handle.py index 72e7d1f..f10485c 100644 --- a/utils/report_utils/send_result_handle.py +++ b/utils/report_utils/send_result_handle.py @@ -44,7 +44,7 @@ def send_dingding(webhook_url, secret, title, content): dingding = DingTalkBot(webhook_url=webhook_url, secret=secret) res = dingding.send_markdown(title=title, text=content, is_at_all=True) if res: - logger.info(f"发送钉钉通知成功~") + logger.debug(f"发送钉钉通知成功~") else: logger.error(f"发送钉钉通知失败~") except Exception as e: @@ -62,7 +62,7 @@ def send_wechat(webhook_url, content, attachment=None): if attachment: file = wechat.send_file(wechat.upload_file(attachment)) if file: - logger.info(f"发送企业微信通知(包括文本以及附件)成功~") + logger.debug(f"发送企业微信通知(包括文本以及附件)成功~") else: logger.error(f"发送企业微信通知(附件)失败~") else: @@ -80,7 +80,7 @@ def send_result(report_info: dict, report_path: str, attachment_path: str = None """ # 默认不发送任何通知 if SEND_RESULT_TYPE == NotificationType.DEFAULT.value: - logger.debug(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE}, 配置了不发送任何邮件") + logger.trace(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE}, 配置了不发送任何邮件") return results = get_test_results_from_from_allure_report(report_path) diff --git a/utils/requests_utils/base_request.py b/utils/requests_utils/base_request.py index a70d526..4bc47a1 100644 --- a/utils/requests_utils/base_request.py +++ b/utils/requests_utils/base_request.py @@ -67,7 +67,7 @@ class BaseRequest: 传递的参数会被编码为JSON格式并包含在请求体中。 需要注意的是,使用这种方式传递的参数必须是可序列化为JSON的数据类型(如字典、列表、整数、浮点数、布尔值或None)。对于不可序列化的数据类型(如文件或其他自定义对象),需要先进行序列化。 """ - logger.debug("发送请求:\n" + logger.trace("发送请求:\n" "request_type=json\n" f"method={method}\n" f"url={url}\n" @@ -90,7 +90,7 @@ class BaseRequest: params: 这是通过URL传递参数的方式。所有传递的参数都会被编码到URL中。requests库会自动处理这些参数的编码。 需要注意的是,这种方式只适用于简单的键值对,对于复杂的数据结构,如列表或字典,需要先进行序列化。 """ - logger.debug("发送请求:\n" + logger.trace("发送请求:\n" "request_type=params\n" f"method={method}\n" f"url={url}\n" @@ -114,7 +114,7 @@ class BaseRequest: 这些参数通常需要通过requests库提供的data参数来传递,并且在发送请求时,需要设置Content-Type为application/x-www-form-urlencoded或multipart/form-data。 对于简单的键值对,可以直接将它们作为字典传递给data参数;对于复杂的数据结构,需要先进行序列化。 """ - logger.debug("发送请求:\n" + logger.trace("发送请求:\n" "request_type=data\n" f"method={method}\n" f"url={url}\n" @@ -152,7 +152,7 @@ class BaseRequest: 返回: - requests.Response: 发送请求后的响应对象。 """ - logger.debug("发送请求:\n" + logger.trace("发送请求:\n" "request_type=file\n" f"method={method}\n" f"url={url}\n" @@ -192,7 +192,7 @@ class BaseRequest: @classmethod def request_type_for_none(cls, method: Text, url: Text, headers: Optional[Dict], **kwargs): """处理 requestType 为 None""" - logger.debug("发送请求:\n" + logger.trace("发送请求:\n" "request_type=none\n" f"method={method}\n" f"url={url}\n" @@ -209,6 +209,6 @@ class BaseRequest: @classmethod def request_type_for_export(cls, method: Text, url: str, headers: Optional[Dict], **kwargs): """判断 requestType 为 export 导出类型""" - logger.debug("requestType 为 export 类型") + logger.trace("requestType 为 export 类型") # todo 后续有需求再补充 return "" diff --git a/utils/requests_utils/case_dependence.py b/utils/requests_utils/case_dependence.py index c6846df..d14bfd5 100644 --- a/utils/requests_utils/case_dependence.py +++ b/utils/requests_utils/case_dependence.py @@ -31,7 +31,7 @@ class CaseDependenceHandler: for key, value in variables.items(): new_value = data_handle(value, self.source) allure_step(f"依赖环境变量 --> {key}={new_value}") - logger.info(f"依赖环境变量 --> {key}={new_value}") + logger.debug(f"依赖环境变量 --> {key}={new_value}") self.source.update({key: new_value}) def handle_interfaces(self, interfaces): @@ -54,7 +54,7 @@ class CaseDependenceHandler: sql = db_item["sql"] sql_result = mysql.query_all(sql) allure_step(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}") - logger.info(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}") + logger.debug(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}") db_item.pop("sql") for extraction_type, extractions in db_item.items(): @@ -63,13 +63,13 @@ class CaseDependenceHandler: res = json_extractor(sql_result, path) self.source.update({key: res}) allure_step(f"通过jsonpath方式从数据库提取参数:{key}:{res}") - logger.debug(f"通过jsonpath方式从数据库提取参数:{key}:{res}") + logger.trace(f"通过jsonpath方式从数据库提取参数:{key}:{res}") elif extraction_type.lower() == "type_re": for key, pattern in extractions.items(): res = re_extract(str(sql_result), pattern) self.source.update({key: res}) allure_step(f"通过正则表达式从数据库提取参数:{key}:{res}") - logger.info(f"通过正则表达式从数据库提取参数:{key}:{res}") + logger.debug(f"通过正则表达式从数据库提取参数:{key}:{res}") else: logger.error(f"提取方式: {extraction_type} 错误,仅支持type_jsonpath、type_re两种") else: @@ -81,7 +81,7 @@ class CaseDependenceHandler: 先处理环境变量依赖,再处理接口依赖,最后处理SQL依赖 """ if not case_dependence: - logger.debug("跳过用例依赖处理") + logger.trace("跳过用例依赖处理") allure_step("跳过用例依赖处理") return self.source diff --git a/utils/requests_utils/request_control.py b/utils/requests_utils/request_control.py index a7ffe31..049c0e1 100644 --- a/utils/requests_utils/request_control.py +++ b/utils/requests_utils/request_control.py @@ -40,12 +40,12 @@ class RequestControl(BaseRequest): """ api_data = [] if os.path.isdir(api_file_path): - logger.debug(f"目标路径是一个目录:{api_file_path}") + logger.trace(f"目标路径是一个目录:{api_file_path}") api_files = get_files(target=api_file_path, end=".yaml") + get_files(target=api_file_path, end=".yml") for api_file in api_files: api_data.append(load_yaml_file(api_file)) elif os.path.isfile(api_file_path): - logger.debug(f"目标路径是一个文件:{api_file_path}") + logger.trace(f"目标路径是一个文件:{api_file_path}") api_data.append(load_yaml_file(api_file_path)) else: @@ -56,7 +56,7 @@ class RequestControl(BaseRequest): if api.get("teststeps"): matching_api = next((item for item in api["teststeps"] if item["id"] == key), None) if matching_api: - logger.info("\n----------匹配到的api----------\n" + logger.debug("\n----------匹配到的api----------\n" f"类型:{type(matching_api)}" f"值:{matching_api}\n") return matching_api @@ -162,7 +162,7 @@ class RequestControl(BaseRequest): 针请求前,对接口数据进行处理,识别用例数据中的关键字${xxxx},使用全局变量进行替换或者执行关键字中的方法替换为具体值 """ try: - logger.debug(f"\n======================================================\n" \ + logger.trace(f"\n======================================================\n" \ "-------------用例数据处理前--------------------\n" f"用例ID: {type(request_data.get('id', None))} || {request_data.get('id', None)}\n" \ f"用例优先级(severity): {type(request_data.get('severity', None))} || {request_data.get('severity', None)}\n" \ @@ -198,7 +198,7 @@ class RequestControl(BaseRequest): "case_dependence": request_data.get("case_dependence") } - logger.debug("\n-------------用例数据处理后--------------------\n" + logger.trace("\n-------------用例数据处理后--------------------\n" f"用例ID: {type(new_request_data.get('id', None))} || {new_request_data.get('id', None)}\n" \ f"用例优先级(severity): {type(new_request_data.get('severity', None))} || {new_request_data.get('severity', None)}\n" \ f"用例标题(title): {type(new_request_data.get('title', None))} || {new_request_data.get('title', None)}\n" \ @@ -215,7 +215,7 @@ class RequestControl(BaseRequest): f"后置提取参数(extract): {type(new_request_data.get('extract', None))} || {new_request_data.get('extract', None)}\n" \ f"用例依赖(case_dependence): {type(new_request_data.get('case_dependence', None))} || {new_request_data.get('case_dependence', None)}\n" "=====================================================") - logger.debug(new_request_data) + logger.trace(new_request_data) return new_request_data except Exception as e: logger.error(f"接口数据处理异常:{e}") @@ -256,7 +256,7 @@ class RequestControl(BaseRequest): f"响应数据: {response_result}\n" \ f"响应耗时: {response_time_seconds} s || {response_time_millisecond} ms\n" \ + "=" * 80 - logger.info(_res) + logger.debug(_res) allure_step(f"ID: {key}") allure_step(f"标题: {title}") allure_step(f"请求URL: {url}") @@ -281,10 +281,10 @@ class RequestControl(BaseRequest): """ extract = api_data.get("extract") if not extract: - logger.info(f"断言成功后不需要进行提取操作,extract={extract}") + logger.debug(f"断言成功后不需要进行提取操作,extract={extract}") return None - logger.info(f"断言成功后需要进行提取操作,extract={extract}") + logger.debug(f"断言成功后需要进行提取操作,extract={extract}") case_results = {} response_results = {} @@ -338,9 +338,9 @@ class RequestControl(BaseRequest): response_results.update(extract_data(response, {k: v})) result = {**case_results, **response_results, **database_results} - logger.info(f"--用例提取结果 --> {case_results} --") - logger.info(f"--响应提取结果 --> {response_results} --") - logger.info(f"--数据库提取结果 --> {database_results} --") + logger.debug(f"--用例提取结果 --> {case_results} --") + logger.debug(f"--响应提取结果 --> {response_results} --") + logger.debug(f"--数据库提取结果 --> {database_results} --") return result @@ -376,10 +376,10 @@ class RequestControl(BaseRequest): response = self.send_request(new_api_data) # 根据配置,增加接口请求等待时间。适应部分请求调用后,需要进行内置数据处理的问题 - logger.debug(f"开始等待") + logger.trace(f"开始等待") if new_api_data.get("wait_seconds"): time.sleep(new_api_data["wait_seconds"]) - logger.debug(f"结束等待") + logger.trace(f"结束等待") new_api_data["status_code"] = response.status_code new_api_data["response_time_seconds"] = round(response.elapsed.total_seconds(), 2) @@ -401,6 +401,6 @@ class RequestControl(BaseRequest): # 将接口请求参数payload的值保存到save_api_data中 save_api_data.update({"_payload": new_api_data["payload"]} if new_api_data.get("payload") else {}) - logger.debug(f"接口请求完成后,接口请求数据payload,响应数据 & 提取数据 save_api_data={save_api_data}") + logger.trace(f"接口请求完成后,接口请求数据payload,响应数据 & 提取数据 save_api_data={save_api_data}") allure_step(f"接口请求完成后,接口请求数据payload,响应数据 & 提取数据 save_api_data={save_api_data}") return save_api_data