From f0cc52514108fbc1d6feef805b38e2f0782defec Mon Sep 17 00:00:00 2001 From: gongwenxin Date: Tue, 27 May 2025 03:18:14 +0800 Subject: [PATCH] v0.2 --- Framework_And_TestCase_Guide.md | 280 +- README_API_TEST_FRAMEWORK.md | 230 - assets/doc/井筒API示例_simple.json | 2 +- .../__pycache__/basic_checks.cpython-312.pyc | Bin 3341 -> 3376 bytes custom_testcases/basic_checks.py | 3 +- ...g_required_field_body_case.cpython-312.pyc | Bin 10243 -> 9096 bytes ..._required_field_query_case.cpython-312.pyc | Bin 8522 -> 8921 bytes .../type_mismatch_body_case.cpython-312.pyc | Bin 25287 -> 11174 bytes ..._mismatch_query_param_case.cpython-312.pyc | Bin 16561 -> 11417 bytes .../missing_required_field_body_case.py | 155 +- .../missing_required_field_query_case.py | 87 +- .../error_handling/type_mismatch_body_case.py | 365 +- .../type_mismatch_query_param_case.py | 285 +- .../url_llm_checks.cpython-312.pyc | Bin 204 -> 204 bytes .../normative_spec/url_llm_checks.py | 7 +- .../https_mandatory_case.cpython-312.pyc | Bin 6750 -> 6750 bytes .../security/https_mandatory_case.py | 2 +- ...asic_api_sanity_check_case.cpython-312.pyc | Bin 0 -> 196 bytes .../basic_api_sanity_check_case.py | 78 + .../test_framework_core.cpython-312.pyc | Bin 14286 -> 29191 bytes .../test_orchestrator.cpython-312.pyc | Bin 104348 -> 107569 bytes .../assertion_engine/__init__.py | 1 - .../assertion_engine/engine.py | 61 - .../__pycache__/generator.cpython-312.pyc | Bin 7185 -> 0 bytes .../__pycache__/parser.cpython-312.pyc | Bin 26570 -> 26570 bytes ddms_compliance_suite/test_framework_core.py | 264 +- ddms_compliance_suite/test_orchestrator.py | 130 +- .../__pycache__/common_utils.cpython-312.pyc | Bin 0 -> 2590 bytes .../__pycache__/schema_utils.cpython-312.pyc | Bin 15322 -> 30455 bytes ddms_compliance_suite/utils/common_utils.py | 51 + ddms_compliance_suite/utils/schema_utils.py | 340 +- log.txt | 4734 ++++++++--------- test_report.json | 632 ++- 33 files changed, 4088 insertions(+), 3619 deletions(-) delete mode 100644 README_API_TEST_FRAMEWORK.md create mode 100644 custom_testcases/setup_checks/__pycache__/basic_api_sanity_check_case.cpython-312.pyc create mode 100644 custom_testcases/setup_checks/basic_api_sanity_check_case.py delete mode 100644 ddms_compliance_suite/assertion_engine/__init__.py delete mode 100644 ddms_compliance_suite/assertion_engine/engine.py delete mode 100644 ddms_compliance_suite/case_generator/__pycache__/generator.cpython-312.pyc create mode 100644 ddms_compliance_suite/utils/__pycache__/common_utils.cpython-312.pyc create mode 100644 ddms_compliance_suite/utils/common_utils.py diff --git a/Framework_And_TestCase_Guide.md b/Framework_And_TestCase_Guide.md index 77ae754..9ed983b 100644 --- a/Framework_And_TestCase_Guide.md +++ b/Framework_And_TestCase_Guide.md @@ -11,6 +11,7 @@ * **核心控制器**:是整个测试流程的指挥中心。 * **组件初始化**:负责初始化和管理其他关键组件,如 `InputParser`(API 规范解析器)、`APICaller`(API 请求调用器)、`TestCaseRegistry`(测试用例注册表)以及可选的 `LLMService`(大模型服务)。 + * **`$ref` 解析**: 在将API端点规范 (`endpoint_spec_dict`) 传递给测试用例构造函数之前,会使用 `schema_utils.resolve_json_schema_references` 解析其中的 schemas (requestBody, parameters, responses),默认会丢弃原始的 `$ref` 和 `$$` 前缀的键。 * **测试流程管理**: * 调用 `InputParser` 解析指定的 API 规范文件,获取所有端点的定义。 * 根据用户指定的过滤器(如 YAPI 分类或 Swagger 标签)筛选需要测试的 API 端点。 @@ -31,7 +32,7 @@ * **适用性筛选**:提供 `get_applicable_test_cases` 方法,根据 API 端点的 HTTP 方法和路径(通过正则表达式匹配)筛选出适用的、已排序的测试用例类列表给编排器。 4. **测试框架核心 (`test_framework_core.py`)**: - * **`BaseAPITestCase`**:所有自定义测试用例的基类。它定义了测试用例应具备的元数据(如 `id`, `name`, `description`, `severity`, `tags`, `execution_order`, `applicable_methods`, `applicable_paths_regex` 以及 LLM 使用标志位)和一系列生命周期钩子方法(如 `generate_*`, `validate_*`)。 + * **`BaseAPITestCase`**:所有自定义测试用例的基类。它定义了测试用例应具备的元数据(如 `id`, `name`, `description`, `severity`, `tags`, `execution_order`, `applicable_methods`, `applicable_paths_regex` 以及 LLM 使用标志位)和一系列生命周期钩子方法(如 `generate_*`, `validate_*`),以及众多辅助方法(见下文)。 * **`APIRequestContext` / `APIResponseContext`**:数据类,分别用于封装 API 请求和响应的上下文信息,在测试用例的钩子方法间传递。 * **`ValidationResult`**:数据类,用于表示单个验证点的结果(通过/失败、消息、详细信息)。 * **`TestSeverity`**:枚举类型,定义测试用例的严重级别。 @@ -47,35 +48,37 @@ * 如果配置了 LLM 服务(如通义千问的兼容 OpenAI 模式的 API),此组件负责与 LLM API 交互。 * 主要用于根据 Pydantic 模型(从 JSON Schema 动态创建)智能生成复杂的请求参数或请求体。 +8. **工具模块 (`ddms_compliance_suite/utils/`)**: + + * **`schema_utils.py`**: 包含一系列用于处理 JSON Schema 和 API 参数的实用函数。 + * **`common_utils.py`**: 包含通用的辅助函数。 这个架构旨在提供一个灵活、可扩展的 API 测试框架,允许用户通过编写自定义的 Python 测试用例来定义复杂的验证逻辑。 -## 自定义 `APITestCase` 编写指南 (更新版) +## 自定义 `APITestCase` 编写指南 -此指南帮助您创建自定义的 `APITestCase` 类,以扩展 DDMS 合规性验证软件的测试能力。核心理念是 **代码即测试**。 -(您可以参考项目中的 `docs/APITestCase_Development_Guide.md` 文件获取更详尽的原始指南,以下内容基于该指南并加入了新特性。) +此指南帮助您创建自定义的 `APITestCase` 类,以扩展 DDMS 合规性验证软件的测试能力。核心理念是 **代码即测试**,并充分利用框架提供的工具函数和基类辅助方法来简化测试用例的编写。 ### 1. 创建自定义测试用例 1. **创建 Python 文件**:在您的自定义测试用例目录(例如 `custom_testcases/`)下创建一个新的 `.py` 文件。 -2. **继承 `BaseAPITestCase`**:定义一个或多个类,使其继承自 `ddms_compliance_suite.test_framework_core.BaseAPITestCase`。 -3. **定义元数据 (类属性)**: +2. **导入必要模块**: + + ```python + from typing import Dict, Any, Optional, List + from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext + from ddms_compliance_suite.utils import schema_utils, common_utils # 导入工具模块 + import logging # 可选,用于自定义日志 + ``` +3. **继承 `BaseAPITestCase`**:定义一个或多个类,使其继承自 `BaseAPITestCase`。 +4. **定义元数据 (类属性)**: * `id: str`: 测试用例的全局唯一标识符 (例如 `"TC-MYFEATURE-001"`)。 * `name: str`: 人类可读的名称。 * `description: str`: 详细描述。 * `severity: TestSeverity`: 严重程度 (例如 `TestSeverity.CRITICAL`, `TestSeverity.HIGH`, 等)。 * `tags: List[str]`: 分类标签 (例如 `["smoke", "regression"]`)。 - * **`execution_order: int` (新增)**: 控制测试用例的执行顺序。**数值较小的会比较大的先执行**。如果多个测试用例此值相同,则它们会再根据类名的字母顺序排序。默认值为 `100`。 - ```python - class MyFirstCheck(BaseAPITestCase): - execution_order = 10 - # ... other metadata - - class MySecondCheck(BaseAPITestCase): - execution_order = 20 - # ... other metadata - ``` + * `execution_order: int`: 控制测试用例的执行顺序。**数值较小的会比较大的先执行**。默认值为 `100`。 * `applicable_methods: Optional[List[str]]`: 限制适用的 HTTP 方法 (例如 `["POST", "PUT"]`)。`None` 表示所有方法。 * `applicable_paths_regex: Optional[str]`: 限制适用的 API 路径 (Python 正则表达式)。`None` 表示所有路径。 * **LLM 使用标志 (可选)**: 这些标志允许测试用例覆盖全局 LLM 配置。 @@ -83,20 +86,42 @@ * `use_llm_for_path_params: bool = False` * `use_llm_for_query_params: bool = False` * `use_llm_for_headers: bool = False` - (如果测试用例中不设置这些,则遵循 `run_api_tests.py` 传入的全局 LLM 开关。) -4. **实现验证逻辑**:重写 `BaseAPITestCase` 中一个或多个 `generate_*` 或 `validate_*` 方法。 +5. **实现 `__init__` (如果需要自定义初始化逻辑)**: -### 2. `BaseAPITestCase` 核心方法 + * 通常,您会在这里调用基类的 `__init__`。 + * 许多测试用例会在这里查找并设置测试目标字段/参数,可以利用 `BaseAPITestCase` 提供的辅助方法(如 `_get_resolved_request_body_schema`, `_find_simple_type_field_in_schema`, `_find_first_simple_type_parameter`, `_find_removable_field_path`)来完成。 -* **`__init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any])`**: + ```python + class MissingRequiredFieldBodyCase(BaseAPITestCase): + # ...元数据... + def __init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any], json_schema_validator: Optional[Any] = None, llm_service: Optional[Any] = None): + super().__init__(endpoint_spec, global_api_spec, json_schema_validator, llm_service) + self.removable_field_path: Optional[List[Union[str, int]]] = None - * 构造函数。`endpoint_spec` 包含当前测试端点的 API 定义,`global_api_spec` 包含完整的 API 规范。 - * 基类会初始化 `self.logger`,可用于记录日志。 + body_schema = self._get_resolved_request_body_schema() + if body_schema: + self.removable_field_path = self._find_removable_field_path(body_schema, "request body") + + if not self.removable_field_path: + self.logger.info(f"[{self.id}] No removable required field found in request body.") + ``` +6. **实现验证逻辑**:重写 `BaseAPITestCase` 中一个或多个 `generate_*` 或 `validate_*` 方法。在这些方法中,积极使用框架提供的工具函数和基类辅助方法。 + +### 2. `BaseAPITestCase` 核心生命周期方法 + +这些方法由测试编排器在测试执行的不同阶段调用。 + +* **`__init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any], json_schema_validator: Optional[Any], llm_service: Optional[Any])`**: + + * 构造函数。`endpoint_spec` 包含当前测试端点的 API 定义(已经过 `$ref` 解析),`global_api_spec` 包含完整的 API 规范。 + * 基类会初始化 `self.logger`,可用于记录日志。`json_schema_validator` 和 `llm_service` 也会被存储。 * **请求生成与修改方法**: 在 API 请求发送前调用,用于修改或生成请求数据。 + * `generate_path_params(self, current_path_params: Dict[str, Any]) -> Dict[str, Any]` * `generate_query_params(self, current_query_params: Dict[str, Any]) -> Dict[str, Any]` * `generate_headers(self, current_headers: Dict[str, str]) -> Dict[str, str]` * `generate_request_body(self, current_body: Optional[Any]) -> Optional[Any]` + * `modify_request_url(self, current_url: str) -> str` * **请求预校验方法**: 在请求数据完全构建后、发送前调用,用于静态检查。返回 `List[ValidationResult]`。 * `validate_request_url(self, url: str, request_context: APIRequestContext) -> List[ValidationResult]` @@ -112,60 +137,181 @@ * `check_performance(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]` * 通常用于检查响应时间 `response_context.elapsed_time`。 -### 3. 核心辅助类 +### 3. `BaseAPITestCase` 提供的辅助方法 + +这些方法旨在简化测试用例中常见的任务: + +* **`_get_resolved_request_body_schema(self) -> Optional[Dict[str, Any]]`**: + + * 从 `self.endpoint_spec` 中提取请求体的 schema。它会自动处理常见的 content-type (如 `application/json`) 并考虑 OpenAPI 2.0 的 `in: body` 参数风格。 + * 返回的 schema 已经由编排器进行过 `$ref` 解析。 +* **`_find_removable_field_path(self, schema_to_search: Optional[Dict[str, Any]], schema_name_for_log: str) -> Optional[List[Union[str, int]]]`**: + + * 在给定的 `schema_to_search` 中查找第一个可移除的必填字段的路径。 + * 内部调用 `schema_utils.util_find_removable_field_path_recursive`。 + * 适用于构造"缺失必填字段"之类的测试场景。 + * `schema_name_for_log` 用于日志记录,例如 "request body"。 +* **`_find_simple_type_field_in_schema(self, schema_to_search: Optional[Dict[str, Any]], schema_name_for_log: str) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any]]]`**: + + * 在给定的 `schema_to_search` (应为已解析的字典) 中查找第一个简单类型 (string, integer, number, boolean) 字段。 + * 内部调用 `schema_utils.find_first_simple_type_field_recursive`。 + * 返回一个元组 `(field_path, field_type, field_schema)` 或 `None`。 + * 适用于构造"字段类型不匹配"之类的测试场景。 +* **`_find_first_simple_type_parameter(self, param_location: str) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any], str]]`**: + + * 在指定的参数位置 (`param_location`,如 "query", "header") 查找第一个简单类型的参数或参数内部的简单类型字段。 + * 它会检查参数是否直接是简单类型,或者其 `schema` 是否为简单类型或包含简单类型的对象。 + * 如果参数的 schema 是对象,它会调用 `_find_simple_type_field_in_schema` 来查找嵌套字段。 + * 返回 `(full_path, param_type, param_schema, top_level_param_name)` 或 `None`。 + * `full_path` 可能是 `['paramName']` 或 `['paramName', 'nestedField']`。 +* **`_find_required_parameter_name(self, param_in: str) -> Optional[str]`**: + + * 查找指定位置 (`param_in`,如 "query", "header", "path") 的第一个必填参数的名称。 +* **`expect_error_response(self, response_context: APIResponseContext, expected_status_codes: List[int], expected_error_code_in_body: Optional[Union[str, int]] = None, error_code_field_name: str = "code", context_message_prefix: str = "Error response validation") -> List[ValidationResult]` (新增)**: + + * 一个标准化的方法来验证错误响应。 + * 检查 `response_context.status_code` 是否在 `expected_status_codes` 列表中。 + * 可选地,检查响应体 (如果是JSON对象) 中 `error_code_field_name` 字段的值是否等于 `expected_error_code_in_body`。 + * 返回包含详细信息的 `ValidationResult` 列表。 + * 示例: + ```python + # 在某个测试用例的 validate_response 中 + if not self.target_field_path: # 假设此用例需要一个目标字段 + return [self.passed("Skipped: No target field identified.")] + + field_desc = f"body field '{'.'.join(map(str, self.target_field_path))}'" + return self.expect_error_response( + response_context=response_context, + expected_status_codes=[400, 422], + expected_error_code_in_body="4001", + context_message_prefix=f"Missing required {field_desc}" + ) + ``` +* **`validate_data_against_schema(self, data_to_validate: Any, schema_definition: Dict[str, Any], context_message_prefix: str = "Data") -> List[ValidationResult]`**: + + * 使用注入的 `JSONSchemaValidator` (如果可用) 来验证数据是否符合给定的 schema。 +* **`passed(message: str, details: Optional[Dict[str, Any]] = None) -> ValidationResult` (静态方法)**: + + * 快速创建表示"通过"的 `ValidationResult`。 +* **`failed(message: str, details: Optional[Dict[str, Any]] = None) -> ValidationResult` (静态方法)**: + + * 快速创建表示"失败"的 `ValidationResult`。 + +### 4. `ddms_compliance_suite.utils` 工具模块 + +#### 4.1 `schema_utils.py` + +这个模块包含处理 JSON Schema、API 参数和数据结构的函数。 + +* **`resolve_json_schema_references(schema_to_resolve: Any, full_api_spec: Dict[str, Any], ..., discard_refs: bool = True) -> Any`**: + + * 递归解析 JSON Schema 中的 `$ref` 引用。 + * `discard_refs=True` (默认) 会在解析前移除 `$ref` 和以 `$$` 开头的键。如果为 `False`,则尝试解析 `$ref` 并保留其他键。 + * 此函数主要由测试编排器在实例化测试用例前调用。测试用例通常不需要直接使用它,因为 `endpoint_spec` 已经预处理过了。 +* **`util_find_removable_field_path_recursive(current_schema: Dict[str, Any], current_path: List[Union[str, int]], full_api_spec_for_refs: Dict[str, Any]) -> Optional[List[Union[str, int]]]`**: + + * 递归地在(可能包含 `$ref` 的)`current_schema` 中查找第一个可移除的必填字段的路径。 + * 主要被 `BaseAPITestCase._find_removable_field_path` 调用。 +* **`util_remove_value_at_path(data_container: Any, path: List[Union[str, int]]) -> Tuple[Any, Any, bool]`**: + + * 从嵌套的字典/列表中移除指定路径的值。 + * 返回 `(修改后的容器, 被移除的值, 是否成功)`。 + * 示例: + ```python + # 在某个测试用例的 generate_request_body 中 + if self.removable_field_path: + modified_body, removed_value, success = schema_utils.util_remove_value_at_path( + current_body, self.removable_field_path + ) + if success: + self.logger.info(f"Removed value '{removed_value}' from path '{'.'.join(map(str, self.removable_field_path))}'.") + return modified_body + return current_body + ``` +* **`util_set_value_at_path(data_container: Any, path: List[Union[str, int]], new_value: Any) -> Tuple[Any, bool]` (新增)**: + + * 在嵌套的字典/列表中为指定路径设置或修改 `new_value`。 + * 如果路径中的父级结构不存在,会尝试创建它们(字典会被创建,列表会用 `None` 填充到所需索引)。 + * 返回 `(修改后的容器, 是否成功)`。 + * 示例: + ```python + # 在某个测试用例的 generate_request_body 中 + if self.target_field_path and self.mismatched_value is not None: + modified_body, success = schema_utils.util_set_value_at_path( + current_body, self.target_field_path, self.mismatched_value + ) + if success: + return modified_body + return current_body + ``` +* **`generate_mismatched_value(original_type: Optional[str], original_value: Any, field_schema: Optional[Dict[str, Any]], logger_param: Optional[logging.Logger] = None) -> Any` (新增)**: + + * 根据字段的 `original_type`、`original_value`(当前未使用)和 `field_schema`(用于检查 `enum` 等约束)生成一个类型不匹配的值。 + * 适用于类型不匹配的测试场景。 + * 示例: + ```python + # 在某个测试用例的 __init__ 或 generate_ 方法中 + if self.original_field_type: # 假设 self.original_field_type 已被正确设置 + self.mismatched_val = schema_utils.generate_mismatched_value( + self.original_field_type, + None, # original_value, 暂时可以为 None + self.target_field_schema, # 字段的 schema + self.logger + ) + ``` +* **`build_object_schema_for_params(params_spec_list: List[Dict[str, Any]], model_name_base: str, ...) -> Tuple[Optional[Dict[str, Any]], str]`**: + + * 从参数规范列表(例如 OpenAPI 参数对象列表)构建一个聚合的 JSON 对象 schema。 + * 可用于将多个查询参数或头部参数统一表示为一个对象 schema,方便进行 schema 校验或数据生成。 +* **`find_first_simple_type_field_recursive(current_schema: Dict[str, Any], ...) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any]]]`**: + + * 递归地在已解析的 `current_schema` 中查找第一个简单类型的字段 (string, integer, number, boolean),包括嵌套在对象或数组中的。 + * 主要被 `BaseAPITestCase._find_simple_type_field_in_schema` 调用。 + +#### 4.2 `common_utils.py` + +* **`format_url_with_path_params(base_url: str, path_template: str, path_params: Dict[str, Any]) -> str`**: + + * 将路径模板中的占位符 (如 `{userId}`) 替换为 `path_params` 中提供的值,并与 `base_url` 组合成完整的 URL。 + +### 5. 核心数据类 * **`ValidationResult(passed: bool, message: str, details: Optional[Dict[str, Any]] = None)`**: + * 封装单个验证点的结果。所有 `validate_*` 和 `check_*` 方法都应返回此对象的列表。 * **`APIRequestContext`**: 包含当前请求的详细信息(方法、URL、参数、头、体、端点规范)。 * **`APIResponseContext`**: 包含 API 响应的详细信息(状态码、头、JSON 内容、文本内容、耗时、原始响应对象、关联的请求上下文)。 -### 4. 示例 (展示 `execution_order`) +### 6. 编写测试用例的推荐流程 -参考您项目中的 `custom_testcases/basic_checks.py`,您可以像这样添加 `execution_order`: +1. **明确测试目标**:这个测试用例要验证什么?是参数处理、错误响应、数据格式还是业务逻辑? +2. **选择合适的基类方法**: -```python -# In custom_testcases/status_and_header_checks.py -from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext + * 如果需要修改请求数据(参数、头部、请求体),重写相应的 `generate_*` 方法。 + * 如果需要在发送前对请求的静态结构进行校验,重写 `validate_request_*` 方法。 + * 核心的响应验证逻辑通常在 `validate_response` 中实现。 + * 性能相关的检查在 `check_performance` 中。 +3. **初始化 (在 `__init__` 中)**: -class StatusCodeCheck(BaseAPITestCase): - id = "TC-STATUS-001" - name = "状态码检查" - description = "验证API响应状态码。" - severity = TestSeverity.CRITICAL - tags = ["status", "smoke"] - execution_order = 10 # 希望这个检查先于下面的 HeaderCheck 执行 + * 调用 `super().__init__(...)`。 + * 如果测试依赖于特定的请求体字段或参数: + * 获取请求体 schema: `body_schema = self._get_resolved_request_body_schema()`。 + * 查找必填字段进行移除测试: `path = self._find_removable_field_path(body_schema, "request body")`。 + * 查找简单类型字段进行类型不匹配测试 (请求体): `target = self._find_simple_type_field_in_schema(body_schema, "request body")`。 + * 查找简单类型参数进行类型不匹配测试 (查询/头部): `target = self._find_first_simple_type_parameter("query")`。 + * 查找必填参数名称: `name = self._find_required_parameter_name("query")`。 + * 将找到的目标路径、类型、schema 等信息存储在 `self` 的属性中,供后续方法使用。 +4. **生成/修改请求数据 (在 `generate_*` 方法中)**: - def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> list[ValidationResult]: - results = [] - if response_context.status_code == 200: - results.append(ValidationResult(passed=True, message="响应状态码为 200 OK。")) - else: - results.append(ValidationResult(passed=False, message=f"期望状态码 200,实际为 {response_context.status_code}。")) - return results + * 如果需要移除字段,使用 `schema_utils.util_remove_value_at_path()`。 + * 如果需要修改字段值(例如进行类型不匹配测试): + 1. 使用 `schema_utils.generate_mismatched_value()` 生成不匹配的值。 + 2. 使用 `schema_utils.util_set_value_at_path()` 将该值设置到请求数据中。 +5. **验证响应 (在 `validate_response` 方法中)**: -class EssentialHeaderCheck(BaseAPITestCase): - id = "TC-HEADER-ESSENTIAL-001" - name = "必要请求头 X-Trace-ID 存在性检查" - description = "验证响应中是否包含 X-Trace-ID。" - severity = TestSeverity.HIGH - tags = ["header"] - execution_order = 20 # 在状态码检查之后执行 + * 如果测试期望一个错误响应,优先使用 `self.expect_error_response()`。 + * 如果需要验证响应体数据是否符合特定的 JSON Schema,使用 `self.validate_data_against_schema()`。 + * 对于其他自定义的断言,直接比较 `response_context` 中的属性(如 `status_code`, `json_content`)并使用 `self.passed()` 或 `self.failed()` 创建 `ValidationResult`。 +6. **日志记录**: 在关键步骤使用 `self.logger.info()`, `self.logger.debug()`, `self.logger.warning()` 等记录信息,便于调试。 - def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> list[ValidationResult]: - results = [] - if "X-Trace-ID" in response_context.headers: - results.append(ValidationResult(passed=True, message="响应头中包含 X-Trace-ID。")) - else: - results.append(ValidationResult(passed=False, message="响应头中缺少 X-Trace-ID。")) - return results -``` - -### 5. 最佳实践 - -* **单一职责**:让每个 `APITestCase` 专注于特定的验证目标。 -* **清晰命名**:为类、ID、名称使用描述性文字。 -* **善用 `endpoint_spec`**:参考 API 定义进行精确测试。 -* **详细的 `ValidationResult`**:失败时提供充足的上下文信息。 -* **日志记录**:使用 `self.logger` 记录测试过程中的重要信息和问题。 - -希望这份更新的架构概览和编写指南对您有所帮助!通过 `execution_order`,您可以更好地控制复杂场景下测试用例的执行流程。 +通过遵循这些指南并善用框架提供的工具,您可以更高效地编写出简洁、健壮且易于维护的 API 合规性测试用例。 diff --git a/README_API_TEST_FRAMEWORK.md b/README_API_TEST_FRAMEWORK.md deleted file mode 100644 index 8c38ca3..0000000 --- a/README_API_TEST_FRAMEWORK.md +++ /dev/null @@ -1,230 +0,0 @@ -# API测试框架 - -这是一个全面的API测试框架,专为API合规性测试而设计。该框架能够基于Swagger和YAPI文档自动生成和执行API测试,验证API响应是否符合预期的格式和结构。 - -## 主要功能 - -- **多格式支持**:支持从Swagger和YAPI文件导入API定义。 -- **自动测试生成**:根据API文档自动生成测试用例。 -- **请求参数生成**:基于API文档中的schema定义自动生成合理的测试数据。 -- **响应验证**: - - 状态码验证 - - JSON格式验证 - - JSON Schema验证 - - 未来可扩展自定义规则验证 -- **测试编排**:管理多个API测试的执行和结果收集。 -- **命令行工具**:便于集成到CI/CD流程中。 -- **详细报告**:生成详细的测试报告,包括失败原因和建议。 - -## 框架架构 - -该框架由以下主要组件组成: - -1. **输入解析器(Input Parser)** - - 解析Swagger和YAPI格式的API文档 - - 提取API路径、方法、参数和响应schema等信息 - -2. **API调用器(API Caller)** - - 负责构建和发送API请求 - - 处理不同类型的请求参数和请求体 - -3. **JSON验证器(JSON Validator)** - - 验证API响应的格式和结构 - - 基于JSON Schema进行响应验证 - -4. **测试编排器(Test Orchestrator)** - - 协调上述组件的工作 - - 管理测试执行流程 - - 收集和汇总测试结果 - -5. **命令行工具(CLI)** - - 提供命令行接口,便于使用和集成 - -## 安装与依赖 - -该框架依赖以下库: - -``` -pytest -requests -jsonschema -prance (可选,用于高级Swagger解析) -``` - -可以通过以下命令安装依赖: - -```bash -pip install pytest requests jsonschema -``` - -## 使用方法 - -### 生成API测试 - -使用提供的命令行工具生成API测试: - -```bash -# 从YAPI文件生成测试 -python generate_api_tests.py --yapi 路径/到/yapi导出文件.json --base-url http://api服务器:端口 - -# 从Swagger文件生成测试 -python generate_api_tests.py --swagger 路径/到/swagger文件.json --base-url http://api服务器:端口 - -# 生成特定分类的API测试 -python generate_api_tests.py --yapi 路径/到/yapi文件.json --base-url http://api服务器:端口 --categories 分类1,分类2 - -# 查看所有可用分类 -python generate_api_tests.py --yapi 路径/到/yapi文件.json --list-categories -``` - -### 运行API测试 - -使用测试编排器运行API测试: - -```bash -# 运行所有测试 -python run_api_tests.py --yapi 路径/到/yapi文件.json --base-url http://api服务器:端口 - -# 运行特定分类的测试 -python run_api_tests.py --yapi 路径/到/yapi文件.json --base-url http://api服务器:端口 --categories 分类1,分类2 - -# 保存测试结果到文件 -python run_api_tests.py --yapi 路径/到/yapi文件.json --base-url http://api服务器:端口 --output 测试报告.json -``` - -### 运行生成的测试文件 - -使用pytest运行生成的测试文件: - -```bash -pytest tests/test_generated_yapi_apis.py -v -# 或 -pytest tests/test_generated_swagger_apis.py -v -``` - -## 测试数据生成 - -该框架根据API文档中定义的JSON Schema自动生成测试数据: - -- 对于基本类型(字符串、数字、布尔值等),生成合理的随机值 -- 对于对象类型,根据属性定义生成嵌套对象 -- 对于数组类型,生成包含适当元素的数组 -- 优先使用文档中提供的示例值和默认值 - -例如,对于以下Schema: - -```json -{ - "type": "object", - "properties": { - "name": {"type": "string"}, - "age": {"type": "number"}, - "tags": { - "type": "array", - "items": {"type": "string"} - } - } -} -``` - -框架会生成类似这样的测试数据: - -```json -{ - "name": "测试名称", - "age": 25, - "tags": ["标签1", "标签2"] -} -``` - -## 响应验证 - -该框架提供多层次的响应验证: - -1. **状态码验证**:检查HTTP状态码是否在预期范围内(默认为2xx) -2. **JSON格式验证**:确保响应是有效的JSON格式 -3. **Schema验证**:根据API文档中定义的响应Schema验证响应内容 -4. **自定义规则验证**:(未来扩展)支持基于规则库的自定义验证 - -验证结果包含详细信息,有助于快速定位和修复问题。 - -## 示例 - -### 直接使用验证器 - -```python -from ddms_compliance_suite.json_schema_validator.validator import JSONSchemaValidator - -# 创建验证器 -validator = JSONSchemaValidator() - -# 定义schema -schema = { - "type": "object", - "properties": { - "code": {"type": "number"}, - "message": {"type": "string"}, - "data": {"type": "object"} - }, - "required": ["code", "message"] -} - -# 验证响应 -response_data = {"code": 200, "message": "success", "data": {"id": 1}} -result = validator.validate(response_data, schema) - -if result.is_valid: - print("验证通过") -else: - print("验证失败") - for error in result.errors: - print(f"错误: {error}") -``` - -### 使用测试编排器 - -```python -from ddms_compliance_suite.test_orchestrator import APITestOrchestrator -from ddms_compliance_suite.input_parser.parser import InputParser - -# 解析API文档 -parser = InputParser() -parsed_api = parser.parse_yapi_spec("path/to/yapi.json") - -# 创建测试编排器 -orchestrator = APITestOrchestrator(base_url="http://api-server:8080") - -# 运行单个API测试 -endpoint = parsed_api.endpoints[0] -result = orchestrator.run_test_for_endpoint(endpoint) - -# 检查结果 -print(f"测试结果: {result.status}") -print(f"测试消息: {result.message}") - -# 打印验证详情 -if result.validation_details: - print("验证详情:") - for key, value in result.validation_details.items(): - if isinstance(value, dict) and 'is_valid' in value: - valid_str = "通过" if value['is_valid'] else "失败" - print(f" {key}: {valid_str}") - - if not value['is_valid'] and 'errors' in value: - for error in value['errors']: - print(f" 错误: {error}") -``` - -## 未来扩展 - -该框架计划在未来增加以下功能: - -1. **规则库**:支持自定义验证规则,更灵活地定义API响应的合规性要求 -2. **测试覆盖率分析**:提供API测试覆盖率的统计和分析 -3. **历史记录**:保存测试历史记录,支持比较不同版本的API测试结果 -4. **Web界面**:提供Web界面,方便查看和管理测试结果 -5. **性能测试**:集成性能测试功能,评估API的性能指标 - -## 贡献与反馈 - -欢迎提供反馈和建议,帮助我们改进这个框架。如有问题或建议,请联系项目维护者 \ No newline at end of file diff --git a/assets/doc/井筒API示例_simple.json b/assets/doc/井筒API示例_simple.json index c91a099..52ba86b 100644 --- a/assets/doc/井筒API示例_simple.json +++ b/assets/doc/井筒API示例_simple.json @@ -220,7 +220,7 @@ "req_body_type": "json", "res_body_type": "json", "res_body": "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"message\":{\"type\":\"string\"},\"data\":{\"type\":\"boolean\"}}}", - "req_body_other": "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"version\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"bsflag\":{\"type\":\"number\"},\"wellCommonName\":{\"type\":\"string\"},\"wellId\":{\"type\":\"string\"},\"dataRegion\":{\"type\":\"string\"}},\"required\":[\"bsflag\",\"wellCommonName\",\"wellId\",\"dataRegion\"]}}}}", + "req_body_other": "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"required\":true},\"version\":{\"type\":\"string\"}},\"required\":[\"id\",\"version\"]}", "project_id": 1193, "catid": 18705, "markdown": "", diff --git a/custom_testcases/__pycache__/basic_checks.cpython-312.pyc b/custom_testcases/__pycache__/basic_checks.cpython-312.pyc index bc10c5ef2a54cfc201c9720365067cf979e387c4..827f95e83416e5b0645c481bc3758336d414b2f9 100644 GIT binary patch delta 236 zcmeB`+91VynwOW00SHponPi-p$or3R!DJprhg9|`?i9fkj#Qph-c-IcCP|PAP81$j zDt{^;SezTiO5^BYNMlUlY2l3$Na0NtOyNrvO5slxP89*EOJhqBXkm#G?O>>2j1miG z&=i`yma&hO5hxY1*`8@86QkJXn=Ff27^ODXa{4neicdbvl`U~gEVDR1xhS(FGdVFQ zzBsj{v>?7DwYX%m1$Q#zhRJid^*ALO{BOuAUSN^he3qMok) delta 200 zcmdlW)hoq&nwOW00SI~(3^LYES z3l`^svC=p?7}6M1xLbIm_)~aN1yXoZ1ylG^g;Iq<>eAR!_*+<_L^>EM7^6gk88iha zZ)EIa0olCSg=r=eqv+;)EQ?tfB{w&5`ZF?$O}@mHJvo#+nQ_(Ro!olNk`4ZwKX7v} ZGP+Ox$)mxq&nP}a{wo8JDpCTP0014GEsFpE diff --git a/custom_testcases/basic_checks.py b/custom_testcases/basic_checks.py index 6e572ad..aef4c90 100644 --- a/custom_testcases/basic_checks.py +++ b/custom_testcases/basic_checks.py @@ -12,7 +12,8 @@ class StatusCode200Check(BaseAPITestCase): # 适用于所有方法和路径 (默认) # applicable_methods = None # applicable_paths_regex = None - execution_order = 10 # 示例执行顺序 + execution_order = 1 # 执行顺序 + is_critical_setup_test = True # use_llm_for_body: bool = True # use_llm_for_path_params: bool = True # use_llm_for_query_params: bool = True diff --git a/custom_testcases/compliance_catalog/error_handling/__pycache__/missing_required_field_body_case.cpython-312.pyc b/custom_testcases/compliance_catalog/error_handling/__pycache__/missing_required_field_body_case.cpython-312.pyc index 6872434818b276e89f969c197da64fe02eda85d2..2f671c008d3d082c0204da0b2fe83f69a412d859 100644 GIT binary patch delta 4483 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 P9JdWD{SHG^4%mMH2p`3h delta 5420 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 BttJ2f diff --git a/custom_testcases/compliance_catalog/error_handling/__pycache__/missing_required_field_query_case.cpython-312.pyc b/custom_testcases/compliance_catalog/error_handling/__pycache__/missing_required_field_query_case.cpython-312.pyc index a757eb1cf279ff423ec899caff1bd477a789db11..c9d10f4239664b6b8e477dc1c2ef411ae9e81805 100644 GIT binary patch delta 4167 zcma)9YgAKL7QTP%Je6?_yb4~32*LK?VN2!wz)i9!gC&Z=G5 zscl`?8MR6aovxPFR&mX=gHD}s{<)@qE>ku&V~z1{wJMmO(m^ZGqLw`3qs2jclcNlL!(vGNNtOZb&)b=gIseYZ0=~PxV~CE&?aiEw>0gs)oTY8w={WE%S%ue#x|Era!y4g>4b#px(V6B-~H9l zoI#dIj4?{i#{nEZh?XGwC!6x6L-asWL=jOPCI*t(q=6Kcjwo8GUaB*TAbLq&NfK-__We{V zMG^zrh>~9;{L_?Qvm~PIzyf>hi7eFPfG(mtW(Xo@(i71wWLVv4hkz(HWgsPz%zqb2 z;k`mnMy8OPX3B~r0W57q0j(~ghE^ZJ&5=5!5neHs;T|#L9?=;j6{Dn*hT*6{%LH2S z^v&yK`*g`NB1@+8H4Nrk}$w#b1#wgA#rAbBg4RF@2?2J{g&wLkc;guX-WO92Y$CT&CyC8dn0B5HOyBG#TK zhA4K$1?7h;FH*v*CYuF|{jq00v+7k5J;dTfL$eg>!s}1w(ornzGJmRyD_Xl*PS9A2 z)jPcRVZ+u7Pg_<**MM6larKkw@zV+6Wa8TC>FdJu_(zFXjwfEfc=zoWXD+-o`^JmY z<8LHh9=Ut^+?~spXNQk5wvZO=Y>Yke(V3Y`A8%l6VcO9Q7=$p~2eF$4%se5$P}B^#w$@fWi0|4<3m}+K4oorjyF+hIkN@$` zyT{~YJOs*wsz5=8KRteJZEtVl(%UnGf0(^^Sx%H=CB*w9S&c4EYq(%OfsB2J$LDMD zv~~jcMY$|u?68)DIpPhrGZF(B{NuUJv^_Cqj7!eT)>@$>(-2Ku7-d3IAwuOrK#-q1 ze?FZ!|K|V41Odsl2x)?#fnCbx3|Ww=#HBayo;yBs`jf=q*h3b-C!I2pKUhIn%l2kl zNCOU}vH_1FJc=GIxRWzyFHesjogV+7vaY5&arx?5Ro={^BJ)a!~uyK{Ar-$>iaaE7BMfrtelHY>U+KxcCA6E7U zIe(BZfg%1WY;Xg{=|GT|&gi)6ptK!o`EFhg)%vgxUmcu}b$k8pmTtB$o+bh64Z6DmZSEePJLv6=>mTK? zyEATBaEXMvVMOZBgW-Xeu+9#}b(XsV&t81_# zmTDDKi#{}sHeAdTOZWcGu{XBF78MQ5mnoUIQ}bg6%NhMC{n_AK{pb2)7KdnFE-tST zYa4G4%n?KrSxbS~O?9EDrTi%TR2W4+RY!veQ}rn7>Afg2_R;rgib?yLpo}K?-LCy_K6MLWP^92!3*9x$#UvGLF^~Dq3;HAJBsa8 zBZ>p?i3OsO>O;{-b)shuxTuB{7Q9-q#Xrp)(0V+y; zi=v#qCkq(dMjxO7P=IPevUsW)MKj%pB22$PgF%?CjVizbqyk3!=-nuGEB2r$tWzK{ z^@_QtBx3Fr6Ocl!>9y(;)o0hfReG*8W?CwyEfbfOjW>>0i4`0ewaE-0lo*D_MaEps z;#Rll?u6McnH3+o15xjwAfhNu8Y?LvB1aEA=u&|Po$S$lWcH;4TAk)vKniIBWutbivHr2a!*C%j%gb9ey!O4PN1h&bjBXh7jWvtq z`^850WaFWU#zW$MUgQHJ6TGDjO{JO#^>F*SlIK+6F~b)Mi9FZ3O6)4If$Ims!~Fs7 zQP?=KS&t3gjd{FP^D1nTuz5~!=Vxe_LRY$gZGl(U(R|n5B;|ATFgvM#;-4e% z|Bc|ya&dS4&1e4df;=Gl4~s{_6aIerFGRG5+K&`8Qq4%?9?DI9Bbol&Oew3#xnv=e z*}7t*(jq>!ZH_>>w_TQ9hrlcVyBEy-uzSD7SqSnt(^-J0IuBpc#QOwq!#>^-zt@y? db+aKKw~22Nj0JWhN0OG|nr|SlBp8Cm{{R9pHgW&} delta 3828 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 P2sU+m+rKavQegiNM_=k= diff --git a/custom_testcases/compliance_catalog/error_handling/__pycache__/type_mismatch_query_param_case.cpython-312.pyc b/custom_testcases/compliance_catalog/error_handling/__pycache__/type_mismatch_query_param_case.cpython-312.pyc index b79df5218e8e25055fdef214ead69a3d50cb688b..daea819a75545de7ffbaa0ea6745555157642410 100644 GIT binary patch literal 11417 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 ASpWb4 literal 16561 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 Optional[Dict[str, Any]]: - """ - Helper to get the (already $ref-resolved) request body schema from self.endpoint_spec. - """ - request_body_spec = self.endpoint_spec.get("requestBody") - if request_body_spec and isinstance(request_body_spec, dict): - content = request_body_spec.get("content", {}) - # Iterate through common JSON content types or prioritize application/json - for ct in ["application/json", "application/merge-patch+json", "*/*"]: - if ct in content: - media_type_obj = content[ct] - if isinstance(media_type_obj, dict) and isinstance(media_type_obj.get("schema"), dict): - return media_type_obj["schema"] - - # Fallback for OpenAPI 2.0 (Swagger) style 'in: body' parameter - parameters = self.endpoint_spec.get("parameters", []) - if isinstance(parameters, list): - for param in parameters: - if isinstance(param, dict) and param.get("in") == "body": - if isinstance(param.get("schema"), dict): - # Schema for 'in: body' parameter is directly usable - return param["schema"] - self.logger.debug("No suitable request body schema found in endpoint_spec.") - return None - - def _try_find_removable_body_field(self): - body_schema_to_check = self._get_request_body_schema() - - if body_schema_to_check: - self.removed_field_path = schema_utils.util_find_removable_field_path_recursive( - current_schema=body_schema_to_check, - current_path=[], - full_api_spec_for_refs=self.global_api_spec + # Use new helper methods from BaseAPITestCase + body_schema = self._get_resolved_request_body_schema() + if body_schema: + self.removed_field_path = self._find_removable_field_path( + schema_to_search=body_schema, + schema_name_for_log="request body" ) - if self.removed_field_path: - self.logger.info(f"必填字段缺失测试的目标字段 (请求体): '{'.'.join(map(str, self.removed_field_path))}'") - else: - self.logger.info('在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段。') + if not self.removed_field_path: + self.logger.info('在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段(通过基类方法)。') else: - self.logger.info('此端点规范中未定义或找到请求体 schema。') + self.logger.info('此端点规范中未定义或找到请求体 schema(通过基类方法)。') + self.removed_field_path = None def generate_query_params(self, current_query_params: Dict[str, Any]) -> Dict[str, Any]: self.logger.debug(f"{self.id} is focused on request body, generate_query_params will not modify query parameters.") @@ -85,59 +50,73 @@ class MissingRequiredFieldBodyCase(BaseAPITestCase): self.logger.error(f"使用工具方法移除请求体字段路径 '{'.'.join(map(str, self.removed_field_path))}' 失败。将返回原始请求体。") # Restore original_value_at_path to None since removal failed self.original_value_at_path = None - return current_body + return current_body def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]: results = [] if not self.removed_field_path: - # This case should ideally be caught by _try_find_removable_body_field and the test case might be skipped - # by the orchestrator if it has a mechanism to check if a test case is applicable/configurable. - # For now, the test case itself handles this. results.append(self.passed("跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。")) self.logger.info("由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。") return results - # If original_value_at_path is None AND removed_field_path is set, it might mean the removal operation - # in generate_request_body failed or the field wasn't in the provided current_body. - # This check can make the test more robust. - if self.original_value_at_path is None and self.removed_field_path: - # Check if the field was simply not present in the input `current_body` to `generate_request_body` - # This logic is tricky because `_util_remove_value_at_path` might return success=False if path DNE. - # For now, we rely on the success flag from `_util_remove_value_at_path`. - # If generate_request_body returned original_body due to failure, this validation might be misleading. - # The logger in generate_request_body should indicate the failure. - pass - - status_code = response_context.status_code json_content = response_context.json_content - expected_status_codes = [400, 422] # As per many API guidelines for client errors - specific_error_code_from_appendix_b = "4003" # Or a similar code indicating missing required field - - removed_field_str = '.'.join(map(str, self.removed_field_path)) - msg_prefix = f"当移除必填请求体字段 '{removed_field_str}' 时," + expected_http_status_codes = [400, 422] # Common client error codes + # specific_business_error_code 是此测试用例期望的特定业务错误码,例如 "4003" + # 这个值可以根据实际 API 的错误码约定在子类中调整或作为参数传入 + specific_business_error_code = "4003" + error_code_field_in_body = "code" # 响应体中业务错误码的字段名 - if status_code in expected_status_codes: - status_msg = f"{msg_prefix}API响应了预期的错误状态码 {status_code}。" - # Check for specific error code in response body if available - if json_content and isinstance(json_content, dict) and str(json_content.get("code")) == specific_error_code_from_appendix_b: - results.append(self.passed(f"{status_msg} 且响应体中包含特定的错误码 '{specific_error_code_from_appendix_b}'。")) - self.logger.info(f"正确接收到状态码 {status_code} 和错误码 '{specific_error_code_from_appendix_b}' (移除字段: body.{removed_field_str})。") - elif json_content and isinstance(json_content, dict) and "code" in json_content: - # Still pass because the HTTP status code is correct, but log a warning about the specific code - results.append(ValidationResult(passed=True, - message=f"{status_msg} 响应体中的错误码为 '{json_content.get('code')}' (期望或类似 '{specific_error_code_from_appendix_b}')。", - details={"expected_code_detail": specific_error_code_from_appendix_b, "response_body": json_content} + removed_field_str = '.'.join(map(str, self.removed_field_path)) + context_msg_prefix = f"当移除必填请求体字段 '{removed_field_str}' 时," + + http_status_ok = status_code in expected_http_status_codes + business_code_ok = False + is_4xx_error = 400 <= status_code <= 499 + + if json_content and isinstance(json_content, dict): + body_code = json_content.get(error_code_field_in_body) + if body_code is not None and str(body_code) == specific_business_error_code: + business_code_ok = True + + if http_status_ok: + if business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code} 并且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) - self.logger.warning(f"接收到状态码 {status_code},但内部错误码是 '{json_content.get('code')}' 而不是期望的 '{specific_error_code_from_appendix_b}' (移除字段: body.{removed_field_str})。此结果仍标记为通过,因状态码正确。") + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} and business code '{specific_business_error_code}' match. (Removed field: body.{removed_field_str})") else: - results.append(self.passed(f"{status_msg} 但响应体中未找到特定的错误码字段 ('code') 或响应体结构不符合预期。")) - self.logger.info(f"正确接收到状态码 {status_code},但在响应体中未找到错误码字段或预期结构 (移除字段: body.{removed_field_str})。") - else: - results.append(self.failed( - message=f"{msg_prefix}期望API返回状态码 {expected_status_codes} 中的一个,但实际收到 {status_code}。", - details={"status_code": status_code, "response_body": json_content, "removed_field": f"body.{removed_field_str}"} + # HTTP status is OK, but business code is not what we specifically hoped for (or not present). + # Still considered a pass because the primary condition (HTTP status) is met. + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code}. " + f"响应体中的业务错误码 (\'{error_code_field_in_body}\': \'{json_content.get(error_code_field_in_body)}\') 与特定期望 \'{specific_business_error_code}\' 不符或未找到,但HTTP状态码正确。" + )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} is correct. Business code mismatch/missing (Expected: \'{specific_business_error_code}\', Got: \'{json_content.get(error_code_field_in_body)}\'). (Removed field: body.{removed_field_str})") + + elif business_code_ok: + # HTTP status was not in the primary list, but it's a 4xx and the business code matches. + results.append(self.passed( + f"{context_msg_prefix}API响应了状态码 {status_code} (非主要预期HTTP状态 {expected_http_status_codes},但为4xx客户端错误), " + f"且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) - self.logger.warning(f"必填请求体字段缺失测试失败:期望状态码 {expected_status_codes},实际为 {status_code} (移除字段: body.{removed_field_str})。") + self.logger.info(f"{self.id}: Passed (Fallback). HTTP status {status_code} (4xx) with matching business code '{specific_business_error_code}'. (Removed field: body.{removed_field_str})") + + else: + # Neither condition for passing was met. + fail_message = f"{context_msg_prefix}期望API返回状态码在 {expected_http_status_codes} 中,或返回4xx客户端错误且业务码为 '{specific_business_error_code}'." + fail_message += f" 实际收到状态码 {status_code}." + if json_content and isinstance(json_content, dict): + fail_message += f" 响应体中的业务码 (\'{error_code_field_in_body}\') 为 \'{json_content.get(error_code_field_in_body)}\'." + elif json_content: + fail_message += " 响应体不是一个JSON对象." + else: + fail_message += " 响应体为空或非JSON." + + results.append(self.failed( + message=fail_message, + details={"status_code": status_code, "response_body": json_content, "expected_http_status_codes": expected_http_status_codes, "expected_business_code": specific_business_error_code, "removed_field": f"body.{removed_field_str}"} + )) + self.logger.warning(f"{self.id}: Failed. {fail_message} (Removed field: body.{removed_field_str})") return results \ No newline at end of file diff --git a/custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py b/custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py index 7c4c31a..2b35f0c 100644 --- a/custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py +++ b/custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py @@ -11,23 +11,20 @@ class MissingRequiredFieldQueryCase(BaseAPITestCase): execution_order = 211 # After body, before original combined one might have been def __init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any], json_schema_validator: Optional[Any] = None, llm_service: Optional[Any] = None): - super().__init__(endpoint_spec, global_api_spec, json_schema_validator=json_schema_validator, llm_service=llm_service) + super().__init__(endpoint_spec, global_api_spec, json_schema_validator, llm_service=llm_service) self.target_param_name: Optional[str] = None + # Location is always 'query' for this class + self.target_param_location: str = "query" + self.original_query_params: Optional[Dict[str, Any]] = None + + # Call the simplified method to find the target parameter self._try_find_removable_query_param() self.logger.info(f"测试用例 {self.id} ({self.name}) 已针对端点 '{self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')}' 初始化。Target param to remove: {self.target_param_name}") def _try_find_removable_query_param(self): - query_params_spec_list = self.endpoint_spec.get("parameters", []) - if query_params_spec_list: - self.logger.debug(f"检查查询参数的必填字段,总共 {len(query_params_spec_list)} 个参数定义。") - for param_spec in query_params_spec_list: - if isinstance(param_spec, dict) and param_spec.get("in") == "query" and param_spec.get("required") is True: - field_name = param_spec.get("name") - if field_name: - self.target_param_name = field_name - self.logger.info(f"必填字段缺失测试的目标字段 (查询参数): '{self.target_param_name}'") - return - self.logger.info('在此端点规范中未找到可用于测试 "必填查询参数缺失" 的字段。') + """Uses the base class helper to find a required query parameter.""" + self.target_param_name = self._find_required_parameter_name("query") + # Logging about success/failure is handled by the base class method and the __init__ method. def generate_request_body(self, current_body: Optional[Any]) -> Optional[Any]: # This test case focuses on query parameters, so it does not modify the request body. @@ -55,31 +52,55 @@ class MissingRequiredFieldQueryCase(BaseAPITestCase): status_code = response_context.status_code json_content = response_context.json_content - - expected_status_codes = [400, 422] - specific_error_code_from_appendix_b = "4003" + expected_http_status_codes = [400, 422] + specific_business_error_code = "4003" + error_code_field_in_body = "code" - msg_prefix = f"当移除必填查询参数 '{self.target_param_name}' 时," + context_msg_prefix = f"当移除必填查询参数 '{self.target_param_name}' 时," - if status_code in expected_status_codes: - status_msg = f"{msg_prefix}API响应了预期的错误状态码 {status_code}。" - if json_content and isinstance(json_content, dict) and str(json_content.get("code")) == specific_error_code_from_appendix_b: - results.append(self.passed(f"{status_msg} 且响应体中包含特定的错误码 '{specific_error_code_from_appendix_b}'。")) - self.logger.info(f"正确接收到状态码 {status_code} 和错误码 '{specific_error_code_from_appendix_b}'。") - elif json_content and isinstance(json_content, dict) and "code" in json_content: - results.append(ValidationResult(passed=True, - message=f"{status_msg} 响应体中的错误码为 '{json_content.get('code')}' (期望或类似 '{specific_error_code_from_appendix_b}')。", - details=json_content + http_status_ok = status_code in expected_http_status_codes + business_code_ok = False + is_4xx_error = 400 <= status_code <= 499 + + if json_content and isinstance(json_content, dict): + body_code = json_content.get(error_code_field_in_body) + if body_code is not None and str(body_code) == specific_business_error_code: + business_code_ok = True + + if http_status_ok: + if business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code} 并且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) - self.logger.warning(f"接收到状态码 {status_code},但错误码是 '{json_content.get('code')}' 而不是期望的 '{specific_error_code_from_appendix_b}'。此结果仍标记为通过,因状态码正确。") + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} and business code '{specific_business_error_code}' match. (Removed query param: {self.target_param_name})") else: - results.append(self.passed(f"{status_msg} 但响应体中未找到特定的错误码字段或响应体结构不符合预期。")) - self.logger.info(f"正确接收到状态码 {status_code},但在响应体中未找到错误码字段或预期结构。") - else: - results.append(self.failed( - message=f"{msg_prefix}期望API返回状态码 {expected_status_codes} 中的一个,但实际收到 {status_code}。", - details={"status_code": status_code, "response_body": json_content, "removed_field": f"query.{self.target_param_name}"} + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code}. " + f"响应体中的业务错误码 (\'{error_code_field_in_body}\': \'{json_content.get(error_code_field_in_body)}\') 与特定期望 \'{specific_business_error_code}\' 不符或未找到,但HTTP状态码正确。" + )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} is correct. Business code mismatch/missing (Expected: \'{specific_business_error_code}\', Got: \'{json_content.get(error_code_field_in_body)}\'). (Removed query param: {self.target_param_name})") + + elif business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了状态码 {status_code} (非主要预期HTTP状态 {expected_http_status_codes},但为4xx客户端错误), " + f"且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) - self.logger.warning(f"必填查询参数缺失测试失败:期望状态码 {expected_status_codes},实际为 {status_code}。移除的参数:'{self.target_param_name}'") + self.logger.info(f"{self.id}: Passed (Fallback). HTTP status {status_code} (4xx) with matching business code '{specific_business_error_code}'. (Removed query param: {self.target_param_name})") + + else: + fail_message = f"{context_msg_prefix}期望API返回状态码在 {expected_http_status_codes} 中,或返回4xx客户端错误且业务码为 '{specific_business_error_code}'." + fail_message += f" 实际收到状态码 {status_code}." + if json_content and isinstance(json_content, dict): + fail_message += f" 响应体中的业务码 (\'{error_code_field_in_body}\') 为 \'{json_content.get(error_code_field_in_body)}\'." + elif json_content: + fail_message += " 响应体不是一个JSON对象." + else: + fail_message += " 响应体为空或非JSON." + + results.append(self.failed( + message=fail_message, + details={"status_code": status_code, "response_body": json_content, "expected_http_status_codes": expected_http_status_codes, "expected_business_code": specific_business_error_code, "removed_param": f"query.{self.target_param_name}"} + )) + self.logger.warning(f"{self.id}: Failed. {fail_message} (Removed query param: {self.target_param_name})") return results \ No newline at end of file diff --git a/custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py b/custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py index 4f76dfc..24668c3 100644 --- a/custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py +++ b/custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py @@ -1,7 +1,8 @@ -from typing import Dict, Any, Optional, List +from typing import Dict, Any, Optional, List, Union from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext import copy import logging +from ddms_compliance_suite.utils import schema_utils class TypeMismatchBodyCase(BaseAPITestCase): id = "TC-ERROR-4001-BODY" @@ -25,317 +26,119 @@ class TypeMismatchBodyCase(BaseAPITestCase): self._try_find_mismatch_target_in_body() def _try_find_mismatch_target_in_body(self): - self.logger.critical(f"{self.id} __INIT__ >>> STARTED") - self.logger.debug(f"开始为端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 初始化请求体类型不匹配测试的目标字段查找。") - - body_schema_to_check: Optional[Dict[str, Any]] = None - - # 优先尝试从顶层 'requestBody' (OpenAPI 3.0 style) 获取 schema - request_body_spec = self.endpoint_spec.get("requestBody") - if request_body_spec and isinstance(request_body_spec, dict): - content = request_body_spec.get("content", {}) - json_schema_entry = content.get("application/json") # 或者其他相关mime-type - if json_schema_entry and isinstance(json_schema_entry, dict) and isinstance(json_schema_entry.get("schema"), dict): - body_schema_to_check = json_schema_entry["schema"] - self.logger.debug(f"从顶层 'requestBody' 中获取到 schema: {list(body_schema_to_check.keys())}") - - # 如果顶层 'requestBody' 未提供有效 schema,则尝试从 'parameters' 列表 (Swagger 2.0 style for 'in: body') 查找 - if not body_schema_to_check: - self.logger.debug(f"未从顶层 'requestBody' 找到 schema,尝试从 'parameters' 列表查找 'in: body' 参数。") - parameters = self.endpoint_spec.get("parameters", []) - if isinstance(parameters, list): - for param in parameters: - if isinstance(param, dict) and param.get("in") == "body": - if isinstance(param.get("schema"), dict): - body_schema_to_check = param["schema"] - self.logger.debug(f"从 'parameters' 列表中找到 'in: body' 参数的 schema: {list(body_schema_to_check.keys())}") - break # 找到第一个 'in: body' 参数即可 - else: - self.logger.warning(f"找到 'in: body' 参数 '{param.get('name', 'N/A')}',但其 'schema' 字段无效或缺失。") - else: - self.logger.warning("'parameters' 字段不是列表或不存在。") + self.logger.info(f"[{self.id}] Initializing: Looking for a simple type field in request body for type mismatch test.") + body_schema_to_check = self._get_resolved_request_body_schema() if body_schema_to_check: - self.logger.debug(f"最终用于检查的请求体 schema: {list(body_schema_to_check.keys())}") - if self._find_target_field_in_schema(body_schema_to_check, base_path_for_log=""): # base_path_for_log 为空字符串代表 schema 的根 - self.logger.info(f"类型不匹配测试的目标字段(请求体): {'.'.join(str(p) for p in self.target_field_path) if self.target_field_path else 'N/A'},原始类型: {self.original_field_type}") + found_target = self._find_simple_type_field_in_schema(body_schema_to_check, "request body") + if found_target: + self.target_field_path, self.original_field_type, self.target_field_schema = found_target + self.logger.info(f"[{self.id}] Target field for type mismatch (body): {'.'.join(map(str, self.target_field_path))}, Original Type: {self.original_field_type}") else: - self.logger.debug(f"在提供的请求体 schema ({list(body_schema_to_check.keys())}) 中未找到适合类型不匹配测试的字段。") + self.logger.info(f"[{self.id}] No suitable simple type field found in request body schema for type mismatch test.") else: - self.logger.debug("在此端点规范中未找到有效的请求体 schema 定义 (无论是通过 'requestBody' 还是 'parameters' in:body)。") + self.logger.info(f"[{self.id}] No request body schema found for endpoint. Skipping type mismatch target search.") if not self.target_field_path: - self.logger.info(f"最终,在端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 的请求体中,均未找到可用于测试类型不匹配的字段。") - - def _resolve_ref_if_present(self, schema_to_resolve: Dict[str, Any]) -> Dict[str, Any]: - # 根据用户进一步要求,方法体简化为直接返回,不进行任何 $ref/$ $$ref 的检查。 - # self.logger.debug(f"_resolve_ref_if_present called. Returning schema as-is per new configuration.") - return schema_to_resolve - - def _find_target_field_in_schema(self, schema_to_search: Dict[str, Any], base_path_for_log: str) -> bool: - """ - Recursively searches for a simple type field (string, integer, number, boolean) within a schema. - Sets self.target_field_path, self.original_field_type, and self.target_field_schema if found. - base_path_for_log is used to build the full path for logging. - Returns True if a field is found, False otherwise. - """ - self.logger.debug(f"Enter _find_target_field_in_schema for base_path: '{base_path_for_log}', schema_to_search keys: {list(schema_to_search.keys()) if isinstance(schema_to_search, dict) else 'Not a dict'}") - resolved_schema = self._resolve_ref_if_present(schema_to_search) - - if not isinstance(resolved_schema, dict): - self.logger.debug(f"_find_target_field_in_schema: Schema at '{base_path_for_log}' is not a dict after resolution. Schema: {resolved_schema}") - return False - - schema_type = resolved_schema.get("type") - self.logger.debug(f"Path: '{base_path_for_log}', Resolved Schema Type: '{schema_type}', Keys: {list(resolved_schema.keys())}") - - if schema_type == "object": - properties = resolved_schema.get("properties", {}) - self.logger.debug(f"Path: '{base_path_for_log}', Type is 'object'. Checking properties: {list(properties.keys())}") - for name, prop_schema_orig in properties.items(): - current_path_str = f"{base_path_for_log}.{name}" if base_path_for_log else name - self.logger.debug(f"Path: '{current_path_str}', Property Schema (Original): {prop_schema_orig}") - prop_schema_resolved = self._resolve_ref_if_present(prop_schema_orig) - self.logger.debug(f"Path: '{current_path_str}', Property Schema (Resolved): {prop_schema_resolved}") - - if not isinstance(prop_schema_resolved, dict): - self.logger.debug(f"Path: '{current_path_str}', Resolved schema is not a dict. Skipping.") - continue - - prop_type = prop_schema_resolved.get("type") - self.logger.debug(f"Path: '{current_path_str}', Resolved Property Type: '{prop_type}'") - - if prop_type in ["string", "integer", "number", "boolean"]: - # Construct path relative to the initial body schema - path_parts = base_path_for_log.split('.') if base_path_for_log else [] - if path_parts == ['']: path_parts = [] # Handle initial empty base_path - self.target_field_path = path_parts + [name] - self.original_field_type = prop_type - self.target_field_schema = prop_schema_resolved - self.logger.info(f"目标字段(请求体): '{current_path_str}' (原始类型: '{prop_type}') FOUND!") - return True - elif prop_type == "object": - self.logger.debug(f"Path: '{current_path_str}', Type is 'object'. Recursing...") - if self._find_target_field_in_schema(prop_schema_resolved, current_path_str): - return True - self.logger.debug(f"Path: '{current_path_str}', Recursion for object did not find target.") - elif prop_type == "array": - self.logger.debug(f"Path: '{current_path_str}', Type is 'array'. Inspecting items...") - items_schema = prop_schema_resolved.get("items") - if isinstance(items_schema, dict): - self.logger.debug(f"Path: '{current_path_str}', Array items schema is a dict. Resolving and checking item type.") - items_schema_resolved = self._resolve_ref_if_present(items_schema) - item_type = items_schema_resolved.get("type") - self.logger.debug(f"Path: '{current_path_str}[*]', Resolved Item Type: '{item_type}'") - if item_type in ["string", "integer", "number", "boolean"]: - path_parts = base_path_for_log.split('.') if base_path_for_log else [] - if path_parts == ['']: path_parts = [] - self.target_field_path = path_parts + [name, 0] # Path like field.array_field.0 - self.original_field_type = item_type - self.target_field_schema = items_schema_resolved # schema for the item, not the array - self.logger.info(f"目标字段(请求体 - 数组内简单类型): '{current_path_str}[0]' (原始类型: '{item_type}') FOUND!") - return True - elif item_type == "object": - self.logger.debug(f"Path: '{current_path_str}[*]', Item type is 'object'. Recursing into array item schema...") - # Path for recursion: current_path_str + ".0" (representing first item) - if self._find_target_field_in_schema(items_schema_resolved, f"{current_path_str}.0"): - # self.target_field_path would be set by recursive call. - # The path logic in _find_target_field_in_schema needs to correctly prepend array index if it comes from array item recursion. - # Let's ensure the path construction at "FOUND!" handles this. - # If current_path_str was "field.array.0" and recursion found "nested_prop", - # the path should become "field.array.0.nested_prop". - # The recursive call sets target_field_path starting from its base_path_for_log. - # So if base_path_for_log was "field.array.0", and it found "item_prop", - # self.target_field_path will be ["field", "array", 0, "item_prop"]. This seems correct. - self.logger.info(f"目标字段(请求体 - 数组内对象属性) found via recursion from '{current_path_str}.0'") - return True - self.logger.debug(f"Path: '{current_path_str}[*]', Recursion for array item object did not find target.") - else: - self.logger.debug(f"Path: '{current_path_str}[*]', Item type '{item_type}' is not simple or object.") - else: - self.logger.debug(f"Path: '{current_path_str}', Array items schema is not a dict or missing. Items: {items_schema}") - else: - self.logger.debug(f"Path: '{current_path_str}', Property type '{prop_type}' is not a simple type, object, or array. Skipping further processing for this property.") - elif schema_type == "array": - self.logger.debug(f"Path: '{base_path_for_log}', Top-level schema type is 'array'. Inspecting items...") - items_schema = resolved_schema.get("items") - if isinstance(items_schema, dict): - items_schema_resolved = self._resolve_ref_if_present(items_schema) - item_type = items_schema_resolved.get("type") - self.logger.debug(f"Path: '{base_path_for_log}[*]', Resolved Item Type: '{item_type}'") - if item_type in ["string", "integer", "number", "boolean"]: - # This means the body itself is an array of simple types. - # We target the first item. Path will be [0] if base_path_for_log is empty. - path_parts = base_path_for_log.split('.') if base_path_for_log else [] - if path_parts == ['']: path_parts = [] - # If base_path_for_log is empty (root schema is array), path is just [0] - # If base_path_for_log is "field.array_prop", this case shouldn't be hit here, but in object prop loop. - # This branch is for when the *entire request body schema* is an array. - self.target_field_path = path_parts + [0] # if root is array, path_parts is [], so path is [0] - self.original_field_type = item_type - self.target_field_schema = items_schema_resolved - self.logger.info(f"目标字段(请求体 - 根为简单类型数组): '{base_path_for_log}[0]' (原始类型: '{item_type}') FOUND!") - return True - elif item_type == "object": - self.logger.debug(f"Path: '{base_path_for_log}[*]', Item type is 'object'. Recursing into root array item schema...") - # Path for recursion: base_path_for_log + ".0" or just "0" if base_path is empty - new_base_path = f"{base_path_for_log}.0" if base_path_for_log else "0" - if self._find_target_field_in_schema(items_schema_resolved, new_base_path): - self.logger.info(f"目标字段(请求体 - 根为对象数组,属性在对象内) found via recursion from '{new_base_path}'") - return True - self.logger.debug(f"Path: '{base_path_for_log}[*]', Recursion for root array item object did not find target.") - else: - self.logger.debug(f"Path: '{base_path_for_log}[*]', Item type '{item_type}' is not simple or object.") - else: - self.logger.debug(f"Path: '{base_path_for_log}', Root array items schema is not a dict or missing. Items: {items_schema}") - else: - self.logger.debug(f"Path: '{base_path_for_log}', Schema type is '{schema_type}', not 'object' or 'array'. Cannot find properties here.") - - - self.logger.debug(f"Exit _find_target_field_in_schema for base_path: '{base_path_for_log if base_path_for_log else 'root'}'. Target NOT found in this path.") - return False + self.logger.info(f"[{self.id}] Conclusion: No target field identified for request body type mismatch test.") def generate_query_params(self, current_query_params: Dict[str, Any]) -> Dict[str, Any]: self.logger.debug(f"{self.id} is focused on request body, generate_query_params will not modify query parameters.") return current_query_params def generate_request_body(self, current_body: Optional[Any]) -> Optional[Any]: - if not self.target_field_path: # target_field_location is always "body" + if not self.target_field_path or not self.original_field_type: + self.logger.info(f"[{self.id}] No target field or original type identified for body type mismatch. Skipping body modification.") return current_body - self.logger.debug(f"准备修改请求体以测试类型不匹配。目标路径: {self.target_field_path}, 原始类型: {self.original_field_type}") + self.logger.debug(f"[{self.id}] Preparing to modify request body for type mismatch. Target path: {self.target_field_path}, Original type: {self.original_field_type}") - modified_body = copy.deepcopy(current_body) if current_body is not None else {} - - # Ensure body is a dict if path is not empty, or if it's empty and body is None, init to {} - if self.target_field_path and not isinstance(modified_body, dict): - if not modified_body and not self.target_field_path[0]: # Path is effectively root, and body is None/empty - modified_body = {} # Initialize if targeting root of an empty body - else: - self.logger.warning(f"请求体不是字典类型 (is {type(modified_body)}),但目标字段路径为 {self.target_field_path}。无法安全应用修改。") - return current_body - elif not self.target_field_path and not modified_body: # No path (targeting root) and body is None - self.logger.warning(f"目标字段路径为空 (表示根对象) 但当前请求体也为空,无法确定如何修改。") - return current_body + # Get the original value at path for logging/context if needed (optional) + # current_val_at_path, _ = schema_utils.util_get_value_at_path(current_body, self.target_field_path) # Assuming a get_value_at_path util exists or is added + # For now, we don't strictly need original_value for generate_mismatched_value, but it takes it as an arg. + mismatched_value = schema_utils.generate_mismatched_value( + original_type=self.original_field_type, + original_value=None, # Placeholder, as current generate_mismatched_value doesn't use it heavily yet + field_schema=self.target_field_schema, + logger_param=self.logger + ) - temp_obj_ref = modified_body - try: - for i, key_or_index in enumerate(self.target_field_path): - is_last_part = (i == len(self.target_field_path) - 1) - - if isinstance(key_or_index, int): # Array index - if not isinstance(temp_obj_ref, list) or key_or_index >= len(temp_obj_ref): - self.logger.warning(f"路径 {self.target_field_path[:i+1]} 指向数组索引,但当前对象不是列表或索引 ({key_or_index}) 越界 (len: {len(temp_obj_ref) if isinstance(temp_obj_ref, list) else 'N/A'})。") - # Attempt to create list/elements if they don't exist up to this point (for safety, only if current is None or empty list) - if isinstance(temp_obj_ref, list) and key_or_index == 0 and not temp_obj_ref: # Empty list, trying to set first element - temp_obj_ref.append({}) # Add a dict placeholder for the first element - elif temp_obj_ref is None and key_or_index == 0: # If parent was None, can't proceed here unless path logic is very robust for creation - return current_body # Cannot proceed - else: - return current_body # Cannot proceed + self.logger.info(f"[{self.id}] Generated mismatched value '{mismatched_value}' for original type '{self.original_field_type}' at path '{'.'.join(map(str, self.target_field_path))}'.") - if is_last_part: - original_value = temp_obj_ref[key_or_index] - new_value = self._get_mismatched_value(self.original_field_type, original_value, self.target_field_schema) - self.logger.info(f"在路径 {self.target_field_path} (数组索引 {key_or_index}) 处,将值从 '{original_value}' 修改为 '{new_value}' (原始类型: {self.original_field_type})") - temp_obj_ref[key_or_index] = new_value - else: - temp_obj_ref = temp_obj_ref[key_or_index] - - elif isinstance(temp_obj_ref, dict): # Dictionary key - if key_or_index not in temp_obj_ref and not is_last_part: - self.logger.debug(f"路径 {self.target_field_path[:i+1]} 中的键 '{key_or_index}' 在当前对象中不存在,将创建它。") - temp_obj_ref[key_or_index] = {} # Create path if not exists - - if is_last_part: - original_value = temp_obj_ref.get(key_or_index) - new_value = self._get_mismatched_value(self.original_field_type, original_value, self.target_field_schema) - self.logger.info(f"在路径 {self.target_field_path} (键 '{key_or_index}') 处,将值从 '{original_value}' 修改为 '{new_value}' (原始类型: {self.original_field_type})") - temp_obj_ref[key_or_index] = new_value - else: - temp_obj_ref = temp_obj_ref[key_or_index] - if temp_obj_ref is None and not is_last_part: - self.logger.warning(f"路径 {self.target_field_path[:i+1]} 的值在深入时变为None。创建空字典继续。") - # This part is tricky, if temp_obj_ref was a key in parent, parent[key_or_index] is None. - # We need to set parent[key_or_index] = {} and then temp_obj_ref = parent[key_or_index] - # This requires knowing the parent. Let's simplify: if it becomes None, we might not be able to proceed unless it's the dict itself. - # The current logic `temp_obj_ref = temp_obj_ref[key_or_index]` means if `temp_obj_ref` was `obj[key]`, now `temp_obj_ref` IS `obj[key]`s value. - # If this value is None, and we are not at the end, we should create a dict there if the next part of path is a string key. - # This modification is done in the check `if key_or_index not in temp_obj_ref and not is_last_part:` - # If it's None AFTER that, it means the schema might be complex (e.g. anyOf, oneOf) or data is unexpectedly null. - # For robustness, if it's None and not the last part, we can assume we need a dict for the next key. - # The path creation `temp_obj_ref[key_or_index] = {}` for the *next* key happens at the start of the loop for that next key. - pass # Already handled by creation logic at the start of the loop iteration for the next key - else: - self.logger.warning(f"尝试访问路径 {self.target_field_path[:i+1]} 时,当前对象 ({type(temp_obj_ref)}) 不是字典或列表。") - return current_body + modified_body, success = schema_utils.util_set_value_at_path( + data_container=current_body, + path=self.target_field_path, + new_value=mismatched_value + ) - except Exception as e: - self.logger.error(f"在根据路径 {self.target_field_path} 修改请求体时发生错误: {e}", exc_info=True) + if success: + self.logger.debug(f"[{self.id}] Successfully set mismatched value at path using util_set_value_at_path.") + return modified_body + else: + self.logger.error(f"[{self.id}] Failed to set mismatched value at path using util_set_value_at_path. Returning original body.") return current_body - return modified_body - - def _get_mismatched_value(self, original_type: Optional[str], original_value: Any, field_schema: Optional[Dict[str, Any]]) -> Any: - if original_type == "string": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if 123 not in field_schema["enum"]: return 123 - if False not in field_schema["enum"]: return False - return 12345 - elif original_type == "integer": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-an-integer" not in field_schema["enum"]: return "not-an-integer" - if 3.14 not in field_schema["enum"]: return 3.14 - return "not-an-integer" - elif original_type == "number": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-a-number" not in field_schema["enum"]: return "not-a-number" - return "not-a-number" - elif original_type == "boolean": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-a-boolean" not in field_schema["enum"]: return "not-a-boolean" - if 1 not in field_schema["enum"]: return 1 - return "not-a-boolean" - elif original_type == "array": - return {"value": "not-an-array"} - elif original_type == "object": - return ["not", "an", "object"] - - self.logger.warning(f"类型不匹配测试(请求体):原始类型 '{original_type}' 未知或无法生成不匹配值,将返回固定字符串 'mismatch_test'。") - return "mismatch_test" # Fallback - def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]: results = [] + if not self.target_field_path: + self.logger.info(f"[{self.id}] Skipped type mismatch (body) validation: No target field was identified.") + return [self.passed("跳过测试:在请求体中未找到合适的字段来测试类型不匹配。")] + status_code = response_context.status_code json_content = response_context.json_content + expected_http_status_codes = [400, 422] # Common client error codes for type issues + # specific_business_error_code 是此测试用例期望的特定业务错误码,例如 "4001" + specific_business_error_code = "4001" + error_code_field_in_body = "code" # 响应体中业务错误码的字段名 - if not self.target_field_path: - results.append(self.passed("跳过测试:在请求体中未找到合适的字段来测试类型不匹配。")) - self.logger.info(f"{self.id}: 由于未识别到目标请求体字段,跳过类型不匹配测试。") - return results + field_path_str = '.'.join(map(str, self.target_field_path)) + context_msg_prefix = f"当请求体字段 '{field_path_str}' 类型不匹配时," - expected_status_codes = [400, 422] - specific_error_code_from_appendix_b = "4001" # Example + http_status_ok = status_code in expected_http_status_codes + business_code_ok = False + is_4xx_error = 400 <= status_code <= 499 - if status_code in expected_status_codes: - msg = f"API对请求体字段 '{'.'.join(str(p) for p in self.target_field_path)}' 的类型不匹配响应了 {status_code},符合预期。" - error_code_in_response = json_content.get("code") if isinstance(json_content, dict) else None - if error_code_in_response == specific_error_code_from_appendix_b: - results.append(self.passed(f"{msg} 并成功接收到特定错误码 '{specific_error_code_from_appendix_b}'。")) - elif error_code_in_response: - results.append(ValidationResult(passed=True, - message=f"{msg} 但响应体中的错误码是 '{error_code_in_response}' (期望类似 '{specific_error_code_from_appendix_b}')。", - details=json_content if isinstance(json_content, dict) else {"raw_response": str(json_content)} + if json_content and isinstance(json_content, dict): + body_code = json_content.get(error_code_field_in_body) + if body_code is not None and str(body_code) == specific_business_error_code: + business_code_ok = True + + if http_status_ok: + if business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code} 并且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} and business code '{specific_business_error_code}' match. (Field: body.{field_path_str})") else: - results.append(self.passed(f"{msg} 响应体中未找到错误码或结构不符合预期。")) - else: - results.append(self.failed( - message=f"对请求体字段 '{'.'.join(str(p) for p in self.target_field_path)}' 的类型不匹配测试期望状态码为 {expected_status_codes} 之一,但收到 {status_code}。", - details={"status_code": status_code, "response_body": json_content} + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code}. " + f"响应体中的业务错误码 (\'{error_code_field_in_body}\': \'{json_content.get(error_code_field_in_body)}\') 与特定期望 \'{specific_business_error_code}\' 不符或未找到,但HTTP状态码正确。" + )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} is correct. Business code mismatch/missing (Expected: \'{specific_business_error_code}\', Got: \'{json_content.get(error_code_field_in_body)}\'). (Field: body.{field_path_str})") + + elif business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了状态码 {status_code} (非主要预期HTTP状态 {expected_http_status_codes},但为4xx客户端错误), " + f"且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) - self.logger.warning(f"{self.id}: 类型不匹配测试失败。字段: body.{'.'.join(str(p) for p in self.target_field_path)}, 期望状态码: {expected_status_codes}, 实际: {status_code}。") + self.logger.info(f"{self.id}: Passed (Fallback). HTTP status {status_code} (4xx) with matching business code '{specific_business_error_code}'. (Field: body.{field_path_str})") + + else: + fail_message = f"{context_msg_prefix}期望API返回状态码在 {expected_http_status_codes} 中,或返回4xx客户端错误且业务码为 '{specific_business_error_code}'." + fail_message += f" 实际收到状态码 {status_code}." + if json_content and isinstance(json_content, dict): + fail_message += f" 响应体中的业务码 (\'{error_code_field_in_body}\') 为 \'{json_content.get(error_code_field_in_body)}\'." + elif json_content: + fail_message += " 响应体不是一个JSON对象." + else: + fail_message += " 响应体为空或非JSON." + + results.append(self.failed( + message=fail_message, + details={"status_code": status_code, "response_body": json_content, "expected_http_status_codes": expected_http_status_codes, "expected_business_code": specific_business_error_code, "mismatched_field": f"body.{field_path_str}"} + )) + self.logger.warning(f"{self.id}: Failed. {fail_message} (Field: body.{field_path_str})") return results \ No newline at end of file diff --git a/custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py b/custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py index cb40e54..dc8d1a1 100644 --- a/custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py +++ b/custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py @@ -1,7 +1,8 @@ -from typing import Dict, Any, Optional, List +from typing import Dict, Any, Optional, List, Tuple, Union from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext import copy import logging +from ddms_compliance_suite.utils import schema_utils class TypeMismatchQueryParamCase(BaseAPITestCase): id = "TC-ERROR-4001-QUERY" @@ -19,220 +20,128 @@ class TypeMismatchQueryParamCase(BaseAPITestCase): # Location is always 'query' for this class self.target_field_location: str = "query" self.target_field_schema: Optional[Dict[str, Any]] = None + self.target_param_name: Optional[str] = None + self.json_schema_validator = json_schema_validator self.original_value_at_path: Any = None self.mismatched_value: Any = None # 调用新方法来查找目标字段 self._try_find_mismatch_target_in_query() - self.logger.critical(f"{self.id} __INIT__ >>> STARTED") - self.logger.debug(f"开始为端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 初始化查询参数类型不匹配测试的目标字段查找。") - - parameters = self.endpoint_spec.get("parameters", []) - self.logger.critical(f"{self.id} __INIT__ >>> Parameters to be processed: {parameters}") - self.logger.debug(f"传入的参数列表 (在 {self.id}中): {parameters}") - - for param_spec in parameters: - if param_spec.get("in") == "query": - param_name = param_spec.get("name") - if not param_name: - self.logger.warning("发现一个没有名称的查询参数定义,已跳过。") - continue - - self.logger.debug(f"检查查询参数: '{param_name}'") - - param_type = param_spec.get("type") - param_schema = param_spec.get("schema") - - # Scenario 1: Simple type directly in param_spec (e.g., type: string) - if param_type in ["string", "number", "integer", "boolean"]: - self.target_field_path = [param_name] - self.original_field_type = param_type - self.target_field_schema = param_spec - self.logger.info(f"目标字段(查询参数 - 简单类型): {param_name},原始类型: {self.original_field_type}") - break - # Scenario 2: Schema defined for the query parameter (OpenAPI 3.0 style, or complex objects in query) - elif isinstance(param_schema, dict): - self.logger.debug(f"查询参数 '{param_name}' 包含嵌套 schema,尝试在其内部查找简单类型字段。") - # We need to find a simple type *within* this schema. - # _find_target_field_in_schema is designed for requestBody, let's adapt or simplify. - # For query parameters, complex objects are less common or might be flattened. - # Let's try to find a simple type property directly within this schema if it's an object. - resolved_param_schema = self._resolve_ref_if_present(param_schema) - if resolved_param_schema.get("type") == "object": - properties = resolved_param_schema.get("properties", {}) - for prop_name, prop_details_orig in properties.items(): - prop_details = self._resolve_ref_if_present(prop_details_orig) - if prop_details.get("type") in ["string", "number", "integer", "boolean"]: - self.target_field_path = [param_name, prop_name] # Path will be param_name.prop_name - self.original_field_type = prop_details.get("type") - self.target_field_schema = prop_details - self.logger.info(f"目标字段(查询参数 - 对象属性): {param_name}.{prop_name},原始类型: {self.original_field_type}") - break # Found a suitable property - if self.target_field_path: break # Break outer loop if found - elif resolved_param_schema.get("type") in ["string", "number", "integer", "boolean"]: # Schema itself is simple after ref resolution - self.target_field_path = [param_name] - self.original_field_type = resolved_param_schema.get("type") - self.target_field_schema = resolved_param_schema - self.logger.info(f"目标字段(查询参数 - schema为简单类型): {param_name},原始类型: {self.original_field_type}") - break - - else: - self.logger.debug(f"查询参数 '{param_name}' (type: {param_type}, schema: {param_schema}) 不是直接的简单类型,也无直接可用的对象型 schema 属性。") - - if not self.target_field_path: - self.logger.info(f"最终,在端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 的查询参数中,均未找到可用于测试类型不匹配的字段。") - def _try_find_mismatch_target_in_query(self): - self.logger.critical(f"{self.id} _try_find_mismatch_target_in_query >>> STARTED") - self.logger.debug(f"开始为端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 初始化查询参数类型不匹配测试的目标字段查找。") + self.logger.info(f"[{self.id}] Initializing: Looking for a simple type query parameter for type mismatch test.") + + found_target_param = self._find_first_simple_type_parameter(param_location="query") - parameters = self.endpoint_spec.get("parameters", []) - self.logger.critical(f"{self.id} _try_find_mismatch_target_in_query >>> Parameters to be processed: {parameters}") - self.logger.debug(f"传入的参数列表 (在 {self.id}中): {parameters}") + if found_target_param: + full_path, param_type, param_schema, top_level_param_name = found_target_param + self.target_field_path = full_path + self.original_field_type = param_type + self.target_field_schema = param_schema + self.target_param_name = top_level_param_name # Store the top-level parameter name + self.logger.info(f"[{self.id}] Target for type mismatch (query): Param='{self.target_param_name}', Path='{'.'.join(map(str,self.target_field_path))}', Type='{self.original_field_type}'") + else: + self.logger.info(f"[{self.id}] No suitable simple type query parameter found for type mismatch test.") - for param_spec in parameters: - if param_spec.get("in") == "query": - param_name = param_spec.get("name") - if not param_name: - self.logger.warning("发现一个没有名称的查询参数定义,已跳过。") - continue - - self.logger.debug(f"检查查询参数: '{param_name}'") - - param_type = param_spec.get("type") - param_schema = param_spec.get("schema") - - # Scenario 1: Simple type directly in param_spec (e.g., type: string) - if param_type in ["string", "number", "integer", "boolean"]: - self.target_field_path = [param_name] - self.original_field_type = param_type - self.target_field_schema = param_spec - self.logger.info(f"目标字段(查询参数 - 简单类型): {param_name},原始类型: {self.original_field_type}") - break - # Scenario 2: Schema defined for the query parameter (OpenAPI 3.0 style, or complex objects in query) - elif isinstance(param_schema, dict): - self.logger.debug(f"查询参数 '{param_name}' 包含嵌套 schema,尝试在其内部查找简单类型字段。") - resolved_param_schema = self._resolve_ref_if_present(param_schema) - if resolved_param_schema.get("type") == "object": - properties = resolved_param_schema.get("properties", {}) - for prop_name, prop_details_orig in properties.items(): - prop_details = self._resolve_ref_if_present(prop_details_orig) - if prop_details.get("type") in ["string", "number", "integer", "boolean"]: - self.target_field_path = [param_name, prop_name] - self.original_field_type = prop_details.get("type") - self.target_field_schema = prop_details - self.logger.info(f"目标字段(查询参数 - 对象属性): {param_name}.{prop_name},原始类型: {self.original_field_type}") - break - if self.target_field_path: break - elif resolved_param_schema.get("type") in ["string", "number", "integer", "boolean"]: - self.target_field_path = [param_name] - self.original_field_type = resolved_param_schema.get("type") - self.target_field_schema = resolved_param_schema - self.logger.info(f"目标字段(查询参数 - schema为简单类型): {param_name},原始类型: {self.original_field_type}") - break - else: - self.logger.debug(f"查询参数 '{param_name}' (type: {param_type}, schema: {param_schema}) 不是直接的简单类型,也无直接可用的对象型 schema 属性。") - - if not self.target_field_path: - self.logger.info(f"最终,在端点 {self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')} 的查询参数中,均未找到可用于测试类型不匹配的字段。") - - def _resolve_ref_if_present(self, schema_to_resolve: Dict[str, Any]) -> Dict[str, Any]: - # 根据用户进一步要求,方法体简化为直接返回,不进行任何 $ref/$ $$ref 的检查。 - # self.logger.debug(f"_resolve_ref_if_present called. Returning schema as-is per new configuration.") - return schema_to_resolve - - # No generate_request_body, or it simply returns current_body def generate_request_body(self, current_body: Optional[Any]) -> Optional[Any]: self.logger.debug(f"{self.id} is focused on query parameters, generate_request_body will not modify the body.") return current_body def generate_query_params(self, current_query_params: Dict[str, Any]) -> Dict[str, Any]: - if not self.target_field_path: # target_field_location is always "query" + if not self.target_field_path or not self.original_field_type: + self.logger.info(f"[{self.id}] No target field or original type identified for query param type mismatch. Skipping query param modification.") return current_query_params - self.logger.debug(f"准备修改查询参数以测试类型不匹配。目标路径: {self.target_field_path}, 原始类型: {self.original_field_type}") + self.logger.debug(f"[{self.id}] Preparing to modify query params for type mismatch. Target path: {self.target_field_path}, Original type: {self.original_field_type}") - modified_params = copy.deepcopy(current_query_params) if current_query_params is not None else {} - - temp_obj_ref = modified_params - try: - for i, key in enumerate(self.target_field_path): - is_last_part = (i == len(self.target_field_path) - 1) - if is_last_part: - original_value = temp_obj_ref.get(key) - new_value = self._get_mismatched_value(self.original_field_type, original_value, self.target_field_schema) - self.logger.info(f"在查询参数路径 {self.target_field_path} (键 '{key}') 处,将值从 '{original_value}' 修改为 '{new_value}' (原始类型: {self.original_field_type})") - temp_obj_ref[key] = new_value - else: # Navigating a nested structure within a query param (e.g. filter[field]=value) - if key not in temp_obj_ref or not isinstance(temp_obj_ref[key], dict): - # If path expects a dict but it's not there, create it. - # This is crucial for structured query params like "filter[name]=value" - # where target_field_path might be ["filter", "name"]. - temp_obj_ref[key] = {} - temp_obj_ref = temp_obj_ref[key] - - except Exception as e: - self.logger.error(f"在根据路径 {self.target_field_path} 修改查询参数时发生错误: {e}", exc_info=True) - return current_query_params + mismatched_value = schema_utils.generate_mismatched_value( + original_type=self.original_field_type, + original_value=None, # Placeholder + field_schema=self.target_field_schema, + logger_param=self.logger + ) - return modified_params + self.logger.info(f"[{self.id}] Generated mismatched value '{mismatched_value}' for original type '{self.original_field_type}' at query path '{'.'.join(map(str, self.target_field_path))}'.") - def _get_mismatched_value(self, original_type: Optional[str], original_value: Any, field_schema: Optional[Dict[str, Any]]) -> Any: - if original_type == "string": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if 123 not in field_schema["enum"]: return 123 - if False not in field_schema["enum"]: return False - return 12345 - elif original_type == "integer": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-an-integer" not in field_schema["enum"]: return "not-an-integer" - if 3.14 not in field_schema["enum"]: return 3.14 - return "not-an-integer" - elif original_type == "number": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-a-number" not in field_schema["enum"]: return "not-a-number" - return "not-a-number" - elif original_type == "boolean": - if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): - if "not-a-boolean" not in field_schema["enum"]: return "not-a-boolean" - if 1 not in field_schema["enum"]: return 1 - return "not-a-boolean" - - self.logger.warning(f"类型不匹配测试(查询参数):原始类型 '{original_type}' 未知或无法生成不匹配值,将返回固定字符串 'mismatch_test'。") - return "mismatch_test" # Fallback for other types or if logic is incomplete + # Query parameters are typically a flat dictionary, but util_set_value_at_path can handle nested paths if needed (e.g. for object-style query params) + modified_params, success = schema_utils.util_set_value_at_path( + data_container=current_query_params, + path=self.target_field_path, # Path might be like ['paramName'] or ['paramName', 'nestedKey'] + new_value=mismatched_value + ) + + if success: + self.logger.debug(f"[{self.id}] Successfully set mismatched value in query params using util_set_value_at_path.") + return modified_params + else: + self.logger.error(f"[{self.id}] Failed to set mismatched value in query params using util_set_value_at_path. Returning original params.") + return current_query_params def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]: results = [] + if not self.target_field_path: + self.logger.info(f"[{self.id}] Skipped type mismatch (query) validation: No target query parameter was identified.") + return [self.passed("跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。")] + status_code = response_context.status_code json_content = response_context.json_content + expected_http_status_codes = [400, 422] + specific_business_error_code = "4001" + error_code_field_in_body = "code" - if not self.target_field_path: - results.append(self.passed("跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。")) - self.logger.info(f"{self.id}: 由于未识别到目标查询参数字段,跳过类型不匹配测试。") - return results + # Use self.target_param_name for a clearer context message if a top-level param was identified + context_param_identifier = self.target_param_name or '.'.join(map(str, self.target_field_path)) + context_msg_prefix = f"当查询参数 '{context_param_identifier}' (路径: '{'.'.join(map(str, self.target_field_path))}') 类型不匹配时," - expected_status_codes = [400, 422] - specific_error_code_from_appendix_b = "4001" # Example + http_status_ok = status_code in expected_http_status_codes + business_code_ok = False + is_4xx_error = 400 <= status_code <= 499 - if status_code in expected_status_codes: - msg = f"API对查询参数 '{'.'.join(self.target_field_path)}' 的类型不匹配响应了 {status_code},符合预期。" - # Further check for specific error code in body if applicable - error_code_in_response = json_content.get("code") if isinstance(json_content, dict) else None - if error_code_in_response == specific_error_code_from_appendix_b: - results.append(self.passed(f"{msg} 并成功接收到特定错误码 '{specific_error_code_from_appendix_b}'。")) - elif error_code_in_response: - results.append(ValidationResult(passed=True, - message=f"{msg} 但响应体中的错误码是 '{error_code_in_response}' (期望类似 '{specific_error_code_from_appendix_b}')。", - details=json_content if isinstance(json_content, dict) else {"raw_response": str(json_content)} + if json_content and isinstance(json_content, dict): + body_code = json_content.get(error_code_field_in_body) + if body_code is not None and str(body_code) == specific_business_error_code: + business_code_ok = True + + if http_status_ok: + if business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code} 并且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} and business code '{specific_business_error_code}' match. (Query param: {context_param_identifier})") else: - results.append(self.passed(f"{msg} 响应体中未找到错误码或结构不符合预期。")) - else: - results.append(self.failed( - message=f"对查询参数 '{'.'.join(self.target_field_path)}' 的类型不匹配测试期望状态码为 {expected_status_codes} 之一,但收到 {status_code}。", - details={"status_code": status_code, "response_body": json_content} - )) - self.logger.warning(f"{self.id}: 类型不匹配测试失败。字段: query.{'.'.join(self.target_field_path)}, 期望状态码: {expected_status_codes}, 实际: {status_code}。") + results.append(self.passed( + f"{context_msg_prefix}API响应了预期的错误状态码 {status_code}. " + f"响应体中的业务错误码 (\'{error_code_field_in_body}\': \'{json_content.get(error_code_field_in_body)}\') 与特定期望 \'{specific_business_error_code}\' 不符或未找到,但HTTP状态码正确。" + )) + self.logger.info(f"{self.id}: Passed. HTTP status {status_code} is correct. Business code mismatch/missing (Expected: \'{specific_business_error_code}\', Got: \'{json_content.get(error_code_field_in_body)}\'). (Query param: {context_param_identifier})") - return results \ No newline at end of file + elif business_code_ok: + results.append(self.passed( + f"{context_msg_prefix}API响应了状态码 {status_code} (非主要预期HTTP状态 {expected_http_status_codes},但为4xx客户端错误), " + f"且响应体中包含预期的业务错误码 '{specific_business_error_code}' (字段: '{error_code_field_in_body}')." + )) + self.logger.info(f"{self.id}: Passed (Fallback). HTTP status {status_code} (4xx) with matching business code '{specific_business_error_code}'. (Query param: {context_param_identifier})") + + else: + fail_message = f"{context_msg_prefix}期望API返回状态码在 {expected_http_status_codes} 中,或返回4xx客户端错误且业务码为 '{specific_business_error_code}'." + fail_message += f" 实际收到状态码 {status_code}." + if json_content and isinstance(json_content, dict): + fail_message += f" 响应体中的业务码 (\'{error_code_field_in_body}\') 为 \'{json_content.get(error_code_field_in_body)}\'." + elif json_content: + fail_message += " 响应体不是一个JSON对象." + else: + fail_message += " 响应体为空或非JSON." + + results.append(self.failed( + message=fail_message, + details={"status_code": status_code, "response_body": json_content, "expected_http_status_codes": expected_http_status_codes, "expected_business_code": specific_business_error_code, "mismatched_param": context_param_identifier} + )) + self.logger.warning(f"{self.id}: Failed. {fail_message} (Query param: {context_param_identifier})") + + return results + + def generate_path_params(self, current_path_params: Dict[str, Any]) -> Dict[str, Any]: + # ... existing code ... + pass + + return current_path_params \ No newline at end of file diff --git a/custom_testcases/compliance_catalog/normative_spec/__pycache__/url_llm_checks.cpython-312.pyc b/custom_testcases/compliance_catalog/normative_spec/__pycache__/url_llm_checks.cpython-312.pyc index bbba271278c6c172c47abc0dd216add743dda24e..0126646a7a3e0ef8251e729e4ba3196e9e6ec974 100644 GIT binary patch delta 21 bcmX@Zc!rVpG%qg~0}$|;n`BI$$h#i^IjjX} delta 21 bcmX@Zc!rVpG%qg~0}y;yH_6yPk#|1;K{N(! diff --git a/custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py b/custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py index 2176da8..77b74da 100644 --- a/custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py +++ b/custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py @@ -115,14 +115,13 @@ # - 版本号: 语义化版本,例如 v1, v1.0, v2.1.3。 # - 资源类型: 通常为名词复数。 # - standard_name: "url_path_structure" -# - standard_name: "resource" -# - standard_name: "schema" -# - standard_name: "version" + # 4. **URL路径参数命名规范**: -# - 规则: 路径参数(如果存在)必须使用全小写字母(可以是一个单词)或小写字母加下划线命名(这是多个单词的情况),并能反映资源的唯一标识 (例如: {{well_id}},{{version}},{{schema}})。 +# - 规则: 路径参数(如果存在)必须使用全小写字母(可以是一个单词)或小写字母加下划线命名(这是多个单词的情况),并能反映资源的唯一标识 (例如: {{well_id}},还有{{version}},{{schema}}也是合规的,比一定非要{{version_id}})。 # - standard_name: "url_path_parameter_naming" + # 5. **资源命名规范 (在路径中)**: # - 规则: 资源集合应使用名词的复数形式表示 (例如 `/wells`, `/logs`);应优先使用石油行业的标准术语 (例如用 `trajectory` 而非 `path` 来表示井轨迹)。 # - standard_name: "resource_naming_in_path" diff --git a/custom_testcases/compliance_catalog/security/__pycache__/https_mandatory_case.cpython-312.pyc b/custom_testcases/compliance_catalog/security/__pycache__/https_mandatory_case.cpython-312.pyc index 3829bdacc7a1ca8083a5992da08859261625471d..de7f3e858cbbe7dd585aee29cc3fc932da2397eb 100644 GIT binary patch delta 142 zcmca-a?gbKG%qg~0}y;)Vv=!tBd-NJYY{(?JK2|g2c!CAHjWD{?3cLpH{aq2U}IF9 ztj+(L;}%;+Nl8I*@nmU%e~f0Er36Kp7|kXd2**ij0yP$Cfe39Naf`XMD5ppr#MPO+ kLfC>)fAT|NRW@UgfXQYakunxWqs`3{jf{+%lUb!A0Tv!5SpWb4 delta 142 zcmca-a?gbKG%qg~0}waZq@ str: parsed_url = urllib.parse.urlparse(current_url) - if parsed_url.scheme.lower() == "httpss": + if parsed_url.scheme.lower() == "https": # 将 https 替换为 http modified_url = parsed_url._replace(scheme="http").geturl() self.logger.info(f"为进行HTTPS检查修改URL:原始 '{current_url}', 修改为 '{modified_url}'") diff --git a/custom_testcases/setup_checks/__pycache__/basic_api_sanity_check_case.cpython-312.pyc b/custom_testcases/setup_checks/__pycache__/basic_api_sanity_check_case.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed13f8040fc4ec1b87d9cc7830f9e54d48cc5a26 GIT binary patch literal 196 zcmX@j%ge<81RvI#WF&|%Fgylv(7|UGpvZKFN(N0vzm*I{OhDdekeXk~`k}?CMaBA6 z1<3}6`sMjW*~JBk$*KBPRXG{@$@#ejIhl!hKz?#*aY=q|d`W6?NpfOwYO#KCYDsB9 zd~!x=a(1zPQetsta(rSzW_)pCUS>%pL_8j(Qm>%$7l%!5eoARhs$CH)&`w4mE(S3^ MGBYwV7BK@^0M^$xe*gdg literal 0 HcmV?d00001 diff --git a/custom_testcases/setup_checks/basic_api_sanity_check_case.py b/custom_testcases/setup_checks/basic_api_sanity_check_case.py new file mode 100644 index 0000000..f83224f --- /dev/null +++ b/custom_testcases/setup_checks/basic_api_sanity_check_case.py @@ -0,0 +1,78 @@ +# from typing import Dict, Any, Optional, List +# from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext + +# class BasicAPISanityCheckCase(BaseAPITestCase): +# id = "TC-FRAMEWORK-SANITY-001" +# name = "Basic API Sanity Check" +# description = ("Performs a basic API call with default generated data and expects a generally successful " +# "response (e.g., 200, 201, 204). If a response schema is defined for success, " +# "it also validates the response body against it. " +# "If this test case fails, subsequent test cases for this endpoint may be skipped.") +# severity = TestSeverity.CRITICAL +# tags = ["sanity", "framework-setup"] + +# # This flag indicates to the orchestrator that if this test fails, +# # subsequent tests for THIS ENDPOINT should be skipped. +# is_critical_setup_test: bool = True +# execution_order = 1 # Ensures this runs first for an endpoint + +# # Expected successful HTTP status codes +# EXPECTED_SUCCESS_STATUS_CODES: List[int] = [200, 201, 202, 204] + +# def __init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any], json_schema_validator: Optional[Any] = None, llm_service: Optional[Any] = None): +# super().__init__(endpoint_spec, global_api_spec, json_schema_validator, llm_service) +# self.target_success_schema: Optional[Dict[str, Any]] = None + +# # Try to find a schema for a successful response (e.g., 200 or 201) +# responses_spec = self.endpoint_spec.get("responses", {}) +# if isinstance(responses_spec, dict): +# for status_code_str in map(str, self.EXPECTED_SUCCESS_STATUS_CODES): +# if status_code_str in responses_spec: +# response_def = responses_spec[status_code_str] +# if isinstance(response_def, dict): +# content = response_def.get("content", {}) +# for ct in ["application/json", "application/*+json", "*/*"]: +# if ct in content: +# media_type_obj = content[ct] +# if isinstance(media_type_obj, dict) and isinstance(media_type_obj.get("schema"), dict): +# self.target_success_schema = media_type_obj["schema"] +# self.logger.info(f"[{self.id}] Found success response schema for status {status_code_str} under content type {ct}.") +# break # Found a schema for this content type +# if self.target_success_schema: +# break # Found a schema for this status code +# if not self.target_success_schema: +# self.logger.info(f"[{self.id}] No specific success response JSON schema found to validate against for this endpoint.") + +# # No need to override generate_* methods, as we want the default behavior. + +# def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]: +# results = [] +# status_code = response_context.status_code + +# if status_code in self.EXPECTED_SUCCESS_STATUS_CODES: +# msg = f"Basic sanity check: Received expected success status code {status_code}." +# results.append(self.passed(msg)) + +# # If we have a schema for successful responses, validate the body +# if self.target_success_schema: +# if response_context.json_content is not None: +# results.extend(self.validate_data_against_schema( +# data_to_validate=response_context.json_content, +# schema_definition=self.target_success_schema, +# context_message_prefix="Successful response body" +# )) +# elif response_context.text_content and not response_context.text_content.strip() and status_code == 204: +# # HTTP 204 No Content, body is expected to be empty, so schema validation is not applicable. +# results.append(self.passed("Response is 204 No Content, body is correctly empty.")) +# elif status_code != 204 : # For 200, 201, 202, if schema is present, content is expected +# results.append(self.failed( +# message="Basic sanity check: Response body is empty or not JSON, but a success schema was defined.", +# details={"status_code": status_code, "content_type": response_context.headers.get("Content-Type")} +# )) +# else: +# results.append(self.failed( +# message=f"Basic sanity check: Expected a success status code (one of {self.EXPECTED_SUCCESS_STATUS_CODES}), but received {status_code}.", +# details={"status_code": status_code, "response_body": response_context.json_content if response_context.json_content else response_context.text_content} +# )) + +# return results diff --git a/ddms_compliance_suite/__pycache__/test_framework_core.cpython-312.pyc b/ddms_compliance_suite/__pycache__/test_framework_core.cpython-312.pyc index c8b7aef797fbd91c8a1805aea0b60bc1acec16ea..50db78530416641bc4584a7ff87fb224dd3dbd7e 100644 GIT binary patch literal 29191 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 delta 2926 zcma)8ZA@EL818BBZA+o;wm_jD^kXg1%V!I04A~dkaN-=WuPovs>$sPWt+a4kWX!no zgG58riN_cd=g=693(;&gy7^-XON=poWm)FeH9BJ!=lr45KSurI`<_cn8(3U_JU!=m zpZ7iQdG9^vy-(gGUnDG_n$0E+{K8eOM<1)3wN#L^vo%d=q7gNsE>_fEq}A-yh}^VB zF_1tMt}D)s zj|lqN+dW;FU2Hu!&_c0X0)Mg@!Gd6=TX?tM zhr<9u83NOnX*VmT??acMHCX66S|u2km@ZhE#zPipBKMX`Oj{T{)ztW-eD)d)NSJ`!1vaM$Vu z(TY$`Mbjy@dO`Y&=`v}cZx&yRE|zcu%2>_XadaO-2f{{#O#s;v{=agi64DzbUJ`!Z zyaV2tF7wZ%nbunxYFVsST!AgU4o7T#wsb*xloF3YmPX})fo=4h<(Q}z$h=a46y0z< zr51>liWLY;rSLv z@1|H*FtbTk$}bd+R!sB#4$)qqbmY&5IMF%H^*couWBJ9{s%CKpn#yS|-R~0J z+0ddRI|8Ez0#u6L{IFopOBFOe(74655)T$0=6;xa!~o2zBrkAg$%n}g>BVZWtQBht z(m_o+Ulat9Ulg)QEDKT#_JCL?RV}mBgQa>!O9NPHiZo)I*eKb>ru+?vA&F1tWoZ<{ zP}ra(h#SOa*h32>lDA*>7#xxhcGEh|&%?g(*I#=N`gM8wx=EAJu2{E4k`mkknQ-Yo zLeG@-lcvmHWwSavo^?f|5U;|GMp8%d*y5cd@1?KVD|))ns*fe2QAw8fA-^9PUX+fE zM-^REN(sDrIjK&l$jOp;%=51zYH(DN!?eorF&w1d9P{o+P=5$O(5g`$g>e!a3cIN< zIy?1a$ONdbrj)L6m4aW5>$70aPiE&2k6t#yU_k_DWt)B+nJ|kGtMoyHXDcrTauF0R zH90C}y`u%*!|qP~Br*c?{?KhFw#*OiJH#FVHtQ2B@VVvPqJILJYC7h((QQ7+Idjmr zQ0S8=@Co@l$kR0DZzyJsgEfOq^mNcpFZ)M4Y%QHyAJv4;*omRG(5AWrTl6m@<)e{c zneEcxr2|(T+pimUd}CexRFT??8t4asg@6PqVKEZBv+!zMiUbp-g6^rRpzl@Hk~#Wg z)q3>;X{4^|InQvOH|tG>-c+gXB(GCfO(T?eSIs*@uEa9ll;;-LJpp5OB`>W@*9P0k zTl7${89Yx1U#VR3>_GKNfIM}#(5`P-J$7-9T;bYbGUwfCyAmpxEH+tY(zN;@K{h|IcR{YuS5#`DWsu3{Y+ zh{WTGR3tT=h$jaIg`?dFTM>E?st|e+`VjUY z;E`85J8SAka5{u=93hT?CtB@dtb|FN;u)1E5Lg3yoaK$jNPZDODM@19gCkPvXhKv! z?PkzehQQ8DIgYkx0r!!#>gafEBJ+3b1?`$Yw1n>?suWd%mDZ0nA9xrY*!Ec}>~n)9 zz#D)9c0<$twWj?$jfH+P*0_3DOZv#48urJQ F{SOoJHH!cM diff --git a/ddms_compliance_suite/__pycache__/test_orchestrator.cpython-312.pyc b/ddms_compliance_suite/__pycache__/test_orchestrator.cpython-312.pyc index 1e4c5cc04960ba9abbe714997e4b650c2d73c2a1..28adb250a91fd52bbf84befd03be82c60f31ce89 100644 GIT binary patch delta 18146 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 bool: - """ - Evaluates a single assertion rule against the given context data. - - Args: - assertion_rule: The rule definition (e.g., a Pydantic model like BusinessAssertionTemplate). - The structure of this will depend on your rule design. - context_data: Data from the test execution context (e.g., API response, extracted variables). - - Returns: - True if the assertion passes, False otherwise. - """ - # Placeholder logic - this needs to be implemented based on rule type - # Example: if rule is a python expression - # if assertion_rule.template_language == "python_expression": - # try: - # # Ensure the expression is safe to eval! - # # Consider using ast.literal_eval for simple cases or a safer evaluation library. - # # For complex expressions, a dedicated DSL or restricted environment is better. - # # The context_data would be made available to the expression. - # return bool(eval(assertion_rule.template_expression, {}, context_data)) - # except Exception as e: - # print(f"Error evaluating Python expression assertion: {e}") - # return False - - # Example: if rule is a simple equality check (defined differently) - # if "expected_value" in assertion_rule and "actual_value_path" in assertion_rule: - # actual_value = get_value_from_path(context_data, assertion_rule.actual_value_path) # Needs helper - # return actual_value == assertion_rule.expected_value - - print(f"[AssertionEngine] Placeholder: Evaluating rule '{getattr(assertion_rule, "name", "Unnamed Rule")}'. Context: {context_data}") - # This is a very basic placeholder. Real implementation depends heavily on rule definition. - return True # Default to True for now - -# Helper function example (would likely be more complex or use a library like jsonpath-ng) -# def get_value_from_path(data: Dict[str, Any], path: str) -> Any: -# """Retrieves a value from a nested dict using a simple dot-separated path.""" -# keys = path.split('.') -# value = data -# for key in keys: -# if isinstance(value, dict) and key in value: -# value = value[key] -# else: -# return None # Or raise an error -# return value \ No newline at end of file diff --git a/ddms_compliance_suite/case_generator/__pycache__/generator.cpython-312.pyc b/ddms_compliance_suite/case_generator/__pycache__/generator.cpython-312.pyc deleted file mode 100644 index 6750cf7a3d3aece3ff4e041db38bd83168ca2ff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7185 zcmb7JZ%iB4mY?x|8-ooP3NLb8!5Hrm zjOmf4@UDJ?^q9ZFjTw&~>88WHfOKQwkbtzqu?=LJO$gz5EEqxh`L#rZ{RWTon2>p% zK<{OknQ_s1CD@1%==w8)La3mI_@<;br9d zVUJ$`4t9A1mHXLsmJ16T(@;lHjjC(>4jWp-GOolK)}uw%xwQy8ipRvc4dl4wpPliC zR@i88j9m)H!k80PT-^{>uvUh}+#V8D;ChZt#QCrQ<3f3#F?!a_8Zot`V+_!5VagceOB^QF2wY{XRpBx) z=6m`;`G&<~MYY(P5pX1fy;*QmoJ;=7LcvpLvpj`;ptzn2#u%lA`KkEgDjO1bY7tAI z;xXu@W)o}-mV)9FY$&`G4k>O|#NnYqif08XzC>}Ln5UMwcog2f>=UoTjck~O=1Q(A z#E;@6Ol#qHR0YKYLL^0kRyuI8L3qd+56L-!_GplfXCq5WgU7=t>bsl1>paWxzGNcQ z-Q&9*=RV{U!4T_9CL=4pP&}H5go80?Gfb4HOKqCR(dP@nZ0Y5ENX0o{k@6-Wcxf81 zJxwQ@Pj;aWrtXQU@d#Q3DhuK8jR`b(7a2HKSmR=$<8#LuugrZ9 z2t0S5+#p4AwUBdIi25)ZH4{@BQNxW1c%1Tx8bRGT2sJag^P=WNDcYhGt*GVP$E0Xa zkWwjXPn4olrT7Wh0rbhgzQ{%rEJq1(Y8ir}jboSc0a0*3A-t$a_(PWZxILJFWyyz= zZ?FaIA4U24Za;l1qTD{Ihy|MB!a2@k?L8TrQh%sVIbL;;IVgd3lWlWg_v&tcw z1m#Y-PV)9+IxQ#a>=Z30`pPVtKO-26 zXk4|GWUCZ>94xBcpAnyHRXSDn3TalRyvSpH1y99t(HE(5p;FZav#eI>QeB*-O*Dc9 zn#cB{{0gR0w5${GAujpb!c^i^{GkW98If4UyXf~Gu`uF9-&Co4kXol~0{%=WkAM?T zc~)^gfA0}(cSzn0C!lIRm~Kf4`Mmf1yWzL4=!txV2;qK+H?}u5bew4<1>#8d7hL5&K@U3 zj_4?PbW8K;zv*Cq|MZ!T5PYg^Q3G?Zi24)v%(~-yCU6V8!C)}?CT+gA&@(yi($)vLWFTBU@(BGs=_t8c1Qseas}&PlCPPSH6=+yZ~4 z>cqO$ffBDuLB83=+7mrgw>qeDm1cUXtM3CV{`b1Dz;gjuCvGrgi42XoI z*l0r7c!{4%aPjpp!!ll^3&)n?NH2ti2%EHCk0}I00enG5z<@kJxTJ2q+uQ9ia(KT) zI>2oJQxj_fGB9j}1uTknhE|X0g#ExxIDNWi8C9>SU8O)jjg`? zoUOiN{UF4|7x8T2Aj-$rI5^*0ctFc^C>V**Ny{iyc)9}=BB`X7I!k$UU?}DY!z37% z4{>2-VyGG)7z;Y`XIwzojU3A-;xVvYakzr@Xa%>086KI{ULKL>P{Z8y>2VsvWZFM^ zas0|KePeifYHWCZYIX)`C&%YemBKN8^XmBMJbkXao1VRlbXRBn^GJKHy9YUx?zwUQ zRY2O~^u=L6JvH{tpYggte>c(!Av&qYp+hA#RL6IuC)qQ+Cd8v)7M|}0zzpRc00KzB zTo}kvOAsW*#TuZv5iGAF2;)?Y$1)xR(ttm7v0#){7&x4d;N!wg0n%fa@yQmf?rcd5 z#=(j`dF+f;C1>VW!aS@$AV~_ZVi1rAh1I>*%mP#vR@j$f8P?75vZ;BD>d|v^U?Jzn zg)$=xo-r&t&+>}#a1~*WgqPURMhIfx2O(K>2~XW-Irf;du-(TqZh-Q*ks%UaUS>I@ zXE`p;<>WTc0?W|AA*^A%&afOlqjUK9 zi*!>n6SEvXPbyacs0^-%xD6#pAwn@QyM|w&a!gLE9zl(;cC;TNacW{}REg2!;R=9} z1_-qnVVS(6-^Hqow}V_P99#C(=h0(3RthH&0y&B?0SR4Phc4V@!61xQb{=F^=)%qe zn+@z{s2rCxb}YUS;NHSx%8LQ3ToPbBm)~q4Yq<+ps}i5KLdq7?wHor5&bwB@&5+Ma z$gEg|0~nxS$%Wuf4q4RFDe`=Z3eYicHsq29^T%G$jt*! ztyRCB{`Is}KXPCl%~jWIPJQj`kxY#_TSL~?EZds54Lh2Qt!q=4tEqo*^Zw0;%iF)q z)bwv!a?XYackbWWHt+OjoaZ*JhX$gpJKNeTxAyK%?#*Rd-^sR4$gLBZ){95P3~9a~ zTbnn>w$47SZh9DfJbzGqZujD$h3LGH^$g0M!Hj3UeV+njbAsP$u@V(&E30A>Hc)bzI%V{Kc@dY zExorOeGtq{FG`m~(mPD1nccGHTzwQ9?DXeAu(?JIJ1&zGy|ru~#WeCvP? z9rQD~PH(nzLhhVMr=;tP@?)}FFD$up1bta{dU$pDZ3|gr{DVO z^y1#_w2)rfAKqWuzbRc0N`JKoYI`=e0!BsoWbKJB>RPQsaeO%bA@Ue^~fp z;n4@unZdo`J!bDlx;K409hRu8xsD6Dp5EtXeN)wz`LK%UA0@MW6LQ}~`eSMSMyBuG zY~L-p?^dRdenym6w#bg2t=a8`obz^XG|ElKf*UrZ6 z@+{ROQ$4#~dt8PZk)0#CI(N2iNUj^o){V<`!LEWv~TZ0eHPwM(}^>1vS&9?N) zExo&!(^Z+4F}Z#$SKpGY|Ak!ti){UbTt6XAzJE}^080v__S3Tc z^!7)8FZ`YG#D3;b5B-N;!tTo2+P<>2;eBJ~*E3Sn^nPG}T55Rjz#7PJA9mNKD480R zD>%5FRyOhcEgU`zcq;JSF+O0>G_ufiG|u4bZyH%?`lGdAq|jreX(k?`Y0iOn`379z z3j(Bt-I~LIgTqKD|82#$a`_Km3aBpt2;&znT-2(C9SD8}ihIPj8m-=RXd?B#or)s@ zszZZW@7O)Rr`_}Knf^F*NI)~avd{lZ^azvR){biQjeAVGcVC-+^Pgge1a3?8Vu9F5 z!Nzo#yojBfB&T3w!u@$8uzrsV8SxncKA6ZLY$TxO6qE6Uj?D#M)1fNx2OHtN%C{;{ z=clH8=AN%?kpG uBV4?&5ac{56aN1qE_`ivZ921Nmuz-Dd^2Ni`^4} ValidationResult: - return ValidationResult(passed=False, message=message, details=details) \ No newline at end of file + return ValidationResult(passed=False, message=message, details=details) + + # --- New helper methods for schema and field finding --- + def _get_resolved_request_body_schema(self) -> Optional[Dict[str, Any]]: + """ + Helper to get the (potentially $ref-resolved by orchestrator) request body schema + from self.endpoint_spec. + The orchestrator is expected to have handled $ref resolution before test case instantiation. + """ + request_body_spec = self.endpoint_spec.get("requestBody") + if request_body_spec and isinstance(request_body_spec, dict): + content = request_body_spec.get("content", {}) + # Iterate through common JSON content types or prioritize application/json + # Order matters: more specific first + for ct in ["application/json", "application/merge-patch+json", "application/*+json", "*/*"]: + if ct in content: + media_type_obj = content[ct] + if isinstance(media_type_obj, dict) and isinstance(media_type_obj.get("schema"), dict): + self.logger.debug(f"Found request body schema under content type: {ct}") + return media_type_obj["schema"] + + # Fallback for OpenAPI 2.0 (Swagger) style 'in: body' parameter + # This might also be present in OpenAPI 3.0 for compatibility or by mistake + parameters = self.endpoint_spec.get("parameters", []) + if isinstance(parameters, list): + for param in parameters: + if isinstance(param, dict) and param.get("in") == "body": + param_schema = param.get("schema") + if isinstance(param_schema, dict): + self.logger.debug("Found request body schema under 'in: body' parameter (Swagger 2.0 style).") + # Schema for 'in: body' parameter is directly usable + return param_schema + + self.logger.debug("No suitable request body schema found in endpoint_spec.") + return None + + def _find_removable_field_path(self, schema_to_search: Optional[Dict[str, Any]], schema_name_for_log: str) -> Optional[List[Union[str, int]]]: + """ + Uses schema_utils to find a removable (required) field path within the given schema. + Args: + schema_to_search: The schema dictionary to search within. + schema_name_for_log: A string name for the schema (e.g., "request body", "response header") for logging. + Returns: + A list representing the path to a removable field, or None if not found. + """ + if not schema_to_search: + self.logger.info(f"Schema for '{schema_name_for_log}' is missing or empty. Cannot find removable field.") + return None + + removable_path = schema_utils.util_find_removable_field_path_recursive( + current_schema=schema_to_search, + current_path=[], + full_api_spec_for_refs=self.global_api_spec + # schema_utils.resolve_json_schema_references will use discard_refs=True by default + ) + + if removable_path: + self.logger.info(f"Found a removable field path in '{schema_name_for_log}' schema: '{'.'.join(map(str, removable_path))}'") + else: + self.logger.info(f"No removable (required) field path found in '{schema_name_for_log}' schema.") + return removable_path + + def _find_simple_type_field_in_schema( + self, + schema_to_search: Optional[Dict[str, Any]], + schema_name_for_log: str + ) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any]]]: + """ + (Helper for test cases) Finds the first simple type field (string, integer, number, boolean) + in the given schema using schema_utils. + + Args: + schema_to_search: The schema dictionary to search within. + Expected to be already resolved (e.g., from _get_resolved_request_body_schema). + schema_name_for_log: A name for the schema (e.g., "request body", "response body") for logging. + + Returns: + A tuple (field_path, field_type, field_schema) if found, otherwise None. + """ + if not schema_to_search: + self.logger.debug(f"_find_simple_type_field_in_schema: Schema for '{schema_name_for_log}' is None or empty, cannot search.") + return None + + if not isinstance(schema_to_search, dict): + self.logger.warning(f"_find_simple_type_field_in_schema: Expected schema for '{schema_name_for_log}' to be a dict, got {type(schema_to_search)}.") + return None + + self.logger.debug(f"_find_simple_type_field_in_schema: Searching for simple type field in '{schema_name_for_log}' schema...") + + found_target = schema_utils.find_first_simple_type_field_recursive( + current_schema=schema_to_search, + logger_param=self.logger # Pass the test case's logger + ) + + if found_target: + field_path, field_type, field_prop_schema = found_target + self.logger.info(f"_find_simple_type_field_in_schema: Found simple type field in '{schema_name_for_log}': Path={'.'.join(map(str, field_path))}, Type={field_type}") + return field_path, field_type, field_prop_schema + else: + self.logger.debug(f"_find_simple_type_field_in_schema: No simple type field found in '{schema_name_for_log}' schema.") + return None + + def _find_first_simple_type_parameter( + self, + param_location: str + ) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any], str]]: + """ + Finds the first parameter in the specified location (e.g., 'query', 'header') + that is a simple type or contains a simple type if it's an object schema. + + Args: + param_location: The location of the parameter ('query', 'header'). + + Returns: + A tuple (full_path, param_type, param_schema, param_name) if found, otherwise None. + - full_path: Path to the simple type (e.g., ['paramName'] or ['paramName', 'nestedField']). + - param_type: The original type of the simple field. + - param_schema: The schema definition of the simple field. + - param_name: The name of the top-level parameter. + """ + parameters = self.endpoint_spec.get("parameters", []) + if not isinstance(parameters, list): + self.logger.warning(f"_find_first_simple_type_parameter: 'parameters' in endpoint_spec is not a list. Cannot find {param_location} parameter.") + return None + + for param_spec in parameters: + if not isinstance(param_spec, dict) or param_spec.get("in") != param_location: + continue + + param_name = param_spec.get("name") + if not param_name: + self.logger.warning(f"_find_first_simple_type_parameter: Found a {param_location} parameter without a name. Skipping: {param_spec}") + continue + + self.logger.debug(f"_find_first_simple_type_parameter: Checking {param_location} parameter '{param_name}'.") + + # Case 1: Parameter schema is directly defined at the top level of param_spec (OpenAPI 3.0) + param_actual_schema = param_spec.get("schema") + if isinstance(param_actual_schema, dict): + schema_type = param_actual_schema.get("type") + if schema_type in ["string", "integer", "number", "boolean"]: + self.logger.info(f"_find_first_simple_type_parameter: Found simple type {param_location} parameter '{param_name}' (type: {schema_type}) via its 'schema'.") + return [param_name], schema_type, param_actual_schema, param_name + elif schema_type == "object": + self.logger.debug(f"_find_first_simple_type_parameter: {param_location} parameter '{param_name}' has an object schema. Searching within...") + # Schema is already resolved by orchestrator, so no need to call resolve_ref here. + found_in_object = self._find_simple_type_field_in_schema(param_actual_schema, f"{param_location} parameter '{param_name}'") + if found_in_object: + nested_path, nested_type, nested_schema = found_in_object + full_path = [param_name] + nested_path + self.logger.info(f"_find_first_simple_type_parameter: Found simple type field within object {param_location} parameter '{param_name}'. Path: {'.'.join(map(str,full_path))}, Type: {nested_type}") + return full_path, nested_type, nested_schema, param_name + # Add other cases if necessary, e.g. array of simple types for query params (though less common for type mismatch target) + + # Case 2: Type is defined directly in param_spec (OpenAPI 2.0 / Swagger or simple OpenAPI 3.0 params) + # This is checked after 'schema' as 'schema' is more explicit in OpenAPI 3+ + direct_param_type = param_spec.get("type") + if direct_param_type in ["string", "integer", "number", "boolean"]: + # This param_spec itself is the schema for the simple type + self.logger.info(f"_find_first_simple_type_parameter: Found simple type {param_location} parameter '{param_name}' (type: {direct_param_type}) via direct 'type'.") + return [param_name], direct_param_type, param_spec, param_name + + self.logger.info(f"_find_first_simple_type_parameter: No suitable simple type field found for {param_location} parameters.") + return None + + def _find_required_parameter_name(self, param_in: str) -> Optional[str]: + """ + Finds the name of the first required parameter in the specified location ('query', 'header', 'path'). + Args: + param_in: The location of the parameter (e.g., "query", "header", "path"). + Returns: + The name of the first required parameter found, or None. + """ + parameters = self.endpoint_spec.get("parameters", []) + if not isinstance(parameters, list): + self.logger.warning(f"'parameters' in endpoint_spec is not a list, cannot find required {param_in} parameter.") + return None + + for param_spec in parameters: + if (isinstance(param_spec, dict) and + param_spec.get("in") == param_in and + param_spec.get("required") is True): + param_name = param_spec.get("name") + if param_name: + self.logger.info(f"Found required '{param_in}' parameter: '{param_name}'.") + return param_name + + self.logger.info(f"No required '{param_in}' parameter found in endpoint_spec.") + return None + + def expect_error_response( + self, + response_context: APIResponseContext, + expected_status_codes: List[int], + expected_error_code_in_body: Optional[Union[str, int]] = None, + error_code_field_name: str = "code", + context_message_prefix: str = "Error response validation" + ) -> List[ValidationResult]: + """ + Validates if the response matches expected error conditions. + + Args: + response_context: The API response context. + expected_status_codes: A list of expected HTTP status codes (e.g., [400, 422]). + expected_error_code_in_body: Optional. A specific error code expected in the response body. + error_code_field_name: The name of the field in the JSON response body that contains the error code. + context_message_prefix: Prefix for logging and result messages. + + Returns: + A list of ValidationResult objects. + """ + results = [] + status_code = response_context.status_code + json_content = response_context.json_content + + if status_code in expected_status_codes: + msg = f"{context_message_prefix}: Received expected status code {status_code}." + if expected_error_code_in_body is not None: + if isinstance(json_content, dict): + error_code_in_response = json_content.get(error_code_field_name) + if error_code_in_response == expected_error_code_in_body: + results.append(self.passed(f"{msg} Specific error code '{expected_error_code_in_body}' (field: '{error_code_field_name}') found in response body.")) + elif error_code_in_response is not None: + results.append(ValidationResult(passed=True, # Still counts as a valid error status, but code mismatch is noted + message=f"{msg} Status code is as expected, but error code in body ('{error_code_field_name}': '{error_code_in_response}') does not match expected '{expected_error_code_in_body}'.", + details={"response_body": json_content} + )) + else: # Error code field not found + results.append(ValidationResult(passed=True, # Status is good, but code presence is an issue + message=f"{msg} Status code is as expected, but did not find error code field '{error_code_field_name}' in response body.", + details={"response_body": json_content} + )) + else: # JSON content is not a dict + # Add a check for text_content before slicing + raw_text_detail = response_context.text_content[:500] if response_context.text_content else "(No text content)" + results.append(ValidationResult(passed=True, # Status is good, but body isn't inspectable for code + message=f"{msg} Status code is as expected, but response body is not a JSON object, so cannot check for error code '{error_code_field_name}'.", + details={"raw_response_text": raw_text_detail} + )) + else: # No specific error code in body to check, status code match is enough + results.append(self.passed(msg)) + else: + details = {"received_status_code": status_code, "expected_status_codes": expected_status_codes} + if isinstance(json_content, dict): + details["response_body"] = json_content + else: + # Add a check for text_content before slicing + raw_text_detail = response_context.text_content[:500] if response_context.text_content else "(No text content)" + details["raw_response_text"] = raw_text_detail + results.append(self.failed( + message=f"{context_message_prefix}: Expected status code to be one of {expected_status_codes}, but received {status_code}.", + details=details + )) + self.logger.warning(f"{self.id}: {context_message_prefix} failed. Expected status: {expected_status_codes}, Actual: {status_code}") + + return results \ No newline at end of file diff --git a/ddms_compliance_suite/test_orchestrator.py b/ddms_compliance_suite/test_orchestrator.py index fe774e6..27266a2 100644 --- a/ddms_compliance_suite/test_orchestrator.py +++ b/ddms_compliance_suite/test_orchestrator.py @@ -26,6 +26,7 @@ from .test_framework_core import ValidationResult, TestSeverity, APIRequestConte from .test_case_registry import TestCaseRegistry # 尝试导入 utils.schema_utils from .utils import schema_utils +from .utils.common_utils import format_url_with_path_params # 新增导入 # 尝试导入 LLMService,如果失败则允许,因为 LLM 功能是可选的 try: @@ -65,12 +66,17 @@ class ExecutedTestCaseResult: self.timestamp = datetime.datetime.now() def to_dict(self) -> Dict[str, Any]: + message="" + if self.message: + message = self.message + else: + message= ";".join([vp.message for vp in self.validation_points]) return { "test_case_id": self.test_case_id, "test_case_name": self.test_case_name, "test_case_severity": self.test_case_severity.value, # 使用枚举值 "status": self.status.value, - "message": self.message, + "message": message, "duration_seconds": self.duration, "timestamp": self.timestamp.isoformat(), "validation_points": [vp.details if vp.details else {"passed": vp.passed, "message": vp.message} for vp in self.validation_points] @@ -102,6 +108,7 @@ class TestResult: # 原来的 TestResult 被重构为 EndpointExecutionResult self.start_time = start_time if start_time else datetime.datetime.now() self.end_time: Optional[datetime.datetime] = None self.error_message: Optional[str] = None # 如果整个端点测试出错,记录错误信息 + self.message: Optional[str] = None def add_executed_test_case_result(self, result: ExecutedTestCaseResult): self.executed_test_cases.append(result) @@ -264,6 +271,7 @@ class TestSummary: "error_in_execution": self.test_cases_error, "skipped_during_endpoint_execution": self.test_cases_skipped_in_endpoint, "success_rate_percentage": f"{self.test_case_success_rate:.2f}", + }, "detailed_results": [result.to_dict() for result in self.detailed_results] } @@ -445,20 +453,33 @@ class APITestOrchestrator: recursion_depth: int = 0 ) -> Optional[Type[BaseModel]]: """ - 动态地从JSON Schema字典创建一个Pydantic模型类。 - 支持嵌套对象和数组。 - - Args: - schema: JSON Schema字典。 - model_name: 要创建的Pydantic模型的名称。 - recursion_depth: 当前递归深度,用于防止无限循环。 - - Returns: - 一个Pydantic BaseModel的子类,如果创建失败则返回None。 + Dynamically creates a Pydantic model from a JSON schema. + Handles nested schemas, arrays, and various OpenAPI/JSON Schema constructs. + Uses a cache (_dynamic_model_cache) to avoid redefining identical models. """ - MAX_RECURSION_DEPTH = 10 - if recursion_depth > MAX_RECURSION_DEPTH: - self.logger.error(f"创建Pydantic模型 '{model_name}' 时达到最大递归深度 {MAX_RECURSION_DEPTH}。可能存在循环引用。") + # This cache key generation might need refinement for very complex/deep schemas + # For now, using a combination of model_name and sorted schema keys/values + # Important: dicts are unhashable, so we convert to a sorted tuple of items for the cache key. + # This is a simplified cache key; a more robust approach might involve serializing the schema. + # schema_tuple_for_key = tuple(sorted(schema.items())) if isinstance(schema, dict) else schema + # cache_key = (model_name, schema_tuple_for_key, recursion_depth) # Might be too verbose/complex + + # Simpler cache key based on model_name only if we assume model_name is sufficiently unique + # for a given schema structure within a run. If schemas can change for the same model_name, + # this needs to be more sophisticated. + + # If model_name is unique per structure, this is fine. + # Let's assume model_name is carefully constructed to be unique for each distinct schema structure + # by the calling functions (e.g., _generate_data_from_schema, _build_object_schema_for_params). + + # Simplified approach: if a model with this exact name was already created, reuse it. + # This relies on the caller to ensure `model_name` is unique per schema structure. + if model_name in _dynamic_model_cache: + self.logger.debug(f"Reusing cached Pydantic model: {model_name}") + return _dynamic_model_cache[model_name] + + if recursion_depth > self.MAX_RECURSION_DEPTH_PYDANTIC: + self.logger.error(f"创建Pydantic模型 '{model_name}' 时达到最大递归深度 {self.MAX_RECURSION_DEPTH_PYDANTIC}。可能存在循环引用。") return None # 清理模型名称,使其成为有效的Python标识符 @@ -875,13 +896,15 @@ class APITestOrchestrator: final_url_template = endpoint_spec_dict.get('path', '') + # 添加日志:打印将要用于替换的路径参数 + self.logger.debug(f"Path parameters to be substituted: {current_path_params}") final_url = self.base_url + final_url_template for p_name, p_val in current_path_params.items(): placeholder = f"{{{p_name}}}" - if placeholder in final_url_template: # 替换基础路径模板中的占位符 + if placeholder in final_url_template: # 检查原始模板中是否存在占位符 final_url = final_url.replace(placeholder, str(p_val)) - # 注意: 如果 _prepare_initial_request_data 填充的 final_url 已经包含了 base_url,这里的拼接逻辑需要调整 - # 假设 final_url_template 只是 path string e.g. /users/{id} + # 添加日志:打印替换后的URL (在测试用例修改之前) + self.logger.debug(f"URL after path parameter substitution (before TC modify_request_url hook): {final_url}") # ---- 调用测试用例的 URL 修改钩子 ---- effective_url = final_url # 默认使用原始构建的URL @@ -1015,9 +1038,9 @@ class APITestOrchestrator: 根据API端点规范,准备初始的请求数据,包括URL(模板)、路径参数、查询参数、头部和请求体。 这些数据将作为测试用例中 generate_* 方法的输入。 """ - method = endpoint_spec.get('method', 'GET').upper() - path_template = endpoint_spec.get('path', '/') # 这是路径模板, e.g., /users/{id} - operation_id = endpoint_spec.get('operationId') or f"{method}_{path_template.replace('/', '_').replace('{', '_').replace('}','')}" + method = endpoint_spec.get("method", "GET").upper() + path_template = endpoint_spec.get("path", "/") + operation_id = endpoint_spec.get("operationId", path_template) # 使用 path 作为 operationId 的 fallback initial_path_params: Dict[str, Any] = {} initial_query_params: Dict[str, Any] = {} @@ -1317,31 +1340,70 @@ class APITestOrchestrator: endpoint_test_result.finalize_endpoint_test() return endpoint_test_result - applicable_test_case_classes = self.test_case_registry.get_applicable_test_cases( + applicable_test_case_classes_unordered = self.test_case_registry.get_applicable_test_cases( endpoint_method=endpoint.method.upper(), endpoint_path=endpoint.path ) - if not applicable_test_case_classes: + if not applicable_test_case_classes_unordered: self.logger.info(f"端点 '{endpoint_id}' 没有找到适用的自定义测试用例。") - endpoint_test_result.finalize_endpoint_test() + endpoint_test_result.finalize_endpoint_test() # 确保在返回前调用 return endpoint_test_result - self.logger.info(f"端点 '{endpoint_id}' 发现了 {len(applicable_test_case_classes)} 个适用的测试用例: {[tc.id for tc in applicable_test_case_classes]}") + # 根据 execution_order 排序测试用例 + applicable_test_case_classes = sorted( + applicable_test_case_classes_unordered, + key=lambda tc_class: tc_class.execution_order + ) + + self.logger.info(f"端点 '{endpoint_id}' 发现了 {len(applicable_test_case_classes)} 个适用的测试用例 (已排序): {[tc.id for tc in applicable_test_case_classes]}") + + critical_setup_test_failed = False + critical_setup_failure_reason = "" for tc_class in applicable_test_case_classes: - self.logger.debug(f"准备执行测试用例 '{tc_class.id}' for '{endpoint_id}'") - executed_case_result = self._execute_single_test_case( - test_case_class=tc_class, - endpoint_spec=endpoint, - global_api_spec=global_api_spec - ) - endpoint_test_result.add_executed_test_case_result(executed_case_result) - if executed_case_result.status.value == TestResult.Status.FAILED.value: - # 红色 - self.logger.debug(f"\033[91m ❌ 测试用例 '{tc_class.id}' 执行失败。\033[0m") + start_single_tc_time = time.monotonic() # 用于计算跳过测试用例的持续时间 + + if critical_setup_test_failed: + self.logger.warning(f"由于关键的前置测试用例失败,跳过测试用例 '{tc_class.id}' for '{endpoint_id}'. 原因: {critical_setup_failure_reason}") + skipped_tc_duration = time.monotonic() - start_single_tc_time + executed_case_result = ExecutedTestCaseResult( + test_case_id=tc_class.id, + test_case_name=tc_class.name, + test_case_severity=tc_class.severity, + status=ExecutedTestCaseResult.Status.SKIPPED, + validation_points=[], + message=f"由于关键的前置测试失败而被跳过: {critical_setup_failure_reason}", + duration=skipped_tc_duration + ) else: + self.logger.debug(f"准备执行测试用例 '{tc_class.id}' for '{endpoint_id}'") + executed_case_result = self._execute_single_test_case( + test_case_class=tc_class, + endpoint_spec=endpoint, + global_api_spec=global_api_spec + ) + + # 检查是否是关键测试用例以及是否失败 + if hasattr(tc_class, 'is_critical_setup_test') and tc_class.is_critical_setup_test: + if executed_case_result.status in [ExecutedTestCaseResult.Status.FAILED, ExecutedTestCaseResult.Status.ERROR]: + critical_setup_test_failed = True + critical_setup_failure_reason = f"关键测试 '{tc_class.id}' 失败 (状态: {executed_case_result.status.value})。消息: {executed_case_result.message}" + self.logger.error(f"关键的前置测试用例 '{tc_class.id}' for '{endpoint_id}' 失败。后续测试将被跳过。原因: {critical_setup_failure_reason}") + + endpoint_test_result.add_executed_test_case_result(executed_case_result) + + # 日志部分可以保持不变或根据需要调整 + if executed_case_result.status.value == ExecutedTestCaseResult.Status.FAILED.value: + self.logger.debug(f"\033[91m ❌ 测试用例 '{tc_class.id}' 执行失败。\033[0m") + elif executed_case_result.status.value == ExecutedTestCaseResult.Status.PASSED.value : self.logger.debug(f"\033[92m ✅ 测试用例 '{tc_class.id}' 执行成功。\033[0m") + # 对于SKIPPED和ERROR状态,可以添加不同颜色的日志 + elif executed_case_result.status.value == ExecutedTestCaseResult.Status.SKIPPED.value: + self.logger.debug(f"\033[93m ⏭️ 测试用例 '{tc_class.id}' 被跳过。\033[0m") # 黄色 + elif executed_case_result.status.value == ExecutedTestCaseResult.Status.ERROR.value: + self.logger.debug(f"\033[91m 💥 测试用例 '{tc_class.id}' 执行时发生错误。\033[0m") # 红色 (与FAILED相同或不同) + self.logger.debug(f"测试用例 '{tc_class.id}' 执行完毕,状态: {executed_case_result.status.value}") endpoint_test_result.finalize_endpoint_test() diff --git a/ddms_compliance_suite/utils/__pycache__/common_utils.cpython-312.pyc b/ddms_compliance_suite/utils/__pycache__/common_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a06e2f01659a934184407222bfb2c36e688f8bc0 GIT binary patch literal 2590 zcma)8Yitx%6uxt3pY3i7rM7n2z?6qWLuCatX{x+2MkwW3iuJK9JJWXCePw2r+U+bf z4J06~g#>K{8j2C97D6=!Nh}W^KTP~Hq$c7>q6wWX{&IyHP5tA!Go9^PW8zKroO|v) z=R1#k?w$SC?ao6mhF3n@oN^-cfC%QWO-~*-!lVyzh@--&!QfN_1u_of2;D$OEDaV4 zVZ@^r9nAzVIBy%Kj9G)7qj?8s;eqm&MqCEVoRxPp+Bn-0OM|nWs<8h;RBJ1+YS|nL zN-Dh}+OE3e0jb$9@sW5qAn|IxF2(~wAR?+ZftM0OG>8osI&}f1;rF--R{M~QQrL-P zs%1Ki98EMlEo?@wZ$aoa&`;4R3rETHSx9eyPFZEEj1MBgE8`Y|IcvyP$!adi7BkV| z>1a~8yHYaCh+3e)vj<1(o-DEz{8?oL)HYx@aVXSXV?k2BY1Kk9n>9GQjI;i1vP~$@ z@mM%Z8AQ$@WANgXZ9wyMkNGln77aLNyvletT8yMQru7me)THb=xbw`N8P2(MEVpb2 z+ydzda|h~PYR+f4S$ESX_|LWpg(T7$`rrz6yg3AWAX{JA-i5ijDf=ON8zp&6U5K*$ ze@0nEP-pNc)P+pEHuNU_3TmS&<|X=|Ve%Ll<2P?loE}Q|o*ch*cH+#Dho4>3ZXMBj zyVCEBqz6Z}(O#|l-MU>h#(H|_LVDo#gU&9)^wtUOQdcGOj}~6T`Vt~9h`tWOUglE1 z5Og<)gn`I1x@}IMujyb7RkoU0xoUMK!y2j}vVj9ZHf2~my_PYdL2DY7?C0r#8-ymY zTAz`u{t;3&qjewEP7Z55gX1@QCazq9JhLhNI@&$1=fU^{UW_G#AP=!}DKp6|nsF)r zg{7VBnYcWn^}eMYy{>hR0p*z4i!(l2pNY}vAEC*RJE#Pm2tbxcvIQBd3h6U!VgM|SpVbH1x>YlY zA~1nKwYSe}mroe&0LPS=OOPrVqm7L20p(&?&1RdeIH;35z%tqgA3yx`;;*A;a+?lz ztMpxnMmsmtn8uMBhd@G3AHSs?8zG_eUV{cUeI`q{g+wtFZPN8~%9kvH(g+MmJX@LC z=|Iwb*R|eL6Q|FE&x!LFe>wf$!)w>7nTi6{syDA{7kItcDlJNaY757jns`CAa{Pfr zlZpjiwKs;MTp%1)?QH=e3hq_MR=)j3L5P7GuQN+HBuc8Km2Vf-yuE>Nf;YCEFTNS% z<5DOVt#AnB!4=4>s?rG|tmf(Y`lHYS5q>C6nQ1UoZxrpim$RGRH+k|BUPx6HomypssTPvEubL>Vv2f3kB^279ap85df% z`g^wOE?YImRzE^E=T3arwfNYU{``C11^vnX@X#W~^YpQ;_X<7z!Mla!_e#q8T2HkO zF25pq&tUO<@>6Q`3!Xwj0(o(rC#+8dk3%GWE71wZ7M-**-D)*i3zuNz!FxKv^5 zl)Yi4E}}#Z1HcAcOK{d3aNF^IA_d_80|E5*ki()Ft8oC znW${XA;L;ph?%n$Lpch|l=-VhR*o!Io_pyV_npH^S^ZeSKIIL+;_&}iNL17LUsWz!SP6YC|La>k(XA>{g8285E*E`zp7YfL>n-B)bhX_)G`9dI5 zju#>^E)nL}3M`1^?~S+#NQR~;>H#YF5jlTC-k+VGW2N6aJ$Id+{;DzOl1^L3vYaX$ e5;F+co#H#eZ&u%F{$hbHDtqcD$+GYi;QS43r6qd+ literal 0 HcmV?d00001 diff --git a/ddms_compliance_suite/utils/__pycache__/schema_utils.cpython-312.pyc b/ddms_compliance_suite/utils/__pycache__/schema_utils.cpython-312.pyc index 5165dc7ca22b45918734f8f3a25853293d0df63d..f71d8128893868a2d8196828c01c156efeab0a54 100644 GIT binary patch delta 13869 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 W;$lI@&3YxgjND&1GZ`7x!D<1|DME+< diff --git a/ddms_compliance_suite/utils/common_utils.py b/ddms_compliance_suite/utils/common_utils.py new file mode 100644 index 0000000..5ac3d20 --- /dev/null +++ b/ddms_compliance_suite/utils/common_utils.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +import logging +import re +from typing import Dict, Any + +logger = logging.getLogger(__name__) + +def format_url_with_path_params(path_template: str, path_params: Dict[str, Any]) -> str: + """ + 使用提供的路径参数格式化URL路径模板。 + 例如, path_template='/users/{userId}/items/{itemId}' + path_params={'userId': 123, 'itemId': 'abc'} + -> '/users/123/items/abc' + + Args: + path_template: 包含占位符的URL路径,例如 /resource/{id}。 + path_params: 包含占位符名称及其值的字典。 + + Returns: + 格式化后的URL路径。 + """ + url = path_template + try: + # 优先使用 .format(**path_params) 如果所有占位符都能匹配 + # 这要求 path_params 中的键与模板中的占位符完全对应 + # url = path_template.format(**path_params) # 更简洁,但如果参数不完全匹配会报错 + + # 使用正则表达式逐个替换更安全,可以处理部分参数或额外参数的情况 + for param_name, param_value in path_params.items(): + placeholder = f"{{{param_name}}}" + if placeholder in url: + url = url.replace(placeholder, str(param_value)) + else: + # Log if a path param was provided but not found in template. Could be optional. + logger.debug(f"Path parameter '{param_name}' provided but placeholder '{placeholder}' not found in template '{path_template}'.") + + # 检查是否还有未替换的占位符 (可选,但推荐) + remaining_placeholders = re.findall(r"({[^{}]+?})", url) + if remaining_placeholders: + logger.warning(f"URL '{url}' 中仍有未替换的路径参数占位符: {remaining_placeholders}。原始模板: '{path_template}', 提供参数: {path_params}") + + except KeyError as e: + logger.error(f"格式化URL路径 '{path_template}' 失败:路径参数 '{e}' 未在提供的 path_params 中找到。可用参数: {list(path_params.keys())}") + # 根据需要,这里可以选择是返回原始模板还是抛出异常 + # return path_template + raise ValueError(f"Missing path parameter {e} for URL template {path_template}") from e + except Exception as e: + logger.error(f"格式化URL路径 '{path_template}' 时发生未知错误: {e}") + raise # 或者返回原始模板 + + return url \ No newline at end of file diff --git a/ddms_compliance_suite/utils/schema_utils.py b/ddms_compliance_suite/utils/schema_utils.py index d4656e5..035f618 100644 --- a/ddms_compliance_suite/utils/schema_utils.py +++ b/ddms_compliance_suite/utils/schema_utils.py @@ -271,4 +271,342 @@ def util_remove_value_at_path( return data_container, None, False logger.error(f"[Util] util_remove_value_at_path 未能在循环内按预期返回。路径: {'.'.join(map(str,path))}") - return data_container, None, False \ No newline at end of file + return data_container, None, False + +def util_set_value_at_path( + data_container: Any, + path: List[Union[str, int]], + new_value: Any, + # logger_param: Optional[logging.Logger] = None +) -> Tuple[Any, bool]: + """ + (框架辅助方法) 在嵌套的字典/列表中为指定路径设置新值。 + 如果路径中的某些部分不存在,会尝试创建它们 (字典会创建,列表会尝试填充到指定索引,但需谨慎)。 + 返回 (修改后的容器, 是否成功)。 + """ + # effective_logger = logger_param or logger + if not path: + logger.error("[Util] util_set_value_at_path: 路径不能为空。") + # 如果路径为空,是否应该用 new_value 替换整个 data_container? + # 当前行为:返回原始容器和失败状态,因为路径通常指向容器内部。 + # 如果要支持替换整个容器,需要明确此行为。 + if data_container is None and new_value is not None: # 特殊情况:如果原始容器是None,且路径为空,则新值成为容器 + logger.info("[Util] util_set_value_at_path: 路径为空,原始容器为None,新值将作为新容器返回。") + return new_value, True + elif data_container is not None and new_value is None and not path: # 路径为空,新值为None,则清空容器 + logger.info("[Util] util_set_value_at_path: 路径为空,新值为None,容器将被清空 (返回None)。") + return None, True + # 对于路径为空且两者都不是None的情况,目前返回失败,因为通常期望有路径。 + # 或者可以考虑直接返回 new_value,意味着整个对象被替换。 + # logger.info(f"[Util] util_set_value_at_path: Path is empty. Replacing entire container.") + # return new_value, True # 备选行为:替换整个对象 + return data_container, False + + # 深拷贝以避免修改原始输入,除非原始输入是None + container_copy = copy.deepcopy(data_container) if data_container is not None else None + + current_level = container_copy + + try: + for i, key_or_index in enumerate(path): + is_last_element = (i == len(path) - 1) + + if is_last_element: + if isinstance(key_or_index, str): + if not isinstance(current_level, dict): + # 如果当前层级不是字典 (例如是None,或是被意外替换为其他类型),无法设置键值对 + logger.error(f"[Util] util_set_value_at_path: 路径的最后一部分 '{key_or_index}' (string key) 期望父级是字典,但找到 {type(current_level)}。路径: {'.'.join(map(str,path))}") + # 尝试强制转换为字典?这可能不是预期行为。 + # 如果 current_level 是 None 且它是根 (container_copy is None),则初始化 container_copy + if current_level is None and i == 0: # 路径只有一级,且容器本身是None + container_copy = {} + current_level = container_copy + else: # 更深层级的None或类型错误 + return data_container, False + current_level[key_or_index] = new_value + logger.info(f"[Util] 在路径 {'.'.join(map(str,path))} (键 '{key_or_index}') 处设置值为 '{new_value}'") + return container_copy, True + elif isinstance(key_or_index, int): # key_or_index is an integer (list index) + if not isinstance(current_level, list): + logger.error(f"[Util] util_set_value_at_path: 路径的最后一部分索引 '{key_or_index}' 期望父级是列表,但找到 {type(current_level)}。路径: {'.'.join(map(str,path))}") + if current_level is None and i == 0: # 路径只有一级,且容器本身是None + container_copy = [None] * (key_or_index + 1) # 创建足够长度的列表 + current_level = container_copy + else: + return data_container, False + elif isinstance(key_or_index, int): + # 确保列表足够长以容纳索引 + while len(current_level) <= key_or_index: + current_level.append(None) # 用 None 填充直到达到所需长度 + current_level[key_or_index] = new_value + logger.info(f"[Util] 在路径 {'.'.join(map(str,path))} (索引 '{key_or_index}') 处设置值为 '{new_value}'") + return container_copy, True + else: + logger.error(f"[Util] util_set_value_at_path: 路径的最后一部分 '{key_or_index}' 类型未知。路径: {'.'.join(map(str,path))}") + return data_container, False + else: # Not the last element, traverse deeper + next_key_or_index_is_int = isinstance(path[i+1], int) + + if isinstance(key_or_index, str): # Current path part is a dictionary key + if not isinstance(current_level, dict): + # 如果在根级别且容器是None,则初始化为字典 + if current_level is None and i == 0: + container_copy = {} + current_level = container_copy + else: + logger.error(f"[Util] util_set_value_at_path: 路径期望字典,但在 '{key_or_index}' 处找到 {type(current_level)}。路径: {'.'.join(map(str,path[:i+1]))}") + return data_container, False + if key_or_index not in current_level or current_level[key_or_index] is None or \ + (next_key_or_index_is_int and not isinstance(current_level[key_or_index], list)) or \ + (not next_key_or_index_is_int and not isinstance(current_level[key_or_index], dict)): + # 如果键不存在,或值为None,或类型与下一路径部分不匹配,则创建/重置 + logger.debug(f"[Util] util_set_value_at_path: 在路径 '{key_or_index}' 处创建/重置结构。下一个是索引: {next_key_or_index_is_int}") + current_level[key_or_index] = [] if next_key_or_index_is_int else {} + current_level = current_level[key_or_index] + elif isinstance(key_or_index, int): # Current path part is a list index + if not isinstance(current_level, list): + if current_level is None and i == 0: + container_copy = [] + current_level = container_copy + else: + logger.error(f"[Util] util_set_value_at_path: 路径期望列表以应用索引 '{key_or_index}',但找到 {type(current_level)}。路径: {'.'.join(map(str,path[:i+1]))}") + return data_container, False + elif isinstance(key_or_index, int): + # 确保列表足够长以容纳索引,并确保该索引处的元素是正确的类型 (list/dict) + while len(current_level) <= key_or_index: + current_level.append(None) # 用 None 填充 + if current_level[key_or_index] is None or \ + (next_key_or_index_is_int and not isinstance(current_level[key_or_index], list)) or \ + (not next_key_or_index_is_int and not isinstance(current_level[key_or_index], dict)): + logger.debug(f"[Util] util_set_value_at_path: 在列表索引 '{key_or_index}' 处创建/重置结构。下一个是索引: {next_key_or_index_is_int}") + current_level[key_or_index] = [] if next_key_or_index_is_int else {} + current_level = current_level[key_or_index] + else: + logger.error(f"[Util] util_set_value_at_path: 路径部分 '{key_or_index}' 类型未知 ({type(key_or_index)})。路径: {'.'.join(map(str,path[:i+1]))}") + return data_container, False + except Exception as e: + logger.error(f"[Util] 在准备设置字段路径 {'.'.join(map(str,path))} 的值时发生错误: {e}", exc_info=True) + return data_container, False + + # Should not be reached if logic is correct, path must have at least one element by initial check. + logger.error(f"[Util] util_set_value_at_path 未能在循环内按预期返回。路径: {'.'.join(map(str,path))}") + return data_container, False + +def generate_mismatched_value( + original_type: Optional[str], + original_value: Any, + field_schema: Optional[Dict[str, Any]], + logger_param: Optional[logging.Logger] = None +) -> Any: + """ + (框架辅助方法) 根据原始数据类型、原始值和字段 schema 生成一个类型不匹配的值。 + 主要用于类型不匹配的测试用例。 + Args: + original_type: 字段的原始 OpenAPI 类型 (e.g., "string", "integer"). + original_value: 字段的原始值 (当前未直接用于生成逻辑,但可供未来扩展). + field_schema: 字段的 schema 定义,用于检查如 "enum" 之类的约束。 + logger_param: 可选的 logger 实例。 + Returns: + 一个与 original_type 不匹配的值。 + """ + effective_logger = logger_param or logger + + # 优先考虑 schema 中的 enum,选择一个不在 enum 中且类型不匹配的值 + if field_schema and "enum" in field_schema and isinstance(field_schema["enum"], list): + enum_values = field_schema["enum"] + if original_type == "string": + if 123 not in enum_values: return 123 + if False not in enum_values: return False + # 如果数字和布尔都在枚举中,尝试一个与已知枚举值不同的字符串 + # (虽然这仍然是字符串类型,但目的是为了触发非枚举值的验证) + # 或者,如果目的是严格类型不匹配,这里应该返回非字符串。 + # 当前逻辑倾向于返回一个肯定非字符串的值。 + elif original_type == "integer": + if "not-an-integer" not in enum_values: return "not-an-integer" + if 3.14 not in enum_values: return 3.14 + elif original_type == "number": # Includes float/double + if "not-a-number" not in enum_values: return "not-a-number" + elif original_type == "boolean": + if "not-a-boolean" not in enum_values: return "not-a-boolean" + if 1 not in enum_values: return 1 + # 如果枚举覆盖了所有简单备选,则回退到下面的通用逻辑 + + # 通用类型不匹配逻辑 (当 enum 不存在或 enum 检查未返回时) + if original_type == "string": + return 12345 # Number instead of string + elif original_type == "integer": + return "not-an-integer" # String instead of integer + elif original_type == "number": # Includes float/double + return "not-a-number" # String instead of number + elif original_type == "boolean": + return "not-a-boolean" # String instead of boolean + elif original_type == "array": + return {"value": "not-an-array"} # Object instead of array + elif original_type == "object": + return ["not", "an", "object"] # Array instead of object + + effective_logger.warning(f"generate_mismatched_value: 原始类型 '{original_type}' 未知或无法生成不匹配值。将返回固定字符串 'mismatch_test_default'。") + return "mismatch_test_default" # Fallback for unknown types + +def build_object_schema_for_params(params_spec_list: List[Dict[str, Any]], model_name_base: str, logger_param: Optional[logging.Logger] = None) -> Tuple[Optional[Dict[str, Any]], str]: + """ + 从参数规范列表构建一个对象的JSON schema,主要用于请求体、查询参数或头部的聚合。 + Args: + params_spec_list: 参数规范的列表 (例如,OpenAPI参数对象列表)。 + model_name_base: 用于生成动态模型名称的基础字符串。 + logger_param: 可选的 logger 实例。 + Returns: + 一个元组,包含 (构建的JSON object schema 或 None, 模型名称字符串)。 + """ + effective_logger = logger_param or logger # Use passed logger or module logger + + if not params_spec_list: + effective_logger.debug(f"参数列表为空,无需为 '{model_name_base}' 构建对象 schema。") + return None, f"{model_name_base}EmptyParams" + + properties = {} + required_fields = [] + + for param_spec in params_spec_list: + param_name = param_spec.get("name") + if not param_name: + effective_logger.warning(f"参数规范缺少 'name' 字段,已跳过: {param_spec}") + continue + + # 从参数规范中提取 schema (OpenAPI 3.x) + param_schema = param_spec.get("schema") + if not param_schema: + # 尝试兼容 OpenAPI 2.0 (Swagger) 的情况,其中类型信息直接在参数级别 + # 例如: type, format, items, default, enum 等 + # https://swagger.io/specification/v2/#parameterObject + # 注意: 这种兼容性可能不完整,因为很多属性需要映射 + compatible_schema = {} + if "type" in param_spec: + compatible_schema["type"] = param_spec["type"] + if "format" in param_spec: + compatible_schema["format"] = param_spec["format"] + if "items" in param_spec: # for array types + compatible_schema["items"] = param_spec["items"] + if "default" in param_spec: + compatible_schema["default"] = param_spec["default"] + if "enum" in param_spec: + compatible_schema["enum"] = param_spec["enum"] + # 其他如 description, example 等也可以考虑加入 + if compatible_schema: # 如果至少收集到了一些类型信息 + param_schema = compatible_schema + effective_logger.debug(f"参数 '{param_name}' 没有 'schema' 字段,但从顶级字段构建了兼容 schema: {param_schema}") + else: + effective_logger.warning(f"参数 '{param_name}' 缺少 'schema' 字段且无法构建兼容schema,已跳过。规范: {param_spec}") + continue + + properties[param_name] = param_schema + if param_spec.get("required", False): + required_fields.append(param_name) + + if not properties: + effective_logger.debug(f"未能从参数列表为 '{model_name_base}' 提取任何属性。") + return None, f"{model_name_base}NoProps" + + final_schema: Dict[str, Any] = { + "type": "object", + "properties": properties + } + if required_fields: + final_schema["required"] = required_fields + + # 生成一个稍微独特的名字,以防多个操作有相同的 param_type + # 例如 OperationIdQueryRequest, OperationIdHeaderRequest + model_name = f"{model_name_base.replace(' ', '')}Params" + effective_logger.debug(f"为 '{model_name_base}' 构建的对象 schema: {final_schema}, 模型名: {model_name}") + return final_schema, model_name + +def find_first_simple_type_field_recursive( + current_schema: Dict[str, Any], + current_path: Optional[List[Union[str, int]]] = None, + # full_api_spec_for_refs: Optional[Dict[str, Any]] = None, # Schema is expected to be pre-resolved + logger_param: Optional[logging.Logger] = None +) -> Optional[Tuple[List[Union[str, int]], str, Dict[str, Any]]]: + """ + 递归地在给定的 schema 中查找第一个简单类型的字段 (string, integer, number, boolean)。 + 这包括查找嵌套在对象或数组中的简单类型字段。 + + Args: + current_schema: 当前正在搜索的 schema 部分 (应为字典)。 + current_path: 到达当前 schema 的路径列表 (用于构建完整路径)。 + logger_param: 可选的 logger 实例。 + + Returns: + 一个元组 (field_path, field_type, field_schema) 如果找到,否则为 None。 + field_path 是一个列表,表示从根 schema 到找到的字段的路径。 + field_type 是字段的原始类型字符串 (e.g., "string")。 + field_schema 是该字段自身的 schema 定义。 + """ + effective_logger = logger_param or logger # Use module logger if specific one not provided + path_so_far = current_path if current_path is not None else [] + + if not isinstance(current_schema, dict): + effective_logger.debug(f"Schema at path {'.'.join(map(str, path_so_far))} is not a dict, cannot search further.") + return None + + schema_type = current_schema.get("type") + # effective_logger.debug(f"Searching in path: {'.'.join(map(str, path_so_far))}, Schema Type: '{schema_type}'") + + if schema_type == "object": + properties = current_schema.get("properties", {}) + for name, prop_schema in properties.items(): + if not isinstance(prop_schema, dict): + effective_logger.debug(f"Property '{name}' at path {'.'.join(map(str, path_so_far + [name]))} has non-dict schema. Skipping.") + continue + + prop_type = prop_schema.get("type") + if prop_type in ["string", "integer", "number", "boolean"]: + field_path = path_so_far + [name] + effective_logger.info(f"Found simple type field: Path={'.'.join(map(str, field_path))}, Type={prop_type}") + return field_path, prop_type, prop_schema + elif prop_type == "object": + found_in_nested_object = find_first_simple_type_field_recursive( + prop_schema, + path_so_far + [name], + logger_param=effective_logger + ) + if found_in_nested_object: + return found_in_nested_object + elif prop_type == "array": + items_schema = prop_schema.get("items") + if isinstance(items_schema, dict): + # Look for simple type or object within array items + item_type = items_schema.get("type") + if item_type in ["string", "integer", "number", "boolean"]: + field_path = path_so_far + [name, 0] # Target first item of the array + effective_logger.info(f"Found simple type field in array item: Path={'.'.join(map(str, field_path))}, Type={item_type}") + return field_path, item_type, items_schema + elif item_type == "object": + # Path to the first item of the array, then recurse into that item's object schema + found_in_array_item_object = find_first_simple_type_field_recursive( + items_schema, + path_so_far + [name, 0], + logger_param=effective_logger + ) + if found_in_array_item_object: + return found_in_array_item_object + + elif schema_type == "array": # If the current_schema itself is an array (e.g., root schema is an array) + items_schema = current_schema.get("items") + if isinstance(items_schema, dict): + item_type = items_schema.get("type") + if item_type in ["string", "integer", "number", "boolean"]: + field_path = path_so_far + [0] # Target first item of this root/current array + effective_logger.info(f"Found simple type field in root/current array item: Path={'.'.join(map(str, field_path))}, Type={item_type}") + return field_path, item_type, items_schema + elif item_type == "object": + # Path to the first item of this root/current array, then recurse + found_in_root_array_item_object = find_first_simple_type_field_recursive( + items_schema, + path_so_far + [0], + logger_param=effective_logger + ) + if found_in_root_array_item_object: + return found_in_root_array_item_object + + # effective_logger.debug(f"No simple type field found at path {'.'.join(map(str, path_so_far))}") + return None \ No newline at end of file diff --git a/log.txt b/log.txt index d457983..c452097 100644 --- a/log.txt +++ b/log.txt @@ -1,2371 +1,2317 @@ -2025-05-26 17:10:18,933 - __main__ - DEBUG - 已启用详细日志模式 -2025-05-26 17:10:18,933 - __main__ - INFO - args.api_key: sk-0213c70194624703a1d0d80e0f762b0e -2025-05-26 17:10:18,933 - ddms_compliance_suite.test_orchestrator - INFO - 初始化 TestCaseRegistry,扫描目录: ./custom_testcases -2025-05-26 17:10:18,933 - ddms_compliance_suite.test_case_registry - INFO - 开始从目录 './custom_testcases' 及其子目录发现测试用例... -2025-05-26 17:10:18,934 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: basic_checks 从 ./custom_testcases/basic_checks.py -2025-05-26 17:10:18,934 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-STATUS-001' (基本状态码 200 检查) 来自类 'StatusCode200Check' (路径: ./custom_testcases/basic_checks.py) -2025-05-26 17:10:18,934 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: https_mandatory_case 从 ./custom_testcases/compliance_catalog/security/https_mandatory_case.py -2025-05-26 17:10:18,934 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) 来自类 'HTTPSMandatoryCase' (路径: ./custom_testcases/compliance_catalog/security/https_mandatory_case.py) -2025-05-26 17:10:18,935 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: url_llm_checks 从 ./custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py -2025-05-26 17:10:18,935 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: http_method_usage_case 从 ./custom_testcases/compliance_catalog/normative_spec/http_method_usage_case.py -2025-05-26 17:10:18,935 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: missing_required_field_query_case 从 ./custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py -2025-05-26 17:10:18,935 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) 来自类 'MissingRequiredFieldQueryCase' (路径: ./custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py) -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: type_mismatch_body_case 从 ./custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) 来自类 'TypeMismatchBodyCase' (路径: ./custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py) -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: missing_required_field_body_case 从 ./custom_testcases/compliance_catalog/error_handling/missing_required_field_body_case.py -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) 来自类 'MissingRequiredFieldBodyCase' (路径: ./custom_testcases/compliance_catalog/error_handling/missing_required_field_body_case.py) -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: type_mismatch_query_param_case 从 ./custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) 来自类 'TypeMismatchQueryParamCase' (路径: ./custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py) -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: schema_validation_case 从 ./custom_testcases/compliance_catalog/core_functionality/schema_validation_case.py -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) 来自类 'ResponseSchemaValidationCase' (路径: ./custom_testcases/compliance_catalog/core_functionality/schema_validation_case.py) -2025-05-26 17:10:18,936 - ddms_compliance_suite.test_case_registry - INFO - 已根据 execution_order (主要) 和类名 (次要) 对 7 个测试用例类进行了排序。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - INFO - 测试用例发现完成。总共注册了 7 个独特的测试用例 (基于ID)。发现并排序了 7 个测试用例类。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - INFO - TestCaseRegistry 初始化完成,发现 7 个测试用例类。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.llm_utils.llm_service - INFO - LLMService initialized for model 'qwen-plus' at https://dashscope.aliyuncs.com/compatible-mode/v1 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - INFO - LLMService 已成功初始化,模型: qwen-plus。 -2025-05-26 17:10:18,937 - __main__ - INFO - 从YAPI文件运行测试: assets/doc/井筒API示例_simple.json -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - INFO - 从YAPI文件加载API定义: assets/doc/井筒API示例_simple.json -2025-05-26 17:10:18,937 - ddms_compliance_suite.input_parser.parser - INFO - Parsing YAPI spec from: assets/doc/井筒API示例_simple.json -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} (数据推送接口) -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,937 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,938 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,938 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,938 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,973 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,973 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,973 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,973 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,974 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,975 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,975 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,975 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,975 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:18,976 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,976 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'schema', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_schema'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_version'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'schema', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_schema'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_version'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'schema', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_schema'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_version'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'schema', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_schema'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_version'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,976 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,976 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - INFO - TC-ERROR-4001-QUERY: 由于未识别到目标查询参数字段,跳过类型不匹配测试。 -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.0005788803100585938 -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,977 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,977 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:18,977 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['properties', 'type'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['properties', 'type'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['properties', 'type'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['properties', 'type'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Original): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Resolved): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Resolved Property Type: 'boolean' -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'isSearchCount' (原始类型: 'boolean') FOUND! -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): isSearchCount,原始类型: boolean -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,978 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['isSearchCount'], 原始类型: boolean -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['isSearchCount'] (键 'isSearchCount') 处,将值从 'True' 修改为 'not-a-boolean' (原始类型: boolean) -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,978 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:18,979 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.isSearchCount, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:18,979 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0006577968597412109 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 -2025-05-26 17:10:18,979 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段。 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,979 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,980 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,980 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,980 - testcase.TC-ERROR-4003-QUERY - INFO - 在此端点规范中未找到可用于测试 "必填查询参数缺失" 的字段。 -2025-05-26 17:10:18,980 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。Target param to remove: None -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,980 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) -2025-05-26 17:10:18,981 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 测试完成,最终状态: 失败 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} (地质单元列表查询) -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,981 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,981 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,982 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,982 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,983 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,983 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,983 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,983 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,984 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,984 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,984 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,984 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,985 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:18,985 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,985 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,985 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,985 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} -2025-05-26 17:10:18,985 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:18,985 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'pageNo', 'in': 'query', 'required': False, 'description': '页码(从1开始)', 'schema': {'type': 'string'}}, {'name': 'pageSize', 'in': 'query', 'required': False, 'description': '分页大小(最大值200)', 'schema': {'type': 'string'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'pageNo', 'in': 'query', 'required': False, 'description': '页码(从1开始)', 'schema': {'type': 'string'}}, {'name': 'pageSize', 'in': 'query', 'required': False, 'description': '分页大小(最大值200)', 'schema': {'type': 'string'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'pageNo' -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'pageNo' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): pageNo,原始类型: string -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'pageNo', 'in': 'query', 'required': False, 'description': '页码(从1开始)', 'schema': {'type': 'string'}}, {'name': 'pageSize', 'in': 'query', 'required': False, 'description': '分页大小(最大值200)', 'schema': {'type': 'string'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'pageNo', 'in': 'query', 'required': False, 'description': '页码(从1开始)', 'schema': {'type': 'string'}}, {'name': 'pageSize', 'in': 'query', 'required': False, 'description': '分页大小(最大值200)', 'schema': {'type': 'string'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'pageNo' -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'pageNo' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): pageNo,原始类型: string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,986 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - 准备修改查询参数以测试类型不匹配。目标路径: ['pageNo'], 原始类型: string -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - INFO - 在查询参数路径 ['pageNo'] (键 'pageNo') 处,将值从 'query_val_pageNo' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,986 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: 类型不匹配测试失败。字段: query.pageNo, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.0005140304565429688 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,987 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['properties', 'type'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['properties', 'type'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['properties', 'type'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['properties', 'type'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Original): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Resolved): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Resolved Property Type: 'boolean' -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'isSearchCount' (原始类型: 'boolean') FOUND! -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): isSearchCount,原始类型: boolean -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,987 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['isSearchCount'], 原始类型: boolean -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['isSearchCount'] (键 'isSearchCount') 处,将值从 'True' 修改为 'not-a-boolean' (原始类型: boolean) -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:18,987 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:18,988 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.isSearchCount, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:18,988 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0005140304565429688 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] -2025-05-26 17:10:18,988 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 -2025-05-26 17:10:18,988 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段。 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,988 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,989 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,990 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,990 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:18,990 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,991 - testcase.TC-ERROR-4003-QUERY - INFO - 在此端点规范中未找到可用于测试 "必填查询参数缺失" 的字段。 -2025-05-26 17:10:18,991 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。Target param to remove: None -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] -2025-05-26 17:10:18,991 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) -2025-05-26 17:10:18,997 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 测试完成,最终状态: 失败 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据修改) -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,997 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:18,997 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:18,998 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,998 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:18,998 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:18,999 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:18,999 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:18,999 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:18,999 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:19,000 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'id' -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'id' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): id,原始类型: string -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'id' -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'id' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): id,原始类型: string -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,000 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - 准备修改查询参数以测试类型不匹配。目标路径: ['id'], 原始类型: string -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - INFO - 在查询参数路径 ['id'] (键 'id') 处,将值从 'dsid' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,000 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: 类型不匹配测试失败。字段: query.id, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.0005159378051757812 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['version', 'data'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Original): {'type': 'string'} -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Resolved): {'type': 'string'} -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Resolved Property Type: 'string' -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'version' (原始类型: 'string') FOUND! -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): version,原始类型: string -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,001 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['version'], 原始类型: string -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['version'] (键 'version') 处,将值从 'example_string' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,001 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,002 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.version, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,002 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0007779598236083984 -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,002 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,002 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['version', 'data'] -2025-05-26 17:10:19,002 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 策略2: 在数组属性 'data' (路径 root) 的元素内找到必填字段: 'bsflag'. 路径: ['data', 0, 'bsflag'] -2025-05-26 17:10:19,003 - testcase.TC-ERROR-4003-BODY - INFO - 必填字段缺失测试的目标字段 (请求体): 'data.0.bsflag' -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:19,003 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 从路径 'data.0.bsflag' 成功移除字段 'bsflag' (原值: '0.0')。 -2025-05-26 17:10:19,003 - testcase.TC-ERROR-4003-BODY - INFO - 为进行必填字段缺失测试,已通过工具方法从请求体中移除字段路径 'data.0.bsflag'。 -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=12345&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0?pageNo=query_val_pageNo&pageSize=query_val_pageSize (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=12345 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -2025-05-26 17:10:19,003 - testcase.TC-ERROR-4003-BODY - WARNING - 必填请求体字段缺失测试失败:期望状态码 [400, 422],实际为 500 (移除字段: body.data.0.bsflag)。 -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-BODY' 执行失败。 -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,003 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,004 - testcase.TC-ERROR-4003-QUERY - INFO - 必填字段缺失测试的目标字段 (查询参数): 'id' -2025-05-26 17:10:19,004 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: id -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 array 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 number/integer 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].wellId): example_string -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) -2025-05-26 17:10:19,004 - testcase.TC-ERROR-4003-QUERY - INFO - 为进行必填查询参数缺失测试,已从查询参数中移除 'id' (原值: 'dsid')。 -2025-05-26 17:10:19,004 - testcase.TC-ERROR-4003-QUERY - WARNING - 必填查询参数缺失测试失败:期望状态码 [400, 422],实际为 500。移除的参数:'id' -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-QUERY' 执行失败。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据删除) -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,004 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,005 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,005 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:19,005 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,006 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,006 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,007 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,007 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,007 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,007 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:19,008 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'id' -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'id' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): id,原始类型: string -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'id', 'in': 'query', 'required': True, 'description': '主键id的key', 'schema': {'type': 'string', 'example': 'dsid'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 检查查询参数: 'id' -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 查询参数 'id' 包含嵌套 schema,尝试在其内部查找简单类型字段。 -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - INFO - 目标字段(查询参数 - schema为简单类型): id,原始类型: string -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,008 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - 准备修改查询参数以测试类型不匹配。目标路径: ['id'], 原始类型: string -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - INFO - 在查询参数路径 ['id'] (键 'id') 处,将值从 'dsid' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:19,008 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: 类型不匹配测试失败。字段: query.id, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.0005249977111816406 -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,009 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,009 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['version', 'data'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Original): {'type': 'string', 'title': '版本号'} -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Resolved): {'type': 'string', 'title': '版本号'} -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Resolved Property Type: 'string' -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'version' (原始类型: 'string') FOUND! -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): version,原始类型: string -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,010 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['version'], 原始类型: string -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['version'] (键 'version') 处,将值从 'example_string' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,010 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,011 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.version, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,011 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0006301403045654297 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,011 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['version', 'data'] -2025-05-26 17:10:19,011 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 -2025-05-26 17:10:19,011 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段。 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,011 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,012 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,012 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,012 - testcase.TC-ERROR-4003-QUERY - INFO - 必填字段缺失测试的目标字段 (查询参数): 'id' -2025-05-26 17:10:19,012 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: id -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) -2025-05-26 17:10:19,013 - testcase.TC-ERROR-4003-QUERY - INFO - 为进行必填查询参数缺失测试,已从查询参数中移除 'id' (原值: 'dsid')。 -2025-05-26 17:10:19,013 - testcase.TC-ERROR-4003-QUERY - WARNING - 必填查询参数缺失测试失败:期望状态码 [400, 422],实际为 500。移除的参数:'id' -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-QUERY' 执行失败。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据添加) -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,013 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,013 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,014 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,014 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,014 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,015 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,015 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,015 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,015 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:19,016 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,016 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,016 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-QUERY - INFO - TC-ERROR-4001-QUERY: 由于未识别到目标查询参数字段,跳过类型不匹配测试。 -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.0005030632019042969 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 POST /api/dms/{dms_instance_code}/v1/cd_geo_unit 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['$schema', 'type', 'properties'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['version', 'data'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Original): {'type': 'string', 'title': '交换模型版本号'} -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Property Schema (Resolved): {'type': 'string', 'title': '交换模型版本号'} -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'version', Resolved Property Type: 'string' -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'version' (原始类型: 'string') FOUND! -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): version,原始类型: string -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,017 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,017 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['version'], 原始类型: string -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['version'] (键 'version') 处,将值从 'example_string' 修改为 '12345' (原始类型: string) -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.version, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,018 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0007770061492919922 -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,018 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,019 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['version', 'data'] -2025-05-26 17:10:19,019 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 策略2: 在数组属性 'data' (路径 root) 的元素内找到必填字段: 'bsflag'. 路径: ['data', 0, 'bsflag'] -2025-05-26 17:10:19,019 - testcase.TC-ERROR-4003-BODY - INFO - 必填字段缺失测试的目标字段 (请求体): 'data.0.bsflag' -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,019 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 从路径 'data.0.bsflag' 成功移除字段 'bsflag' (原值: '0.0')。 -2025-05-26 17:10:19,019 - testcase.TC-ERROR-4003-BODY - INFO - 为进行必填字段缺失测试,已通过工具方法从请求体中移除字段路径 'data.0.bsflag'。 -2025-05-26 17:10:19,019 - testcase.TC-ERROR-4003-BODY - WARNING - 必填请求体字段缺失测试失败:期望状态码 [400, 422],实际为 500 (移除字段: body.data.0.bsflag)。 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-BODY' 执行失败。 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,019 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,020 - testcase.TC-ERROR-4003-QUERY - INFO - 在此端点规范中未找到可用于测试 "必填查询参数缺失" 的字段。 -2025-05-26 17:10:19,020 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: None -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) -2025-05-26 17:10:19,020 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} (地质单元查询详情) -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,020 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 发现了 7 个适用的测试用例: ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,021 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,021 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,021 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,022 - testcase.TC-STATUS-001 - WARNING - 状态码验证失败: 期望 200, 实际 500 for https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-STATUS-001' 执行失败。 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 失败 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,022 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,022 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,022 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,023 - testcase.TC-CORE-FUNC-001 - INFO - 状态码 500 的响应无JSON体也无定义的schema。跳过schema验证。 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,023 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,023 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,023 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,024 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id' 不是HTTPS。跳过此测试用例的URL修改。 -2025-05-26 17:10:19,024 - testcase.TC-SECURITY-001 - INFO - HTTPS强制性检查已跳过,因为有效URL不是HTTP。 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-SECURITY-001' 执行成功。 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 通过 -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,024 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,024 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> STARTED -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY _try_find_mismatch_target_in_query >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'id', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_id'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'id', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_id'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> STARTED -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - DEBUG - 开始为端点 GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} 初始化查询参数类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - CRITICAL - TC-ERROR-4001-QUERY __INIT__ >>> Parameters to be processed: [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'id', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_id'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - DEBUG - 传入的参数列表 (在 TC-ERROR-4001-QUERY中): [{'name': 'dms_instance_code', 'in': 'path', 'required': True, 'description': '注册实例code\n井筒中心 well_kd_wellbore_ideas01', 'schema': {'type': 'string', 'example': 'example_dms_instance_code'}}, {'name': 'version', 'in': 'path', 'required': True, 'description': '交换模型版本', 'schema': {'type': 'string', 'example': '1.0.0'}}, {'name': 'id', 'in': 'path', 'required': True, 'description': '', 'schema': {'type': 'string', 'example': 'example_id'}}, {'name': 'tenant-id', 'in': 'header', 'required': True, 'description': 'tenant-id (Only:undefined)', 'schema': {'type': 'string'}}, {'name': 'Authorization', 'in': 'header', 'required': True, 'description': 'Authorization (Only:undefined)', 'schema': {'type': 'string'}}] -2025-05-26 17:10:19,025 - testcase.TC-ERROR-4001-QUERY - INFO - 最终,在端点 GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} 的查询参数中,均未找到可用于测试类型不匹配的字段。 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,025 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,026 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,026 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,032 - testcase.TC-ERROR-4001-QUERY - INFO - TC-ERROR-4001-QUERY: 由于未识别到目标查询参数字段,跳过类型不匹配测试。 -2025-05-26 17:10:19,032 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.006711006164550781 -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,032 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,032 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,032 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,032 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,032 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,032 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,033 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - CRITICAL - TC-ERROR-4001-BODY __INIT__ >>> STARTED -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - 开始为端点 GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} 初始化请求体类型不匹配测试的目标字段查找。 -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - 从顶层 'requestBody' 中获取到 schema: ['properties', 'type'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - 最终用于检查的请求体 schema: ['properties', 'type'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Enter _find_target_field_in_schema for base_path: '', schema_to_search keys: ['properties', 'type'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Resolved Schema Type: 'object', Keys: ['properties', 'type'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: '', Type is 'object'. Checking properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Original): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Property Schema (Resolved): {'default': True, 'description': '是否统计总条数', 'type': 'boolean'} -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Path: 'isSearchCount', Resolved Property Type: 'boolean' -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - INFO - 目标字段(请求体): 'isSearchCount' (原始类型: 'boolean') FOUND! -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - INFO - 类型不匹配测试的目标字段(请求体): isSearchCount,原始类型: boolean -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,033 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - 准备修改请求体以测试类型不匹配。目标路径: ['isSearchCount'], 原始类型: boolean -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - INFO - 在路径 ['isSearchCount'] (键 'isSearchCount') 处,将值从 'True' 修改为 'not-a-boolean' (原始类型: boolean) -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] -2025-05-26 17:10:19,033 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: -2025-05-26 17:10:19,034 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: 类型不匹配测试失败。字段: body.isSearchCount, 期望状态码: [400, 422], 实际: 500。 -2025-05-26 17:10:19,034 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0006771087646484375 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] -2025-05-26 17:10:19,034 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 -2025-05-26 17:10:19,034 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段。 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,034 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=12345 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit?id=dsid (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -2025-05-26 17:10:19,035 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,035 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... -2025-05-26 17:10:19,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) -2025-05-26 17:10:19,036 - testcase.TC-ERROR-4003-QUERY - INFO - 在此端点规范中未找到可用于测试 "必填查询参数缺失" 的字段。 -2025-05-26 17:10:19,036 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。Target param to remove: None -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] -2025-05-26 17:10:19,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) -2025-05-26 17:10:19,037 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 -2025-05-26 17:10:19,037 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 -2025-05-26 17:10:19,037 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 -2025-05-26 17:10:19,037 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 测试完成,最终状态: 失败 -2025-05-26 17:10:19,037 - __main__ - INFO - 测试结果已保存为JSON: test_report.json -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) -API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id failed: HTTPSConnectionPool(host='127.0.0.1', port=4523): Max retries exceeded with url: /m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1000)'))) +2025-05-27 03:17:32,164 - __main__ - DEBUG - 已启用详细日志模式 +2025-05-27 03:17:32,164 - __main__ - INFO - args.api_key: sk-0213c70194624703a1d0d80e0f762b0e +2025-05-27 03:17:32,164 - ddms_compliance_suite.test_orchestrator - INFO - 初始化 TestCaseRegistry,扫描目录: ./custom_testcases +2025-05-27 03:17:32,164 - ddms_compliance_suite.test_case_registry - INFO - 开始从目录 './custom_testcases' 及其子目录发现测试用例... +2025-05-27 03:17:32,164 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: basic_checks 从 ./custom_testcases/basic_checks.py +2025-05-27 03:17:32,164 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-STATUS-001' (基本状态码 200 检查) 来自类 'StatusCode200Check' (路径: ./custom_testcases/basic_checks.py) +2025-05-27 03:17:32,165 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: basic_api_sanity_check_case 从 ./custom_testcases/setup_checks/basic_api_sanity_check_case.py +2025-05-27 03:17:32,165 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: https_mandatory_case 从 ./custom_testcases/compliance_catalog/security/https_mandatory_case.py +2025-05-27 03:17:32,165 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) 来自类 'HTTPSMandatoryCase' (路径: ./custom_testcases/compliance_catalog/security/https_mandatory_case.py) +2025-05-27 03:17:32,166 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: url_llm_checks 从 ./custom_testcases/compliance_catalog/normative_spec/url_llm_checks.py +2025-05-27 03:17:32,166 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: http_method_usage_case 从 ./custom_testcases/compliance_catalog/normative_spec/http_method_usage_case.py +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: missing_required_field_query_case 从 ./custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) 来自类 'MissingRequiredFieldQueryCase' (路径: ./custom_testcases/compliance_catalog/error_handling/missing_required_field_query_case.py) +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: type_mismatch_body_case 从 ./custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) 来自类 'TypeMismatchBodyCase' (路径: ./custom_testcases/compliance_catalog/error_handling/type_mismatch_body_case.py) +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: missing_required_field_body_case 从 ./custom_testcases/compliance_catalog/error_handling/missing_required_field_body_case.py +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) 来自类 'MissingRequiredFieldBodyCase' (路径: ./custom_testcases/compliance_catalog/error_handling/missing_required_field_body_case.py) +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: type_mismatch_query_param_case 从 ./custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py +2025-05-27 03:17:32,167 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) 来自类 'TypeMismatchQueryParamCase' (路径: ./custom_testcases/compliance_catalog/error_handling/type_mismatch_query_param_case.py) +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_case_registry - DEBUG - 成功导入模块: schema_validation_case 从 ./custom_testcases/compliance_catalog/core_functionality/schema_validation_case.py +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_case_registry - INFO - 已注册测试用例: 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) 来自类 'ResponseSchemaValidationCase' (路径: ./custom_testcases/compliance_catalog/core_functionality/schema_validation_case.py) +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_case_registry - INFO - 已根据 execution_order (主要) 和类名 (次要) 对 7 个测试用例类进行了排序。 +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_case_registry - INFO - 测试用例发现完成。总共注册了 7 个独特的测试用例 (基于ID)。发现并排序了 7 个测试用例类。 +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_orchestrator - INFO - TestCaseRegistry 初始化完成,发现 7 个测试用例类。 +2025-05-27 03:17:32,168 - ddms_compliance_suite.llm_utils.llm_service - INFO - LLMService initialized for model 'qwen-plus' at https://dashscope.aliyuncs.com/compatible-mode/v1 +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_orchestrator - INFO - LLMService 已成功初始化,模型: qwen-plus。 +2025-05-27 03:17:32,168 - __main__ - INFO - 从YAPI文件运行测试: assets/doc/井筒API示例_simple.json +2025-05-27 03:17:32,168 - ddms_compliance_suite.test_orchestrator - INFO - 从YAPI文件加载API定义: assets/doc/井筒API示例_simple.json +2025-05-27 03:17:32,168 - ddms_compliance_suite.input_parser.parser - INFO - Parsing YAPI spec from: assets/doc/井筒API示例_simple.json +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,169 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} (数据推送接口) +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}'。 +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,170 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,170 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,171 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,171 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,271 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,271 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,271 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,271 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,272 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,313 - testcase.TC-CORE-FUNC-001 - INFO - 响应包含JSON体,但在API规范中未找到针对状态码 200 的JSON schema。跳过schema验证。 +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,313 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,313 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,314 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,314 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,314 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,314 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,314 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,314 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。 +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,314 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,315 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,315 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:32,360 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:32,360 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:32,360 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:32,360 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,360 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,361 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,361 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:32,361 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: No suitable simple type field found for query parameters. +2025-05-27 03:17:32,361 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No suitable simple type query parameter found for type mismatch test. +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,361 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No target field or original type identified for query param type mismatch. Skipping query param modification. +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,362 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,362 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,404 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Skipped type mismatch (query) validation: No target query parameter was identified. +2025-05-27 03:17:32,404 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.04132199287414551 +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,404 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,404 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=isSearchCount, Type=boolean +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=isSearchCount, Type=boolean +2025-05-27 03:17:32,405 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): isSearchCount, Original Type: boolean +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,405 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['isSearchCount'], Original type: boolean +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value 'not-a-boolean' for original type 'boolean' at path 'isSearchCount'. +2025-05-27 03:17:32,406 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 isSearchCount (键 'isSearchCount') 处设置值为 'not-a-boolean' +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:32,406 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,406 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,406 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,449 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '89'. (Field: body.isSearchCount) +2025-05-27 03:17:32,449 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.04273700714111328 +2025-05-27 03:17:32,449 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:32,449 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:32,449 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,449 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] +2025-05-27 03:17:32,450 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 +2025-05-27 03:17:32,451 - testcase.TC-ERROR-4003-BODY - INFO - No removable (required) field path found in 'request body' schema. +2025-05-27 03:17:32,451 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段(通过基类方法)。 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,451 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,452 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,503 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,503 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('schema') 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('version') 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,503 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,503 - testcase.TC-ERROR-4003-QUERY - INFO - No required 'query' parameter found in endpoint_spec. +2025-05-27 03:17:32,504 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 初始化。Target param to remove: None +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': schema = example_schema +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': version = example_version +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716'. It will be handled separately. +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716': application/json +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.isSearchCount): True +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.fields[0]): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.key): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.logic): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.filter.symbol): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_message_push_schema_version_135716] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_message_push_schema_version_135716_body.query.sort). Properties: [] +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_message_push_schema_version_135716' (type: ) +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'schema': 'example_schema', 'version': 'example_version'} +2025-05-27 03:17:32,504 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version +2025-05-27 03:17:32,550 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}' 测试完成,最终状态: 失败 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} (地质单元列表查询) +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}'。 +2025-05-27 03:17:32,550 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,551 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,551 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,551 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,552 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,590 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,590 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,590 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,591 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,591 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,591 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,591 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,591 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,591 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,592 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,592 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,593 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,642 - testcase.TC-CORE-FUNC-001 - INFO - 响应包含JSON体,但在API规范中未找到针对状态码 200 的JSON schema。跳过schema验证。 +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,643 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,643 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。 +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,643 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,644 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,645 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:32,689 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,690 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,690 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,691 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} +2025-05-27 03:17:32,691 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:32,691 - testcase.TC-ERROR-4001-QUERY - DEBUG - _find_first_simple_type_parameter: Checking query parameter 'pageNo'. +2025-05-27 03:17:32,691 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: Found simple type query parameter 'pageNo' (type: string) via its 'schema'. +2025-05-27 03:17:32,691 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Target for type mismatch (query): Param='pageNo', Path='pageNo', Type='string' +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,691 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Preparing to modify query params for type mismatch. Target path: ['pageNo'], Original type: string +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Generated mismatched value '12345' for original type 'string' at query path 'pageNo'. +2025-05-27 03:17:32,692 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 pageNo (键 'pageNo') 处设置值为 '12345' +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Successfully set mismatched value in query params using util_set_value_at_path. +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,692 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,692 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,734 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: Failed. 当查询参数 'pageNo' (路径: 'pageNo') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '34'. (Query param: pageNo) +2025-05-27 03:17:32,734 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.04210209846496582 +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,735 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,735 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=isSearchCount, Type=boolean +2025-05-27 03:17:32,735 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=isSearchCount, Type=boolean +2025-05-27 03:17:32,736 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): isSearchCount, Original Type: boolean +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,736 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['isSearchCount'], Original type: boolean +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value 'not-a-boolean' for original type 'boolean' at path 'isSearchCount'. +2025-05-27 03:17:32,737 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 isSearchCount (键 'isSearchCount') 处设置值为 'not-a-boolean' +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:32,737 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,737 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,737 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,774 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '23'. (Field: body.isSearchCount) +2025-05-27 03:17:32,774 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.03721332550048828 +2025-05-27 03:17:32,774 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:32,774 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:32,774 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,774 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] +2025-05-27 03:17:32,775 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 +2025-05-27 03:17:32,775 - testcase.TC-ERROR-4003-BODY - INFO - No removable (required) field path found in 'request body' schema. +2025-05-27 03:17:32,775 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段(通过基类方法)。 +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,775 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,776 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,808 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 +2025-05-27 03:17:32,808 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 +2025-05-27 03:17:32,808 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,809 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('pageNo') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('pageSize') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('tenant-id') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[5] ('Authorization') 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,809 - testcase.TC-ERROR-4003-QUERY - INFO - No required 'query' parameter found in endpoint_spec. +2025-05-27 03:17:32,809 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 初始化。Target param to remove: None +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': version = 1.0.0 +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageNo = query_val_pageNo +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': pageSize = query_val_pageSize +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751'. It will be handled separately. +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751': application/json +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 使用 schema 中的 'default' 值 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.isSearchCount): True +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.dataRegions[0]): example_string +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,809 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.fields[0]): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.key): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.logic): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.filter.symbol): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFields[0]): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.key): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.logic): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751_body.query.sort). Properties: [] +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_version_135751' (type: ) +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0'} +2025-05-27 03:17:32,810 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0 +2025-05-27 03:17:32,840 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}' 测试完成,最终状态: 失败 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据修改) +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:32,840 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,841 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,841 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,865 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,865 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,866 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,866 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,891 - testcase.TC-CORE-FUNC-001 - INFO - 将根据路径 'responses.200.content.application/json.schema' 的schema验证响应体。 +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,894 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,894 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,895 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,895 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,895 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:32,917 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,917 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:32,917 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:32,917 - testcase.TC-ERROR-4001-QUERY - DEBUG - _find_first_simple_type_parameter: Checking query parameter 'id'. +2025-05-27 03:17:32,917 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: Found simple type query parameter 'id' (type: string) via its 'schema'. +2025-05-27 03:17:32,917 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Target for type mismatch (query): Param='id', Path='id', Type='string' +2025-05-27 03:17:32,917 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Preparing to modify query params for type mismatch. Target path: ['id'], Original type: string +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Generated mismatched value '12345' for original type 'string' at query path 'id'. +2025-05-27 03:17:32,918 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 id (键 'id') 处设置值为 '12345' +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Successfully set mismatched value in query params using util_set_value_at_path. +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,918 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,918 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,944 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: Failed. 当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '36'. (Query param: id) +2025-05-27 03:17:32,944 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.026329755783081055 +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=id, Type=string +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=id, Type=string +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): id, Original Type: string +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['id'], Original type: string +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value '12345' for original type 'string' at path 'id'. +2025-05-27 03:17:32,945 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 id (键 'id') 处设置值为 '12345' +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,945 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:32,945 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:32,966 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'id' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '38'. (Field: body.id) +2025-05-27 03:17:32,966 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.0208740234375 +2025-05-27 03:17:32,966 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:32,966 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:32,966 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,966 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,967 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: ['id', 'version'], 属性: ['id', 'version'] +2025-05-27 03:17:32,967 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 策略1: 在路径 root 找到可直接移除的必填字段: 'id' +2025-05-27 03:17:32,967 - testcase.TC-ERROR-4003-BODY - INFO - Found a removable field path in 'request body' schema: 'id' +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,967 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 从路径 'id' 成功移除字段 'id' (原值: 'example_string')。 +2025-05-27 03:17:32,967 - testcase.TC-ERROR-4003-BODY - INFO - 为进行必填字段缺失测试,已通过工具方法从请求体中移除字段路径 'id'。 +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,967 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:32,995 - testcase.TC-ERROR-4003-BODY - INFO - TC-ERROR-4003-BODY: Passed (Fallback). HTTP status 200 (4xx) with matching business code '4003'. (Removed field: body.id) +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:32,995 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:32,996 - testcase.TC-ERROR-4003-QUERY - INFO - Found required 'query' parameter: 'id'. +2025-05-27 03:17:32,996 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: id +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': id = dsid +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': tenant-id = header_val_tenant-id +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749'. It will be handled separately. +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749': application/json +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 object 类型数据 for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body). Properties: ['id', 'version'] +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.id): example_string +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - [put__api_dms_dms_instance_code_v1_cd_geo_unit_135749] 生成 string 类型数据 ('') for (context: put__api_dms_dms_instance_code_v1_cd_geo_unit_135749_body.version): example_string +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'put__api_dms_dms_instance_code_v1_cd_geo_unit_135749' (type: ) +2025-05-27 03:17:32,996 - testcase.TC-ERROR-4003-QUERY - INFO - 为进行必填查询参数缺失测试,已从查询参数中移除 'id' (原值: 'dsid')。 +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:32,996 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,035 - testcase.TC-ERROR-4003-QUERY - WARNING - TC-ERROR-4003-QUERY: Failed. 当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '37'. (Removed query param: id) +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-QUERY' 执行失败。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据删除) +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,035 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,036 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,036 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,037 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,037 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,060 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,060 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:33,060 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,061 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,062 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,062 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,085 - testcase.TC-CORE-FUNC-001 - INFO - 将根据路径 'responses.200.content.application/json.schema' 的schema验证响应体。 +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,086 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,087 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,087 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,087 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:33,109 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,109 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,110 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,110 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,110 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,110 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,110 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,110 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:33,110 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:33,110 - testcase.TC-ERROR-4001-QUERY - DEBUG - _find_first_simple_type_parameter: Checking query parameter 'id'. +2025-05-27 03:17:33,110 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: Found simple type query parameter 'id' (type: string) via its 'schema'. +2025-05-27 03:17:33,111 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Target for type mismatch (query): Param='id', Path='id', Type='string' +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,111 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,112 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Preparing to modify query params for type mismatch. Target path: ['id'], Original type: string +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Generated mismatched value '12345' for original type 'string' at query path 'id'. +2025-05-27 03:17:33,112 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 id (键 'id') 处设置值为 '12345' +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - [TC-ERROR-4001-QUERY] Successfully set mismatched value in query params using util_set_value_at_path. +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:33,112 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,112 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,112 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,137 - testcase.TC-ERROR-4001-QUERY - WARNING - TC-ERROR-4001-QUERY: Failed. 当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '57'. (Query param: id) +2025-05-27 03:17:33,138 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.025182008743286133 +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-QUERY' 执行失败。 +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,138 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=version, Type=string +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=version, Type=string +2025-05-27 03:17:33,139 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): version, Original Type: string +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,139 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,140 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['version'], Original type: string +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value '12345' for original type 'string' at path 'version'. +2025-05-27 03:17:33,140 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 version (键 'version') 处设置值为 '12345' +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:33,140 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,140 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,140 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,188 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '2'. (Field: body.version) +2025-05-27 03:17:33,188 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.047577857971191406 +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,188 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,189 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['version', 'data'] +2025-05-27 03:17:33,189 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 +2025-05-27 03:17:33,189 - testcase.TC-ERROR-4003-BODY - INFO - No removable (required) field path found in 'request body' schema. +2025-05-27 03:17:33,189 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段(通过基类方法)。 +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,189 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,190 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,190 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,190 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,225 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('id') 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('tenant-id') 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('Authorization') 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,225 - testcase.TC-ERROR-4003-QUERY - INFO - Found required 'query' parameter: 'id'. +2025-05-27 03:17:33,225 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: id +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,225 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial query param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': id = dsid +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750'. It will be handled separately. +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750': application/json +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 object 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.version): example_string +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 array 类型数据 for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - [delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750] 生成 string 类型数据 ('') for (context: delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750_body.data[0]): example_string +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'delete__api_dms_dms_instance_code_v1_cd_geo_unit_135750' (type: ) +2025-05-27 03:17:33,226 - testcase.TC-ERROR-4003-QUERY - INFO - 为进行必填查询参数缺失测试,已从查询参数中移除 'id' (原值: 'dsid')。 +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,226 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,250 - testcase.TC-ERROR-4003-QUERY - WARNING - TC-ERROR-4003-QUERY: Failed. 当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '49'. (Removed query param: id) +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-QUERY' 执行失败。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据添加) +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit'。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,250 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,250 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,251 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,278 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,279 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,280 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,280 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,281 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,281 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,281 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,307 - testcase.TC-CORE-FUNC-001 - INFO - 响应包含JSON体,但在API规范中未找到针对状态码 200 的JSON schema。跳过schema验证。 +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,307 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,308 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。 +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,308 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,308 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:33,335 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,335 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:33,335 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:33,335 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: No suitable simple type field found for query parameters. +2025-05-27 03:17:33,335 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No suitable simple type query parameter found for type mismatch test. +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,335 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No target field or original type identified for query param type mismatch. Skipping query param modification. +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,336 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,336 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,368 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Skipped type mismatch (query) validation: No target query parameter was identified. +2025-05-27 03:17:33,368 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.031355857849121094 +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,368 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=version, Type=string +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=version, Type=string +2025-05-27 03:17:33,369 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): version, Original Type: string +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,369 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['version'], Original type: string +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value '12345' for original type 'string' at path 'version'. +2025-05-27 03:17:33,370 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 version (键 'version') 处设置值为 '12345' +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,370 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,370 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,401 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '58'. (Field: body.version) +2025-05-27 03:17:33,401 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.030153989791870117 +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,401 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,402 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['version', 'data'] +2025-05-27 03:17:33,402 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 策略2: 在数组属性 'data' (路径 root) 的元素内找到必填字段: 'bsflag'. 路径: ['data', 0, 'bsflag'] +2025-05-27 03:17:33,402 - testcase.TC-ERROR-4003-BODY - INFO - Found a removable field path in 'request body' schema: 'data.0.bsflag' +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,402 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,403 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 从路径 'data.0.bsflag' 成功移除字段 'bsflag' (原值: '0.0')。 +2025-05-27 03:17:33,403 - testcase.TC-ERROR-4003-BODY - INFO - 为进行必填字段缺失测试,已通过工具方法从请求体中移除字段路径 'data.0.bsflag'。 +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,403 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,426 - testcase.TC-ERROR-4003-BODY - WARNING - TC-ERROR-4003-BODY: Failed. 当移除必填请求体字段 'data.0.bsflag' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '97'. (Removed field: body.data.0.bsflag) +2025-05-27 03:17:33,426 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4003-BODY' 执行失败。 +2025-05-27 03:17:33,426 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,426 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('tenant-id') 的 schema... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('Authorization') 的 schema... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '201' content 'application/json' 的 schema... +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,427 - testcase.TC-ERROR-4003-QUERY - INFO - No required 'query' parameter found in endpoint_spec. +2025-05-27 03:17:33,427 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 初始化。Target param to remove: None +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' +2025-05-27 03:17:33,427 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748'. It will be handled separately. +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748': application/json +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body). Properties: ['version', 'data'] +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.version): example_string +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 array 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data). Items schema: {'type': 'object', 'properties': {'bsflag': {'type': 'number', 'title': '必填字段删除标记'}, 'wellCommonName': {'type': 'string'}, 'wellId': {'type': 'string'}, 'dataRegion': {'type': 'string'}}, 'required': ['bsflag', 'wellCommonName', 'wellId', 'dataRegion']}, minItems: 1 +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 object 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0]). Properties: ['bsflag', 'wellCommonName', 'wellId', 'dataRegion'] +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 number/integer 类型数据 for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].bsflag): 0.0 +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellCommonName): example_string +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].wellId): example_string +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - [post__api_dms_dms_instance_code_v1_cd_geo_unit_135748] 生成 string 类型数据 ('') for (context: post__api_dms_dms_instance_code_v1_cd_geo_unit_135748_body.data[0].dataRegion): example_string +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'post__api_dms_dms_instance_code_v1_cd_geo_unit_135748' (type: ) +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code'} +2025-05-27 03:17:33,428 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit +2025-05-27 03:17:33,450 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'POST /api/dms/{dms_instance_code}/v1/cd_geo_unit' 测试完成,最终状态: 失败 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_orchestrator - INFO - 开始为端点测试: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} (地质单元查询详情) +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-STATUS-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-CORE-FUNC-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-SECURITY-001' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,450 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_case_registry - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 适用于端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}'。 +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 发现了 7 个适用的测试用例 (已排序): ['TC-STATUS-001', 'TC-CORE-FUNC-001', 'TC-SECURITY-001', 'TC-ERROR-4001-QUERY', 'TC-ERROR-4001-BODY', 'TC-ERROR-4003-BODY', 'TC-ERROR-4003-QUERY'] +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-STATUS-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,451 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,451 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: StatusCode200Check 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,452 - testcase.TC-STATUS-001 - INFO - 测试用例 TC-STATUS-001 (基本状态码 200 检查) 已针对端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-STATUS-001' (基本状态码 200 检查) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,452 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,453 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,454 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,454 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,454 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,477 - testcase.TC-STATUS-001 - INFO - 状态码验证通过: 200 == 200 for http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,477 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-STATUS-001' 执行成功。 +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-STATUS-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-CORE-FUNC-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,478 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,478 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: ResponseSchemaValidationCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,479 - testcase.TC-CORE-FUNC-001 - INFO - 测试用例 'TC-CORE-FUNC-001' 已为端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-CORE-FUNC-001' (Response Body JSON Schema Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,479 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,480 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,481 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,505 - testcase.TC-CORE-FUNC-001 - INFO - 将根据路径 'responses.200.content.application/json.schema' 的schema验证响应体。 +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-CORE-FUNC-001' 执行成功。 +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-CORE-FUNC-001' 执行完毕,状态: 通过 +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-SECURITY-001' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,506 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,506 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: HTTPSMandatoryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,507 - testcase.TC-SECURITY-001 - INFO - 测试用例 'TC-SECURITY-001' 已为端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。 +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-SECURITY-001' (HTTPS Protocol Mandatory Verification) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,507 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,508 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,509 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,509 - testcase.TC-SECURITY-001 - WARNING - 原始URL 'http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id' 不是HTTPS。跳过此测试用例的URL修改。 +2025-05-27 03:17:33,535 - testcase.TC-SECURITY-001 - ERROR - 安全漏洞:API允许通过HTTP成功响应 (200)。 +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-SECURITY-001' 执行失败。 +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-SECURITY-001' 执行完毕,状态: 失败 +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-QUERY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,536 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,536 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchQueryParamCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,537 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' initialized for endpoint: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} +2025-05-27 03:17:33,537 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Initializing: Looking for a simple type query parameter for type mismatch test. +2025-05-27 03:17:33,537 - testcase.TC-ERROR-4001-QUERY - INFO - _find_first_simple_type_parameter: No suitable simple type field found for query parameters. +2025-05-27 03:17:33,537 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No suitable simple type query parameter found for type mismatch test. +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-QUERY' (Error Code 4001 - Query Parameter Type Mismatch Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,537 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,538 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] No target field or original type identified for query param type mismatch. Skipping query param modification. +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - TC-ERROR-4001-QUERY is focused on query parameters, generate_request_body will not modify the body. +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,539 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Test case 'TC-ERROR-4001-QUERY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,539 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,571 - testcase.TC-ERROR-4001-QUERY - INFO - [TC-ERROR-4001-QUERY] Skipped type mismatch (query) validation: No target query parameter was identified. +2025-05-27 03:17:33,571 - testcase.TC-ERROR-4001-QUERY - DEBUG - Hook: check_performance, elapsed: 0.031649112701416016 +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4001-QUERY' 执行成功。 +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4001-BODY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,571 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,571 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,571 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,572 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,572 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,572 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,572 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: TypeMismatchBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' initialized for endpoint: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Initializing: Looking for a simple type field in request body for type mismatch test. +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - DEBUG - Found request body schema under content type: application/json +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - DEBUG - _find_simple_type_field_in_schema: Searching for simple type field in 'request body' schema... +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - INFO - Found simple type field: Path=isSearchCount, Type=boolean +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - INFO - _find_simple_type_field_in_schema: Found simple type field in 'request body': Path=isSearchCount, Type=boolean +2025-05-27 03:17:33,572 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Target field for type mismatch (body): isSearchCount, Original Type: boolean +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4001-BODY' (Error Code 4001 - Request Body Type Mismatch Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,572 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - TC-ERROR-4001-BODY is focused on request body, generate_query_params will not modify query parameters. +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: generate_headers, current keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Preparing to modify request body for type mismatch. Target path: ['isSearchCount'], Original type: boolean +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - INFO - [TC-ERROR-4001-BODY] Generated mismatched value 'not-a-boolean' for original type 'boolean' at path 'isSearchCount'. +2025-05-27 03:17:33,573 - ddms_compliance_suite.utils.schema_utils - INFO - [Util] 在路径 isSearchCount (键 'isSearchCount') 处设置值为 'not-a-boolean' +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - [TC-ERROR-4001-BODY] Successfully set mismatched value at path using util_set_value_at_path. +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,573 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: modify_request_url, original URL: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Test case 'TC-ERROR-4001-BODY' did not modify the URL via modify_request_url hook. +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_url, url: http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_headers, header keys: ['tenant-id', 'Content-Type', 'Accept'] +2025-05-27 03:17:33,573 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: validate_request_body, body type: +2025-05-27 03:17:33,630 - testcase.TC-ERROR-4001-BODY - WARNING - TC-ERROR-4001-BODY: Failed. 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '96'. (Field: body.isSearchCount) +2025-05-27 03:17:33,630 - testcase.TC-ERROR-4001-BODY - DEBUG - Hook: check_performance, elapsed: 0.05630636215209961 +2025-05-27 03:17:33,630 - ddms_compliance_suite.test_orchestrator - DEBUG -  ❌ 测试用例 'TC-ERROR-4001-BODY' 执行失败。 +2025-05-27 03:17:33,631 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4001-BODY' 执行完毕,状态: 失败 +2025-05-27 03:17:33,631 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-BODY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,632 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,632 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,632 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,632 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,632 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,632 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,633 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,633 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,633 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,633 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,633 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldBodyCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,634 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 递归查找路径: [], 当前层级必填字段: [], 属性: ['isSearchCount', 'query'] +2025-05-27 03:17:33,634 - ddms_compliance_suite.utils.schema_utils - DEBUG - [Util] 在路径 root 未通过任何策略找到可移除的必填字段。 +2025-05-27 03:17:33,634 - testcase.TC-ERROR-4003-BODY - INFO - No removable (required) field path found in 'request body' schema. +2025-05-27 03:17:33,634 - testcase.TC-ERROR-4003-BODY - INFO - 在请求体 schema 中未找到可用于测试 "必填字段缺失" 的字段(通过基类方法)。 +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-BODY' (Error Code 4003 - Missing Required Request Body Field Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,634 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,635 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,636 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,637 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,696 - testcase.TC-ERROR-4003-BODY - INFO - 由于未识别到可移除的必填请求体字段,跳过此测试用例的验证。 +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-BODY' 执行成功。 +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-BODY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备执行测试用例 'TC-ERROR-4003-QUERY' for 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - Successfully converted/retrieved global_api_spec (type: ) to dict using .spec attribute. +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - global_spec_dict keys for $ref resolution: ['yapi_categories'] +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - 开始为 endpoint_spec_dict (来自 ) 中的 schemas 进行 $ref 解析... +2025-05-27 03:17:33,696 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 requestBody content 'application/json' 的 schema... +2025-05-27 03:17:33,696 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/RdbQueryPageInput +2025-05-27 03:17:33,696 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/QueryVO +2025-05-27 03:17:33,696 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,696 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,697 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,697 - ddms_compliance_suite.utils.schema_utils - DEBUG - 因 discard_refs=True,丢弃 '$ref': #/components/schemas/FilterVO +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[0] ('dms_instance_code') 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[1] ('version') 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[2] ('id') 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[3] ('tenant-id') 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 parameters[4] ('Authorization') 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 正在解析 responses '200' content 'application/json' 的 schema... +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - INFO - Endpoint spec (来自 ) 中的 schemas $ref 解析完成。 +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - DEBUG - 准备实例化测试用例类: MissingRequiredFieldQueryCase 使用 endpoint_spec (keys: ['method', 'path', 'title', 'summary', 'description', 'operationId', 'tags', 'parameters', 'requestBody', 'responses', '_source_format', '_yapi_id', '_yapi_raw_data', '_global_api_spec_for_resolution']) 和 global_api_spec (keys: ['yapi_categories']) +2025-05-27 03:17:33,697 - testcase.TC-ERROR-4003-QUERY - INFO - No required 'query' parameter found in endpoint_spec. +2025-05-27 03:17:33,697 - testcase.TC-ERROR-4003-QUERY - INFO - 测试用例 TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) 已针对端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 初始化。Target param to remove: None +2025-05-27 03:17:33,697 - ddms_compliance_suite.test_orchestrator - INFO - 开始执行测试用例 'TC-ERROR-4003-QUERY' (Error Code 4003 - Missing Required Query Parameter Validation) for endpoint 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': dms_instance_code = example_dms_instance_code +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': version = 1.0.0 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial path param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': id = example_id +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial custom header param for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': tenant-id = header_val_tenant-id +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Skipping standard header 'Authorization' in parameter processing for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752'. It will be handled separately. +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Content-Type for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial Accept header for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752': application/json +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body). Properties: ['isSearchCount', 'query'] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 使用 schema 中的 'default' 值 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.isSearchCount): True +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query). Properties: ['dataRegions', 'fields', 'filter', 'groupFields', 'groupFilter', 'sort'] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions). Items schema: {'description': '数据域,如:JD、DG、TL', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.dataRegions[0]): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields). Items schema: {'description': '查询的字段', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.fields[0]): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.key): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.logic): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.realValue[0]). Properties: [] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.singleValue). Properties: [] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.subFilter[0]): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.filter.symbol): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields). Items schema: {'description': '分组字段group by', 'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFields[0]): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter). Properties: ['key', 'logic', 'realValue', 'singleValue', 'subFilter', 'symbol'] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.key): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.logic): example_string +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue). Items schema: {'description': '条件值', 'type': 'object', 'properties': {}}, minItems: 1 +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.realValue[0]). Properties: [] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.singleValue). Properties: [] +2025-05-27 03:17:33,698 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 array 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter). Items schema: {'type': 'string'}, minItems: 1 +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.subFilter[0]): example_string +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 string 类型数据 ('') for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.groupFilter.symbol): example_string +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - [get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752] 生成 object 类型数据 for (context: get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752_body.query.sort). Properties: [] +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - Initial request body generated for 'get__api_dms_dms_instance_code_v1_cd_geo_unit_version_id_135752' (type: ) +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - Path parameters to be substituted: {'dms_instance_code': 'example_dms_instance_code', 'version': '1.0.0', 'id': 'example_id'} +2025-05-27 03:17:33,699 - ddms_compliance_suite.test_orchestrator - DEBUG - URL after path parameter substitution (before TC modify_request_url hook): http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id +2025-05-27 03:17:33,725 - testcase.TC-ERROR-4003-QUERY - INFO - 由于未识别到可移除的必填查询参数,跳过此测试用例。 +2025-05-27 03:17:33,725 - ddms_compliance_suite.test_orchestrator - DEBUG -  ✅ 测试用例 'TC-ERROR-4003-QUERY' 执行成功。 +2025-05-27 03:17:33,726 - ddms_compliance_suite.test_orchestrator - DEBUG - 测试用例 'TC-ERROR-4003-QUERY' 执行完毕,状态: 通过 +2025-05-27 03:17:33,726 - ddms_compliance_suite.test_orchestrator - INFO - 端点 'GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}' 测试完成,最终状态: 失败 +2025-05-27 03:17:33,727 - __main__ - INFO - 测试结果已保存为JSON: test_report.json ===== 测试运行摘要 ===== -开始时间: 2025-05-26T17:10:18.937545 -结束时间: 2025-05-26T17:10:19.037161 -总耗时: 0.10 秒 +开始时间: 2025-05-27T03:17:32.169725 +结束时间: 2025-05-27T03:17:33.726074 +总耗时: 1.56 秒 --- 端点统计 --- 定义的端点总数: 6 @@ -2380,54 +2326,52 @@ API call to https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dm --- 测试用例统计 --- 适用的测试用例总数 (计划执行): 42 实际执行的测试用例总数: 42 - 通过: 23 - 失败: 19 + 通过: 24 + 失败: 18 执行错误 (测试用例代码问题): 0 跳过 (在端点内被跳过): 0 - 测试用例通过率: 54.76% + 测试用例通过率: 57.14% --- 失败的端点摘要 --- 端点: POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version} (数据推送接口) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'isSearchCount' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '89'. 端点: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version} (地质单元列表查询) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-QUERY (Error Code 4001 - Query Parameter Type Mismatch Validation) - - 验证点: 对查询参数 'pageNo' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当查询参数 'pageNo' (路径: 'pageNo') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '34'. - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'isSearchCount' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '23'. 端点: PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据修改) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-QUERY (Error Code 4001 - Query Parameter Type Mismatch Validation) - - 验证点: 对查询参数 'id' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '36'. - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'version' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 - - 测试用例失败: TC-ERROR-4003-BODY (Error Code 4003 - Missing Required Request Body Field Validation) - - 验证点: 当移除必填请求体字段 'data.0.bsflag' 时,期望API返回状态码 [400, 422] 中的一个,但实际收到 500。 + - 验证点: 当请求体字段 'id' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '38'. - 测试用例失败: TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) - - 验证点: 当移除必填查询参数 'id' 时,期望API返回状态码 [400, 422] 中的一个,但实际收到 500。 + - 验证点: 当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '37'. 端点: DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据删除) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-QUERY (Error Code 4001 - Query Parameter Type Mismatch Validation) - - 验证点: 对查询参数 'id' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '57'. - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'version' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '2'. - 测试用例失败: TC-ERROR-4003-QUERY (Error Code 4003 - Missing Required Query Parameter Validation) - - 验证点: 当移除必填查询参数 'id' 时,期望API返回状态码 [400, 422] 中的一个,但实际收到 500。 + - 验证点: 当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '49'. 端点: POST /api/dms/{dms_instance_code}/v1/cd_geo_unit (地质单元数据添加) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'version' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '58'. - 测试用例失败: TC-ERROR-4003-BODY (Error Code 4003 - Missing Required Request Body Field Validation) - - 验证点: 当移除必填请求体字段 'data.0.bsflag' 时,期望API返回状态码 [400, 422] 中的一个,但实际收到 500。 + - 验证点: 当移除必填请求体字段 'data.0.bsflag' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '97'. 端点: GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id} (地质单元查询详情) - 状态: 失败 - - 测试用例失败: TC-STATUS-001 (基本状态码 200 检查) - - 验证点: 期望状态码 200,但收到 500。 + - 测试用例失败: TC-SECURITY-001 (HTTPS Protocol Mandatory Verification) + - 验证点: API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id) 响应了成功的状态码 200,这违反了HTTPS强制策略。 - 测试用例失败: TC-ERROR-4001-BODY (Error Code 4001 - Request Body Type Mismatch Validation) - - 验证点: 对请求体字段 'isSearchCount' 的类型不匹配测试期望状态码为 [400, 422] 之一,但收到 500。 + - 验证点: 当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '96'. diff --git a/test_report.json b/test_report.json index bab03b0..65e3778 100644 --- a/test_report.json +++ b/test_report.json @@ -1,8 +1,8 @@ { "summary_metadata": { - "start_time": "2025-05-26T17:10:18.937545", - "end_time": "2025-05-26T17:10:19.037161", - "duration_seconds": "0.10" + "start_time": "2025-05-27T03:17:32.169725", + "end_time": "2025-05-27T03:17:33.726074", + "duration_seconds": "1.56" }, "endpoint_stats": { "total_defined": 6, @@ -17,35 +17,33 @@ "test_case_stats": { "total_applicable": 42, "total_executed": 42, - "passed": 23, - "failed": 19, + "passed": 24, + "failed": 18, "error_in_execution": 0, "skipped_during_endpoint_execution": 0, - "success_rate_percentage": "54.76" + "success_rate_percentage": "57.14" }, "detailed_results": [ { "endpoint_id": "POST /api/dms/{dms_instance_code}/v1/message/push/{schema}/{version}", "endpoint_name": "数据推送接口", "overall_status": "失败", - "duration_seconds": 0.043781, - "start_time": "2025-05-26T17:10:18.937890", - "end_time": "2025-05-26T17:10:18.981671", + "duration_seconds": 0.38021, + "start_time": "2025-05-27T03:17:32.170519", + "end_time": "2025-05-27T03:17:32.550729", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.035302374977618456, - "timestamp": "2025-05-26T17:10:18.973269", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.10054145799949765, + "timestamp": "2025-05-27T03:17:32.271233", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -54,9 +52,9 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.001680959016084671, - "timestamp": "2025-05-26T17:10:18.974994", + "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。", + "duration_seconds": 0.04229112481698394, + "timestamp": "2025-05-27T03:17:32.313678", "validation_points": [ { "passed": true, @@ -68,14 +66,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.0012912091333419085, - "timestamp": "2025-05-26T17:10:18.976330", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/message/push/example_schema/example_version) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.046983249951153994, + "timestamp": "2025-05-27T03:17:32.360817", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -84,9 +81,9 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "通过", - "message": "", - "duration_seconds": 0.0013675407972186804, - "timestamp": "2025-05-26T17:10:18.977732", + "message": "跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。", + "duration_seconds": 0.04334258288145065, + "timestamp": "2025-05-27T03:17:32.404292", "validation_points": [ { "passed": true, @@ -99,13 +96,34 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.001474499935284257, - "timestamp": "2025-05-26T17:10:18.979238", + "message": "当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '89'.", + "duration_seconds": 0.04505762504413724, + "timestamp": "2025-05-27T03:17:32.449477", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 89, + "message": "non mollit", + "data": { + "total": 56, + "list": [ + { + "dsid": "97", + "dataRegion": "nulla laborum ut cupidatat incididunt", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + } + ] + } + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.isSearchCount" } ] }, @@ -114,9 +132,9 @@ "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0012187499087303877, - "timestamp": "2025-05-26T17:10:18.980486", + "message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。", + "duration_seconds": 0.053338083904236555, + "timestamp": "2025-05-27T03:17:32.503262", "validation_points": [ { "passed": true, @@ -129,9 +147,9 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0011259580496698618, - "timestamp": "2025-05-26T17:10:18.981646", + "message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。", + "duration_seconds": 0.047208999982103705, + "timestamp": "2025-05-27T03:17:32.550622", "validation_points": [ { "passed": true, @@ -145,24 +163,22 @@ "endpoint_id": "POST /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}", "endpoint_name": "地质单元列表查询", "overall_status": "失败", - "duration_seconds": 0.015458, - "start_time": "2025-05-26T17:10:18.981700", - "end_time": "2025-05-26T17:10:18.997158", + "duration_seconds": 0.289961, + "start_time": "2025-05-27T03:17:32.550812", + "end_time": "2025-05-27T03:17:32.840773", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.0016555420588701963, - "timestamp": "2025-05-26T17:10:18.983441", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.03967254119925201, + "timestamp": "2025-05-27T03:17:32.590701", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -171,9 +187,9 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.0011254160199314356, - "timestamp": "2025-05-26T17:10:18.984597", + "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。", + "duration_seconds": 0.05223862477578223, + "timestamp": "2025-05-27T03:17:32.643082", "validation_points": [ { "passed": true, @@ -185,14 +201,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.0011057921219617128, - "timestamp": "2025-05-26T17:10:18.985732", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.04689537500962615, + "timestamp": "2025-05-27T03:17:32.690147", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -201,13 +216,48 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.001326208934187889, - "timestamp": "2025-05-26T17:10:18.987090", + "message": "当查询参数 'pageNo' (路径: 'pageNo') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '34'.", + "duration_seconds": 0.044708832865580916, + "timestamp": "2025-05-27T03:17:32.735038", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 34, + "message": "est", + "data": { + "total": 76, + "list": [ + { + "dsid": "56", + "dataRegion": "et dolore veniam ex voluptate", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + }, + { + "dsid": "8", + "dataRegion": "in", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + }, + { + "dsid": "16", + "dataRegion": "consequat irure proident", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + } + ] + } + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_param": "pageNo" } ] }, @@ -216,13 +266,41 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0013839590828865767, - "timestamp": "2025-05-26T17:10:18.988501", + "message": "当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '23'.", + "duration_seconds": 0.039677416905760765, + "timestamp": "2025-05-27T03:17:32.774854", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 23, + "message": "occaecat aute ut velit Excepteur", + "data": { + "total": 88, + "list": [ + { + "dsid": "93", + "dataRegion": "officia", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + }, + { + "dsid": "21", + "dataRegion": "ullamco commodo proident dolore id", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + } + ] + } + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.isSearchCount" } ] }, @@ -231,9 +309,9 @@ "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0022551249712705612, - "timestamp": "2025-05-26T17:10:18.990784", + "message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。", + "duration_seconds": 0.033955666003748775, + "timestamp": "2025-05-27T03:17:32.808929", "validation_points": [ { "passed": true, @@ -246,9 +324,9 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0063235408160835505, - "timestamp": "2025-05-26T17:10:18.997136", + "message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。", + "duration_seconds": 0.0316302499268204, + "timestamp": "2025-05-27T03:17:32.840677", "validation_points": [ { "passed": true, @@ -262,24 +340,22 @@ "endpoint_id": "PUT /api/dms/{dms_instance_code}/v1/cd_geo_unit", "endpoint_name": "地质单元数据修改", "overall_status": "失败", - "duration_seconds": 0.007749, - "start_time": "2025-05-26T17:10:18.997186", - "end_time": "2025-05-26T17:10:19.004935", + "duration_seconds": 0.194852, + "start_time": "2025-05-27T03:17:32.840839", + "end_time": "2025-05-27T03:17:33.035691", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.0011879999656230211, - "timestamp": "2025-05-26T17:10:18.998449", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.0246629579924047, + "timestamp": "2025-05-27T03:17:32.865694", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -288,13 +364,13 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.0008167079649865627, - "timestamp": "2025-05-26T17:10:18.999302", + "message": "针对 PUT http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (状态码 200) 的响应体 conforms to the JSON schema.", + "duration_seconds": 0.028576500015333295, + "timestamp": "2025-05-27T03:17:32.894368", "validation_points": [ { "passed": true, - "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。" + "message": "针对 PUT http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (状态码 200) 的响应体 conforms to the JSON schema." } ] }, @@ -302,14 +378,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.0009453750681132078, - "timestamp": "2025-05-26T17:10:19.000282", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.023044000146910548, + "timestamp": "2025-05-27T03:17:32.917541", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -318,13 +393,23 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.001086625037714839, - "timestamp": "2025-05-26T17:10:19.001401", + "message": "当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '36'.", + "duration_seconds": 0.027355958009138703, + "timestamp": "2025-05-27T03:17:32.944990", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 36, + "message": "velit proident nisi", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_param": "id" } ] }, @@ -333,13 +418,23 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0013515420723706484, - "timestamp": "2025-05-26T17:10:19.002791", + "message": "当请求体字段 'id' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '38'.", + "duration_seconds": 0.02183720818720758, + "timestamp": "2025-05-27T03:17:32.966910", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 38, + "message": "Excepteur", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.id" } ] }, @@ -347,15 +442,14 @@ "test_case_id": "TC-ERROR-4003-BODY", "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", - "status": "失败", - "message": "", - "duration_seconds": 0.0010457078460603952, - "timestamp": "2025-05-26T17:10:19.003869", + "status": "通过", + "message": "当移除必填请求体字段 'id' 时,API响应了状态码 200 (非主要预期HTTP状态 [400, 422],但为4xx客户端错误), 且响应体中包含预期的业务错误码 '4003' (字段: 'code').", + "duration_seconds": 0.02861408400349319, + "timestamp": "2025-05-27T03:17:32.995596", "validation_points": [ { - "status_code": 500, - "response_body": null, - "removed_field": "body.data.0.bsflag" + "passed": true, + "message": "当移除必填请求体字段 'id' 时,API响应了状态码 200 (非主要预期HTTP状态 [400, 422],但为4xx客户端错误), 且响应体中包含预期的业务错误码 '4003' (字段: 'code')." } ] }, @@ -364,14 +458,23 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "失败", - "message": "", - "duration_seconds": 0.0010109590366482735, - "timestamp": "2025-05-26T17:10:19.004911", + "message": "当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '37'.", + "duration_seconds": 0.039827125146985054, + "timestamp": "2025-05-27T03:17:33.035557", "validation_points": [ { - "status_code": 500, - "response_body": null, - "removed_field": "query.id" + "status_code": 200, + "response_body": { + "code": 37, + "message": "est sint non magna", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4003", + "removed_param": "query.id" } ] } @@ -381,24 +484,22 @@ "endpoint_id": "DELETE /api/dms/{dms_instance_code}/v1/cd_geo_unit", "endpoint_name": "地质单元数据删除", "overall_status": "失败", - "duration_seconds": 0.008712, - "start_time": "2025-05-26T17:10:19.004961", - "end_time": "2025-05-26T17:10:19.013673", + "duration_seconds": 0.214498, + "start_time": "2025-05-27T03:17:33.035783", + "end_time": "2025-05-27T03:17:33.250281", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.0009155420120805502, - "timestamp": "2025-05-26T17:10:19.005958", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.024680749978870153, + "timestamp": "2025-05-27T03:17:33.060754", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -407,13 +508,13 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.0012859171256422997, - "timestamp": "2025-05-26T17:10:19.007307", + "message": "针对 DELETE http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (状态码 200) 的响应体 conforms to the JSON schema.", + "duration_seconds": 0.02513625007122755, + "timestamp": "2025-05-27T03:17:33.086215", "validation_points": [ { "passed": true, - "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。" + "message": "针对 DELETE http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit (状态码 200) 的响应体 conforms to the JSON schema." } ] }, @@ -421,14 +522,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.0010566250421106815, - "timestamp": "2025-05-26T17:10:19.008399", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.023132374975830317, + "timestamp": "2025-05-27T03:17:33.109590", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -437,13 +537,23 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0011866658460348845, - "timestamp": "2025-05-26T17:10:19.009618", + "message": "当查询参数 'id' (路径: 'id') 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '57'.", + "duration_seconds": 0.02844312507659197, + "timestamp": "2025-05-27T03:17:33.138175", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 57, + "message": "culpa reprehenderit amet pariatur", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_param": "id" } ] }, @@ -452,13 +562,23 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0016809171065688133, - "timestamp": "2025-05-26T17:10:19.011357", + "message": "当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '2'.", + "duration_seconds": 0.05025433306582272, + "timestamp": "2025-05-27T03:17:33.188548", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 2, + "message": "tempor ullamco consequat", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.version" } ] }, @@ -467,9 +587,9 @@ "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0014303750358521938, - "timestamp": "2025-05-26T17:10:19.012824", + "message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。", + "duration_seconds": 0.03652524994686246, + "timestamp": "2025-05-27T03:17:33.225187", "validation_points": [ { "passed": true, @@ -482,14 +602,23 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "失败", - "message": "", - "duration_seconds": 0.000795166939496994, - "timestamp": "2025-05-26T17:10:19.013652", + "message": "当移除必填查询参数 'id' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '49'.", + "duration_seconds": 0.024812292074784636, + "timestamp": "2025-05-27T03:17:33.250181", "validation_points": [ { - "status_code": 500, - "response_body": null, - "removed_field": "query.id" + "status_code": 200, + "response_body": { + "code": 49, + "message": "culpa cillum", + "data": true + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4003", + "removed_param": "query.id" } ] } @@ -499,24 +628,22 @@ "endpoint_id": "POST /api/dms/{dms_instance_code}/v1/cd_geo_unit", "endpoint_name": "地质单元数据添加", "overall_status": "失败", - "duration_seconds": 0.007254, - "start_time": "2025-05-26T17:10:19.013697", - "end_time": "2025-05-26T17:10:19.020951", + "duration_seconds": 0.200211, + "start_time": "2025-05-27T03:17:33.250350", + "end_time": "2025-05-27T03:17:33.450561", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.0007979590445756912, - "timestamp": "2025-05-26T17:10:19.014569", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.028625000035390258, + "timestamp": "2025-05-27T03:17:33.279196", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -525,9 +652,9 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.0007929170969873667, - "timestamp": "2025-05-26T17:10:19.015392", + "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。", + "duration_seconds": 0.02822887501679361, + "timestamp": "2025-05-27T03:17:33.307693", "validation_points": [ { "passed": true, @@ -539,14 +666,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.001027249963954091, - "timestamp": "2025-05-26T17:10:19.016455", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.02737983292900026, + "timestamp": "2025-05-27T03:17:33.335201", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -555,9 +681,9 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "通过", - "message": "", - "duration_seconds": 0.001004124991595745, - "timestamp": "2025-05-26T17:10:19.017489", + "message": "跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。", + "duration_seconds": 0.03305029193870723, + "timestamp": "2025-05-27T03:17:33.368404", "validation_points": [ { "passed": true, @@ -570,13 +696,23 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0013770000077784061, - "timestamp": "2025-05-26T17:10:19.018896", + "message": "当请求体字段 'version' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '58'.", + "duration_seconds": 0.03271925006993115, + "timestamp": "2025-05-27T03:17:33.401426", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 58, + "message": "enim", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.version" } ] }, @@ -585,13 +721,22 @@ "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", "status": "失败", - "message": "", - "duration_seconds": 0.0009045829065144062, - "timestamp": "2025-05-26T17:10:19.019847", + "message": "当移除必填请求体字段 'data.0.bsflag' 时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4003'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '97'.", + "duration_seconds": 0.025021000066772103, + "timestamp": "2025-05-27T03:17:33.426714", "validation_points": [ { - "status_code": 500, - "response_body": null, + "status_code": 200, + "response_body": { + "code": 97, + "message": "sit enim est anim", + "data": false + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4003", "removed_field": "body.data.0.bsflag" } ] @@ -601,9 +746,9 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0010490419808775187, - "timestamp": "2025-05-26T17:10:19.020929", + "message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。", + "duration_seconds": 0.023357625119388103, + "timestamp": "2025-05-27T03:17:33.450349", "validation_points": [ { "passed": true, @@ -617,24 +762,22 @@ "endpoint_id": "GET /api/dms/{dms_instance_code}/v1/cd_geo_unit/{version}/{id}", "endpoint_name": "地质单元查询详情", "overall_status": "失败", - "duration_seconds": 0.016169, - "start_time": "2025-05-26T17:10:19.020976", - "end_time": "2025-05-26T17:10:19.037145", + "duration_seconds": 0.275309, + "start_time": "2025-05-27T03:17:33.450733", + "end_time": "2025-05-27T03:17:33.726042", "executed_test_cases": [ { "test_case_id": "TC-STATUS-001", "test_case_name": "基本状态码 200 检查", "test_case_severity": "严重", - "status": "失败", - "message": "", - "duration_seconds": 0.0014472499024122953, - "timestamp": "2025-05-26T17:10:19.022501", + "status": "通过", + "message": "响应状态码为 200,符合预期 200。", + "duration_seconds": 0.026520791929215193, + "timestamp": "2025-05-27T03:17:33.477855", "validation_points": [ { - "expected_status": 200, - "actual_status": 500, - "request_url": "https://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id", - "response_body_sample": "" + "passed": true, + "message": "响应状态码为 200,符合预期 200。" } ] }, @@ -643,13 +786,13 @@ "test_case_name": "Response Body JSON Schema Validation", "test_case_severity": "严重", "status": "通过", - "message": "", - "duration_seconds": 0.0011265419889241457, - "timestamp": "2025-05-26T17:10:19.023676", + "message": "针对 GET http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (状态码 200) 的响应体 conforms to the JSON schema.", + "duration_seconds": 0.0279082499910146, + "timestamp": "2025-05-27T03:17:33.506072", "validation_points": [ { "passed": true, - "message": "Schema验证步骤完成(未发现问题,或schema不适用/未为此响应定义)。" + "message": "针对 GET http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id (状态码 200) 的响应体 conforms to the JSON schema." } ] }, @@ -657,14 +800,13 @@ "test_case_id": "TC-SECURITY-001", "test_case_name": "HTTPS Protocol Mandatory Verification", "test_case_severity": "严重", - "status": "通过", - "message": "", - "duration_seconds": 0.0011152499355375767, - "timestamp": "2025-05-26T17:10:19.024819", + "status": "失败", + "message": "API通过HTTP (http://127.0.0.1:4523/m1/6389742-6086420-default/api/dms/example_dms_instance_code/v1/cd_geo_unit/1.0.0/example_id) 响应了成功的状态码 200,这违反了HTTPS强制策略。", + "duration_seconds": 0.029651165939867496, + "timestamp": "2025-05-27T03:17:33.536036", "validation_points": [ { - "passed": true, - "message": "测试已跳过,因为发送的URL已经是 HTTPS(可能是由于原始基础URL非HTTPS或测试设置问题)。" + "status_code": 200 } ] }, @@ -673,9 +815,9 @@ "test_case_name": "Error Code 4001 - Query Parameter Type Mismatch Validation", "test_case_severity": "中", "status": "通过", - "message": "", - "duration_seconds": 0.008005708921700716, - "timestamp": "2025-05-26T17:10:19.032866", + "message": "跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。", + "duration_seconds": 0.035403457935899496, + "timestamp": "2025-05-27T03:17:33.571723", "validation_points": [ { "passed": true, @@ -688,13 +830,41 @@ "test_case_name": "Error Code 4001 - Request Body Type Mismatch Validation", "test_case_severity": "中", "status": "失败", - "message": "", - "duration_seconds": 0.0014979999978095293, - "timestamp": "2025-05-26T17:10:19.034398", + "message": "当请求体字段 'isSearchCount' 类型不匹配时,期望API返回状态码在 [400, 422] 中,或返回4xx客户端错误且业务码为 '4001'. 实际收到状态码 200. 响应体中的业务码 ('code') 为 '96'.", + "duration_seconds": 0.0588684999383986, + "timestamp": "2025-05-27T03:17:33.630695", "validation_points": [ { - "status_code": 500, - "response_body": null + "status_code": 200, + "response_body": { + "code": 96, + "message": "qui eu sit", + "data": { + "total": 88, + "list": [ + { + "dsid": "25", + "dataRegion": "veniam dolor", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + }, + { + "dsid": "1", + "dataRegion": "aute do", + "gasReleaseMon": null, + "gasReleaseYear": null, + "releaseGasCum": null + } + ] + } + }, + "expected_http_status_codes": [ + 400, + 422 + ], + "expected_business_code": "4001", + "mismatched_field": "body.isSearchCount" } ] }, @@ -703,9 +873,9 @@ "test_case_name": "Error Code 4003 - Missing Required Request Body Field Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0013297090772539377, - "timestamp": "2025-05-26T17:10:19.035759", + "message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。", + "duration_seconds": 0.06513866619206965, + "timestamp": "2025-05-27T03:17:33.696569", "validation_points": [ { "passed": true, @@ -718,9 +888,9 @@ "test_case_name": "Error Code 4003 - Missing Required Query Parameter Validation", "test_case_severity": "高", "status": "通过", - "message": "", - "duration_seconds": 0.0013257910031825304, - "timestamp": "2025-05-26T17:10:19.037121", + "message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。", + "duration_seconds": 0.02917162491939962, + "timestamp": "2025-05-27T03:17:33.725963", "validation_points": [ { "passed": true,