llm 通过json列表判断

This commit is contained in:
gongwenxin
2025-06-19 18:33:03 +08:00
parent d3333d4f90
commit ba175cb2ae
32 changed files with 12241 additions and 8427 deletions
@@ -8,7 +8,7 @@ import string
class InvalidEnumValueCase(BaseAPITestCase):
id = "TC-ERROR-4006"
name = "Error Code 4006 - Invalid Enum Value Validation"
description = "测试当发送的参数值不在指定的枚举范围内时,API是否按预期返回code=4006的错误(状态码应为200)。"
description = "测试当发送的参数值不在指定的枚举范围内时,API是否按预期返回code=-1的错误(状态码应为200)。"
severity = TestSeverity.MEDIUM
tags = ["error-handling", "appendix-b", "4006", "invalid-enum"]
execution_order = 204 # 在数值越界之后执行
@@ -133,7 +133,7 @@ class InvalidEnumValueCase(BaseAPITestCase):
return [self.passed("跳过测试:未找到具有明确枚举值限制的字段。")]
expected_http_status_code = 200
expected_business_error_code = "4006"
expected_business_error_code = -1
context_msg_prefix = (
f"{self.target_field_location} 字段 '{self.target_field_name}' "
@@ -153,12 +153,12 @@ class InvalidEnumValueCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
@@ -5,8 +5,8 @@ from ddms_compliance_suite.utils import schema_utils # Keep this import for util
class MissingRequiredFieldBodyCase(BaseAPITestCase):
id = "TC-ERROR-4003-BODY"
name = "Error Code 4003 - Missing Required Request Body Field Validation"
description = "测试当请求体中缺少API规范定义的必填字段时,API是否按预期返回类似4003的错误。"
name = "Error Code -1 - Missing Required Request Body Field Validation"
description = "测试当请求体中缺少API规范定义的必填字段时,API是否按预期返回code=-1的错误。"
severity = TestSeverity.HIGH
tags = ["error-handling", "appendix-b", "4003", "required-fields", "request-body"]
execution_order = 210
@@ -61,7 +61,7 @@ class MissingRequiredFieldBodyCase(BaseAPITestCase):
return results
expected_http_status_code = 200
expected_business_error_code = "4003"
expected_business_error_code = -1
removed_field_str = '.'.join(map(str, self.removed_field_path))
context_msg_prefix = f"当移除必填请求体字段 '{removed_field_str}' 时, "
@@ -79,12 +79,12 @@ class MissingRequiredFieldBodyCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
@@ -4,8 +4,8 @@ import copy
class MissingRequiredFieldQueryCase(BaseAPITestCase):
id = "TC-ERROR-4003-QUERY"
name = "Error Code 4003 - Missing Required Query Parameter Validation"
description = "测试当请求中缺少API规范定义的必填查询参数时,API是否按预期返回类似4003的错误。"
name = "Error Code -1 - Missing Required Query Parameter Validation"
description = "测试当请求中缺少API规范定义的必填查询参数时,API是否按预期返回code=-1的错误。"
severity = TestSeverity.HIGH
tags = ["error-handling", "appendix-b", "4003", "required-fields", "query-parameters"]
execution_order = 211 # After body, before original combined one might have been
@@ -52,7 +52,7 @@ class MissingRequiredFieldQueryCase(BaseAPITestCase):
return results
expected_http_status_code = 200
expected_business_error_code = "4003"
expected_business_error_code = -1
context_msg_prefix = f"当移除必填查询参数 '{self.target_param_name}' 时, "
@@ -69,12 +69,12 @@ class MissingRequiredFieldQueryCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
@@ -5,8 +5,8 @@ from ddms_compliance_suite.utils import schema_utils
class NumberOutOfRangeCase(BaseAPITestCase):
id = "TC-ERROR-4002"
name = "Error Code 4002 - Number Value Out of Range Validation"
description = "测试当发送的数值参数超出范围限制时,API是否按预期返回code=4002的错误(状态码应为200)。"
name = "Error Code -1 - Number Value Out of Range Validation"
description = "测试当发送的数值参数超出范围限制时,API是否按预期返回code=-1的错误(状态码应为200)。"
severity = TestSeverity.MEDIUM
tags = ["error-handling", "appendix-b", "4002", "out-of-range"]
execution_order = 203 # 在类型不匹配测试之后执行
@@ -162,7 +162,7 @@ class NumberOutOfRangeCase(BaseAPITestCase):
return [self.passed("跳过测试:未找到具有明确范围限制的数值字段。")]
expected_http_status_code = 200
expected_business_error_code = "4002"
expected_business_error_code = -1
context_msg_prefix = (
f"{self.target_field_location} 字段 '{self.target_field_name}' "
@@ -182,12 +182,12 @@ class NumberOutOfRangeCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
@@ -6,8 +6,8 @@ from ddms_compliance_suite.utils import schema_utils
class TypeMismatchBodyCase(BaseAPITestCase):
id = "TC-ERROR-4001-BODY"
name = "Error Code 4001 - Request Body Type Mismatch Validation"
description = "测试当发送的请求体中字段的数据类型与API规范定义不符时,API是否按预期返回类似4001的错误(或通用400错误)"
name = "Error Code -1 - Request Body Type Mismatch Validation"
description = "测试当发送的请求体中字段的数据类型与API规范定义不符时,API是否按预期返回code=-1的错误"
severity = TestSeverity.MEDIUM
tags = ["error-handling", "appendix-b", "4001", "request-body"]
execution_order = 202 # Slightly after query param one
@@ -88,7 +88,7 @@ class TypeMismatchBodyCase(BaseAPITestCase):
return [self.passed("跳过测试:在请求体中未找到合适的字段来测试类型不匹配。")]
expected_http_status_code = 200
expected_business_error_code = "4001"
expected_business_error_code = -1
field_path_str = '.'.join(map(str, self.target_field_path))
context_msg_prefix = f"当请求体字段 '{field_path_str}' 类型不匹配时, "
@@ -106,12 +106,12 @@ class TypeMismatchBodyCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
@@ -6,8 +6,8 @@ from ddms_compliance_suite.utils import schema_utils
class TypeMismatchQueryParamCase(BaseAPITestCase):
id = "TC-ERROR-4001-QUERY"
name = "Error Code 4001 - Query Parameter Type Mismatch Validation"
description = "测试当发送的查询参数数据类型与API规范定义不符时,API是否按预期返回类似4001的错误(或通用400错误)"
name = "Error Code -1 - Query Parameter Type Mismatch Validation"
description = "测试当发送的查询参数数据类型与API规范定义不符时,API是否按预期返回code=-1的错误"
severity = TestSeverity.MEDIUM
tags = ["error-handling", "appendix-b", "4001", "query-parameters"]
execution_order = 201 # Slightly after the combined one might have been
@@ -85,7 +85,7 @@ class TypeMismatchQueryParamCase(BaseAPITestCase):
return [self.passed("跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。")]
expected_http_status_code = 200
expected_business_error_code = "4001"
expected_business_error_code = -1
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))}') 类型不匹配时, "
@@ -103,14 +103,14 @@ class TypeMismatchQueryParamCase(BaseAPITestCase):
return [self.failed(f"{context_msg_prefix}API响应体不是一个有效的JSON对象。")]
actual_business_code = json_content.get("code")
if str(actual_business_code) != expected_business_error_code:
if actual_business_code != expected_business_error_code:
return [self.failed(
message=f"{context_msg_prefix}业务错误码应为 '{expected_business_error_code}',但实际为 '{actual_business_code}'",
message=f"{context_msg_prefix}业务错误码应为 {expected_business_error_code},但实际为 {actual_business_code}",
details={"expected_code": expected_business_error_code, "actual_code": actual_business_code, "response_body": json_content}
)]
return [self.passed(
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 '{expected_business_error_code}'"
f"{context_msg_prefix}API正确返回了状态码 {expected_http_status_code} 和业务错误码 {expected_business_error_code}"
)]
def generate_path_params(self, current_path_params: Dict[str, Any]) -> Dict[str, Any]: