compliance/custom_testcases/basic_checks.py
gongwenxin f0cc525141 v0.2
2025-05-27 03:18:14 +08:00

54 lines
2.7 KiB
Python

from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext
import logging
from typing import Dict, Any, Optional # 确保引入 Optional
class StatusCode200Check(BaseAPITestCase):
# 1. 元数据
id = "TC-STATUS-001"
name = "基本状态码 200 检查"
description = "验证 API 响应状态码是否为 200 OK。"
severity = TestSeverity.CRITICAL
tags = ["status_code", "smoke_test"]
# 适用于所有方法和路径 (默认)
# applicable_methods = None
# applicable_paths_regex = None
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
# use_llm_for_headers: bool = True
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)
self.logger.info(f"测试用例 {self.id} ({self.name}) 已针对端点 '{self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')}' 初始化。")
def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> list[ValidationResult]:
results = []
expected_status_code = 200
actual_status_code = response_context.status_code
if actual_status_code == expected_status_code:
results.append(
ValidationResult(
passed=True,
message=f"响应状态码为 {actual_status_code},符合预期 {expected_status_code}"
)
)
self.logger.info(f"状态码验证通过: {actual_status_code} == {expected_status_code} for {request_context.url}")
else:
results.append(
ValidationResult(
passed=False,
message=f"期望状态码 {expected_status_code},但收到 {actual_status_code}",
details={
"expected_status": expected_status_code,
"actual_status": actual_status_code,
"request_url": request_context.url,
"response_body_sample": (response_context.text_content or "")[:200] # 包含部分响应体以帮助诊断
}
)
)
self.logger.warning(f"状态码验证失败: 期望 {expected_status_code}, 实际 {actual_status_code} for {request_context.url}")
return results