From 322764ad2e3140856c0d09ce28b0922699e4276e Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Mon, 9 Oct 2023 17:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0redis=E9=94=AE=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=88=86=E5=89=B2=E7=AC=A6=20(#56)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- httpfpt/utils/auth_plugins.py | 4 ++-- httpfpt/utils/relate_testcase_executor.py | 10 +++++----- httpfpt/utils/request/case_data_parse.py | 22 +++++++++++----------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 0d1a9e1..377b934 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@ ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/wu-clan/httpfpt/ci.yml?logo=github) [![GitHub](https://img.shields.io/github/license/wu-clan/httpfpt)](https://github.com/wu-clan/httpfpt/blob/master/LICENSE) -![Static Badge](https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue) -![GitHub tag (with filter)](https://img.shields.io/github/v/tag/wu-clan/httpfpt) +![Static Badge](https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue) ![GitHub release (with filter)](https://img.shields.io/github/v/release/wu-clan/httpfpt) 基于 HTTP 请求的快速数据驱动 pytest 接口自动化测试框架 diff --git a/httpfpt/utils/auth_plugins.py b/httpfpt/utils/auth_plugins.py index 58ac2d5..0efe26d 100644 --- a/httpfpt/utils/auth_plugins.py +++ b/httpfpt/utils/auth_plugins.py @@ -29,7 +29,7 @@ def bearer_token(self) -> str: headers = auth_data[f'{self.auth_type}']['headers'] headers.update({'Connection': 'close'}) timeout = auth_data[f'{self.auth_type}']['timeout'] or 86400 - aap_bearer_token = redis_client.get(f'{redis_client.prefix}::token::{url}') + aap_bearer_token = redis_client.get(f'{redis_client.prefix}:token:{url}') if aap_bearer_token: token = aap_bearer_token else: @@ -45,5 +45,5 @@ def bearer_token(self) -> str: token = findall(auth_data[f'{self.auth_type}']['token_key'], response.json()) if not token: raise AuthError('Token 获取失败,请检查登录接口响应或 token_key 表达式') - redis_client.set(f'{redis_client.prefix}::token::{url}', token[0], ex=timeout) + redis_client.set(f'{redis_client.prefix}:token:{url}', token[0], ex=timeout) return token diff --git a/httpfpt/utils/relate_testcase_executor.py b/httpfpt/utils/relate_testcase_executor.py index 5c8baec..982eb89 100644 --- a/httpfpt/utils/relate_testcase_executor.py +++ b/httpfpt/utils/relate_testcase_executor.py @@ -34,7 +34,7 @@ def exec_setup_testcase(parsed: RequestDataParse, setup_testcase: list) -> Union raise CorrelateTestCaseError(error_text) # 判断关联测试用例是否存在 - all_case_id = ast.literal_eval(redis_client.get(f'{redis_client.prefix}::case_id::all')) + all_case_id = ast.literal_eval(redis_client.get(f'{redis_client.prefix}:case_id:all')) for testcase in setup_testcase: error_text = '执行关联测试用例失败,未在测试用例中找到关联测试用例,请检查关联测试用例 case_id 是否存在' if isinstance(testcase, dict): @@ -53,8 +53,8 @@ def exec_setup_testcase(parsed: RequestDataParse, setup_testcase: list) -> Union if isinstance(testcase, dict): relate_count += 1 relate_case_id = testcase['case_id'] - relate_case_filename = redis_client.get(f'{redis_client.prefix}::case_id_filename::{relate_case_id}') - case_data = redis_client.get(f'{redis_client.prefix}::case_data::{relate_case_filename}') + relate_case_filename = redis_client.get(f'{redis_client.prefix}:case_id_filename:{relate_case_id}') + case_data = redis_client.get(f'{redis_client.prefix}:case_data:{relate_case_filename}') case_data = ast.literal_eval(case_data) case_data_test_steps = case_data['test_steps'] if isinstance(case_data_test_steps, list): @@ -79,8 +79,8 @@ def exec_setup_testcase(parsed: RequestDataParse, setup_testcase: list) -> Union # 用例中 testcase 参数为直接关联测试用例时 elif isinstance(testcase, str): - relate_case_filename = redis_client.get(f'{redis_client.prefix}::case_id_filename::{testcase}') - case_data = redis_client.get(f'{redis_client.prefix}::case_data::{relate_case_filename}') + relate_case_filename = redis_client.get(f'{redis_client.prefix}:case_id_filename:{testcase}') + case_data = redis_client.get(f'{redis_client.prefix}:case_data:{relate_case_filename}') case_data = ast.literal_eval(case_data) case_data_test_steps = case_data['test_steps'] if isinstance(case_data_test_steps, list): diff --git a/httpfpt/utils/request/case_data_parse.py b/httpfpt/utils/request/case_data_parse.py index 8c34310..9da5bb4 100644 --- a/httpfpt/utils/request/case_data_parse.py +++ b/httpfpt/utils/request/case_data_parse.py @@ -24,14 +24,14 @@ def case_data_init(pydantic_verify: bool = False) -> None: :return: """ all_case_yaml_file = search_all_case_yaml_files() - redis_client.delete_prefix(f'{redis_client.prefix}::case_data::') + redis_client.delete_prefix(f'{redis_client.prefix}:case_data:') for case_yaml_file in all_case_yaml_file: case_data = read_yaml(None, filename=case_yaml_file) filename = get_file_property(case_yaml_file)[0] case_data.update({'filename': filename}) - redis_client.set(f'{redis_client.prefix}::case_data::{filename}', str(case_data)) + redis_client.set(f'{redis_client.prefix}:case_data:{filename}', str(case_data)) if pydantic_verify: - case_data_list = redis_client.get_prefix(f'{redis_client.prefix}::case_data::') + case_data_list = redis_client.get_prefix(f'{redis_client.prefix}:case_data:') count: int = 0 for case_data in case_data_list: try: @@ -50,8 +50,8 @@ def case_id_unique_verify() -> None: """ all_case_id_dict: List[Dict[str, Union[str, list]]] = [] all_case_id = [] - case_data_list = redis_client.get_prefix(f'{redis_client.prefix}::case_data::') - redis_client.delete_prefix(f'{redis_client.prefix}::case_id_filename::') + case_data_list = redis_client.get_prefix(f'{redis_client.prefix}:case_data:') + redis_client.delete_prefix(f'{redis_client.prefix}:case_id_filename:') for case_data in case_data_list: case_data = ast.literal_eval(case_data) filename = case_data['filename'] @@ -61,14 +61,14 @@ def case_id_unique_verify() -> None: case_id = steps['case_id'] all_case_id.append(case_id) all_case_id_dict.append({f'{filename}': case_id}) - redis_client.set(f'{redis_client.prefix}::case_id_filename::{case_id}', filename) + redis_client.set(f'{redis_client.prefix}:case_id_filename:{case_id}', filename) if isinstance(steps, list): case_id_list = [] for s in steps: case_id = s['case_id'] case_id_list.append(case_id) all_case_id.append(case_id) - redis_client.set(f'{redis_client.prefix}::case_id_filename::{case_id}', filename) + redis_client.set(f'{redis_client.prefix}:case_id_filename:{case_id}', filename) all_case_id_dict.append({f'{filename}': case_id_list}) except KeyError: raise RequestDataParseError(f'测试用例数据文件 {filename} 结构错误,建议开启 pydantic 验证') @@ -100,12 +100,12 @@ def case_id_unique_verify() -> None: repeat_case_id_desc.update({'detail': all_repeat_case_id_detail}) all_repeat_case_id.append(repeat_case_id_desc) if len(all_repeat_case_id) > 0: - redis_client.set(f'{redis_client.prefix}::case_id::repeated', 'true') + redis_client.set(f'{redis_client.prefix}:case_id:repeated', 'true') log.error(f'运行失败, 检测到用例重复 case_id: {all_repeat_case_id[0]}') sys.exit(1) else: - redis_client.delete(f'{redis_client.prefix}::case_id::repeated') - redis_client.rset(f'{redis_client.prefix}::case_id::all', str(all_case_id)) + redis_client.delete(f'{redis_client.prefix}:case_id:repeated') + redis_client.rset(f'{redis_client.prefix}:case_id:all', str(all_case_id)) def get_request_data(*, filename: str) -> List[Dict[str, Any]]: @@ -115,7 +115,7 @@ def get_request_data(*, filename: str) -> List[Dict[str, Any]]: :param filename: 测试用例数据文件名称 :return: """ - case_data = ast.literal_eval(redis_client.get(f'{redis_client.prefix}::case_data::{filename}')) + case_data = ast.literal_eval(redis_client.get(f'{redis_client.prefix}:case_data:{filename}')) config_error = f'请求测试用例数据文件 {filename} 缺少 config 信息, 请检查测试用例文件内容' test_steps_error = f'请求测试用例数据文件 {filename} 缺少 test_steps 信息, 请检查测试用例文件内容' try: