添加error 测试用例,但是测试用例太复杂,还需要优化框架

This commit is contained in:
gongwenxin
2025-05-23 12:05:48 +08:00
parent 0e3e721bc0
commit 4180a0ce81
37 changed files with 45453 additions and 499 deletions
@@ -0,0 +1 @@
# This file marks the normative_spec directory as a Python package.
@@ -0,0 +1,67 @@
from typing import Dict, Any, Optional, List
from ddms_compliance_suite.test_framework_core import BaseAPITestCase, TestSeverity, ValidationResult, APIRequestContext, APIResponseContext
# class HTTPMethodUsageCase(BaseAPITestCase):
# id = "TC-NORMATIVE-001"
# name = "HTTP Method Usage Verification"
# description = "验证API是否恰当使用HTTP方法(例如,GET用于检索,POST用于创建)。目前不测试对不支持方法的405响应。"
# severity = TestSeverity.MEDIUM
# tags = ["normative-spec", "http", "restful"]
# execution_order = 110
# # 此测试通常适用。
# # 检查对不支持方法的405响应会比较复杂,需要知道哪些方法对于每个路径是明确不支持的,
# # 或者尝试所有其他方法,这在API规范中并不总是明确的。
# def __init__(self, endpoint_spec: Dict[str, Any], global_api_spec: Dict[str, Any], json_schema_validator: Optional[Any] = None):
# super().__init__(endpoint_spec, global_api_spec, json_schema_validator)
# self.logger.info(f"测试用例 '{self.id}' 已为端点 '{self.endpoint_spec.get('method')} {self.endpoint_spec.get('path')}' 初始化。")
# def validate_response(self, response_context: APIResponseContext, request_context: APIRequestContext) -> List[ValidationResult]:
# results = []
# method = request_context.method.upper()
# status_code = response_context.status_code
# # 基于常见RESTful约定的基本检查
# # 这些是通用指南,可能需要根据具体的API设计进行调整。
# if method == "GET":
# if status_code // 100 == 2: # 成功的GET
# results.append(self.passed(f"GET请求 {request_context.url} 返回了成功的状态码 {status_code}。"))
# elif status_code == 404:
# results.append(self.passed(f"GET请求 {request_context.url} 返回404,如果资源不存在则这是有效的响应。"))
# # GET请求的其他状态码可能是错误或此处未覆盖的特定条件。
# elif method == "POST":
# if status_code == 201: # 已创建
# results.append(self.passed(f"POST请求 {request_context.url} 返回201 Created,符合资源创建的预期。"))
# elif status_code == 200 or status_code == 202: # OK或已接受(例如,用于异步任务)
# results.append(self.passed(f"POST请求 {request_context.url} 返回{status_code},这可以是有效的响应。"))
# # 可添加对400(错误请求,例如payload无效)等的检查。
# elif method == "PUT":
# if status_code == 200: # OK(已更新)
# results.append(self.passed(f"PUT请求 {request_context.url} 返回200 OK,符合资源更新的预期。"))
# elif status_code == 201: # 已创建(如果PUT在资源不存在时创建资源)
# results.append(self.passed(f"PUT请求 {request_context.url} 返回201 Created,这可以是有效的响应。"))
# elif status_code == 204: # 无内容(已更新,不返回响应体)
# results.append(self.passed(f"PUT请求 {request_context.url} 返回204 No Content,这可以是有效的响应。"))
# # 可添加对404(未找到,如果要更新的资源不存在,除非PUT会创建)的检查。
# elif method == "DELETE":
# if status_code == 200 or status_code == 202 or status_code == 204: # OK、已接受或无内容
# results.append(self.passed(f"DELETE请求 {request_context.url} 返回{status_code},表示成功删除。"))
# # 可添加对404(未找到,如果要删除的资源不存在)的检查。
# # 405(方法不允许)检查的占位符 - 这比较复杂
# # 要测试405,通常需要:
# # 1. 知道哪些方法是此路径明确不允许的。
# # 2. 或者,尝试使用其他常见方法(OPTIONS, PATCH等)发送请求,
# # 如果这些方法未在此路径的规范中定义,则期望405。
# # 这通常需要更具针对性的测试用例或不同的方法。
# # self.logger.info("此通用测试用例未实现405(方法不允许)检查。")
# if not results: # 如果没有为该方法触发特定的验证
# results.append(self.passed(f"针对 {method} {request_context.url} 的HTTP方法使用检查完成(基于通用约定未发现特定问题)。"))
# return results