930 lines
33 KiB
JSON
930 lines
33 KiB
JSON
{
|
||
"start_time": "2025-07-16T22:57:15.129146",
|
||
"end_time": "2025-07-16T22:57:15.230011",
|
||
"duration_seconds": "0.10",
|
||
"overall_summary": {
|
||
"total_endpoints_defined": 10,
|
||
"endpoints_tested": 10,
|
||
"endpoints_passed": 2,
|
||
"endpoints_failed": 0,
|
||
"endpoints_error": 0,
|
||
"endpoints_skipped": 8,
|
||
"endpoints_partial_success": 0,
|
||
"endpoint_success_rate": "100.00%",
|
||
"total_test_cases_applicable": 190,
|
||
"total_test_cases_executed": 38,
|
||
"test_cases_passed": 26,
|
||
"test_cases_failed": 12,
|
||
"test_cases_error": 0,
|
||
"test_cases_skipped_in_endpoint": 0,
|
||
"test_case_success_rate": "68.42%",
|
||
"total_stages_defined": 0,
|
||
"total_stages_executed": 0,
|
||
"stages_passed": 0,
|
||
"stages_failed": 0,
|
||
"stages_error": 0,
|
||
"stages_skipped": 0,
|
||
"stage_success_rate": "N/A"
|
||
},
|
||
"errors": [],
|
||
"endpoint_results": [
|
||
{
|
||
"endpoint_id": "POST_/api/dms/wb_ml/v1/lujing_test",
|
||
"endpoint_name": "Create lujing_test",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.143399",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "POST /api/dms/wb_ml/v1/lujing_test/1.0.0",
|
||
"endpoint_name": "List lujing_test",
|
||
"overall_status": "通过",
|
||
"duration_seconds": 0.061331,
|
||
"start_time": "2025-07-16T22:57:15.143418",
|
||
"end_time": "2025-07-16T22:57:15.204749",
|
||
"executed_test_cases": [
|
||
{
|
||
"test_case_id": "TC-STATUS-001",
|
||
"test_case_name": "基本状态码 200 检查",
|
||
"test_case_severity": "CRITICAL",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0025265419972129166,
|
||
"timestamp": "2025-07-16T22:57:15.146113",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "响应状态码为 200,符合预期 200。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-HEADER-001",
|
||
"test_case_name": "必需请求头Schema验证",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "缺少必需的请求头 X-Tenant-ID; 缺少必需的请求头 X-Data-Domain; 缺少必需的请求头 Authorization",
|
||
"duration_seconds": 0.0015327500004786998,
|
||
"timestamp": "2025-07-16T22:57:15.147864",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 X-Tenant-ID",
|
||
"details": {
|
||
"header": "X-Tenant-ID",
|
||
"possible_names": [
|
||
"X-Tenant-ID"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_ml/v1/lujing_test/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 X-Data-Domain",
|
||
"details": {
|
||
"header": "X-Data-Domain",
|
||
"possible_names": [
|
||
"X-Data-Domain"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_ml/v1/lujing_test/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 Authorization",
|
||
"details": {
|
||
"header": "Authorization",
|
||
"possible_names": [
|
||
"Authorization"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_ml/v1/lujing_test/1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-SECURITY-002",
|
||
"test_case_name": "敏感字段加密检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.001953291008248925,
|
||
"timestamp": "2025-07-16T22:57:15.149868",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "未在响应中找到需要检查的敏感字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-LLM-COMPLIANCE-001",
|
||
"test_case_name": "LLM合规性综合检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0026352500135544688,
|
||
"timestamp": "2025-07-16T22:57:15.152610",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "合规性标准列表为空,跳过LLM合规性检查。",
|
||
"details": {
|
||
"reason": "compliance_criteria.json is empty or contains an empty list."
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-001",
|
||
"test_case_name": "核心命名与结构规范检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "响应中包含一个主列表,但其键名 'data' 不是 'list'。",
|
||
"duration_seconds": 0.0014435829943977296,
|
||
"timestamp": "2025-07-16T22:57:15.154154",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "模块名 'dms' 格式正确 (全小写/数字/中划线)。",
|
||
"details": {}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "响应中包含一个主列表,但其键名 'data' 不是 'list'。",
|
||
"details": {
|
||
"keys": [
|
||
"code",
|
||
"data",
|
||
"message"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-PAGINATION-001",
|
||
"test_case_name": "分页参数检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "API请求缺少标准分页参数:pageNo, pageSize, isSearchCount",
|
||
"duration_seconds": 0.0011301670165266842,
|
||
"timestamp": "2025-07-16T22:57:15.155442",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "API请求缺少标准分页参数:pageNo, pageSize, isSearchCount",
|
||
"details": {
|
||
"path": "/api/dms/wb_ml/v1/lujing_test/1.0.0",
|
||
"method": "POST",
|
||
"missing_params": [
|
||
"pageNo",
|
||
"pageSize",
|
||
"isSearchCount"
|
||
],
|
||
"found_params": {
|
||
"pageNo": false,
|
||
"pageSize": false,
|
||
"isSearchCount": false
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-004",
|
||
"test_case_name": "资源集合复数命名检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "路径 '/api/dms/wb_ml/v1/lujing_test/1.0.0' 的最后一个路径分段 '1.0.0' 可能不是复数形式,建议对资源集合使用复数命名。",
|
||
"duration_seconds": 0.0014447499997913837,
|
||
"timestamp": "2025-07-16T22:57:15.156967",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "路径 '/api/dms/wb_ml/v1/lujing_test/1.0.0' 的最后一个路径分段 '1.0.0' 可能不是复数形式,建议对资源集合使用复数命名。",
|
||
"details": {
|
||
"path": "/api/dms/wb_ml/v1/lujing_test/1.0.0",
|
||
"segment": "1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-002",
|
||
"test_case_name": "资源路径名词检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0013330420188140124,
|
||
"timestamp": "2025-07-16T22:57:15.158338",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "路径 '/api/dms/wb_ml/v1/lujing_test/1.0.0' 符合资源名词命名规范。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-CORE-SCHEMA-001",
|
||
"test_case_name": "DMS核心存储服务API响应格式检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0011317500029690564,
|
||
"timestamp": "2025-07-16T22:57:15.159837",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "字段'code'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "字段'message'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "字段'data'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "响应schema符合标准格式: {'code':int or number or string, 'message':string, 'data': any}",
|
||
"details": {
|
||
"status_code": "200"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-CORE-FUNC-001",
|
||
"test_case_name": "返回体JSON Schema验证",
|
||
"test_case_severity": "CRITICAL",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0034495419822633266,
|
||
"timestamp": "2025-07-16T22:57:15.163339",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "针对 POST http://127.0.0.1:5001/api/dms/wb_ml/v1/lujing_test/1.0.0 (状态码 200) 的响应体 conforms to the JSON schema.",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-003",
|
||
"test_case_name": "时间字段ISO 8601格式检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "时间字段 'data[].update_date' (format: date-time) 缺少建议的 `pattern` (^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([+-]\\d{2}:\\d{2}|Z)$) 来强制执行ISO 8601格式。",
|
||
"duration_seconds": 0.0011992920190095901,
|
||
"timestamp": "2025-07-16T22:57:15.164619",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "时间字段 'data[].update_date' (format: date-time) 缺少建议的 `pattern` (^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([+-]\\d{2}:\\d{2}|Z)$) 来强制执行ISO 8601格式。",
|
||
"details": {
|
||
"field": "data[].update_date"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-URL-VERSION-001",
|
||
"test_case_name": "DMS API URL版本号检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0017166670004371554,
|
||
"timestamp": "2025-07-16T22:57:15.166448",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "API路径 '/api/dms/wb_ml/v1/lujing_test/1.0.0' 正确以'/api/'开头",
|
||
"details": {
|
||
"full_path": "/api/dms/wb_ml/v1/lujing_test/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "API路径 '/api/dms/wb_ml/v1/lujing_test/1.0.0' 包含版本标识: 'v1'",
|
||
"details": {
|
||
"pattern_matched": "/v\\d+/",
|
||
"version_string": "v1",
|
||
"full_path": "/api/dms/wb_ml/v1/lujing_test/1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-SECURITY-001",
|
||
"test_case_name": "HTTPS 协议强制性检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "API通过HTTP (http://127.0.0.1:5001/api/dms/wb_ml/v1/lujing_test/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。",
|
||
"duration_seconds": 0.0014640000008512288,
|
||
"timestamp": "2025-07-16T22:57:15.167977",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "API通过HTTP (http://127.0.0.1:5001/api/dms/wb_ml/v1/lujing_test/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。",
|
||
"details": {
|
||
"status_code": 200
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4001-QUERY",
|
||
"test_case_name": "查询参数类型不匹配检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.02409187500597909,
|
||
"timestamp": "2025-07-16T22:57:15.192114",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4001-BODY",
|
||
"test_case_name": "请求体字段类型不匹配检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0024651249987073243,
|
||
"timestamp": "2025-07-16T22:57:15.194801",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在请求体中未找到合适的字段来测试类型不匹配。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4002",
|
||
"test_case_name": "数值参数越界检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.001469957991503179,
|
||
"timestamp": "2025-07-16T22:57:15.196316",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:未找到具有明确范围限制的数值字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4006",
|
||
"test_case_name": "非法枚举值检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0032399579940829426,
|
||
"timestamp": "2025-07-16T22:57:15.199598",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:未找到具有明确枚举值限制的字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4003-BODY",
|
||
"test_case_name": "缺失必填请求体字段检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0037550830165855587,
|
||
"timestamp": "2025-07-16T22:57:15.203498",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4003-QUERY",
|
||
"test_case_name": "缺失必填查询参数检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0011400000075809658,
|
||
"timestamp": "2025-07-16T22:57:15.204686",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。",
|
||
"details": {}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"endpoint_id": "GET_/api/dms/wb_ml/v1/lujing_test/1.0.0/{id}",
|
||
"endpoint_name": "Read lujing_test",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.204835",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "PUT_/api/dms/wb_ml/v1/lujing_test",
|
||
"endpoint_name": "Update lujing_test",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.204853",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "DELETE_/api/dms/wb_ml/v1/lujing_test",
|
||
"endpoint_name": "Delete lujing_test",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.204862",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "POST_/api/dms/wb_dr/v1/wb_dr_pro_daily_report",
|
||
"endpoint_name": "Create wb_dr_pro_daily_report",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.204870",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "POST /api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0",
|
||
"endpoint_name": "List wb_dr_pro_daily_report",
|
||
"overall_status": "通过",
|
||
"duration_seconds": 0.024924,
|
||
"start_time": "2025-07-16T22:57:15.204880",
|
||
"end_time": "2025-07-16T22:57:15.229804",
|
||
"executed_test_cases": [
|
||
{
|
||
"test_case_id": "TC-STATUS-001",
|
||
"test_case_name": "基本状态码 200 检查",
|
||
"test_case_severity": "CRITICAL",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0010878339817281812,
|
||
"timestamp": "2025-07-16T22:57:15.206155",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "响应状态码为 200,符合预期 200。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-HEADER-001",
|
||
"test_case_name": "必需请求头Schema验证",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "缺少必需的请求头 X-Tenant-ID; 缺少必需的请求头 X-Data-Domain; 缺少必需的请求头 Authorization",
|
||
"duration_seconds": 0.002009374991757795,
|
||
"timestamp": "2025-07-16T22:57:15.209374",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 X-Tenant-ID",
|
||
"details": {
|
||
"header": "X-Tenant-ID",
|
||
"possible_names": [
|
||
"X-Tenant-ID"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 X-Data-Domain",
|
||
"details": {
|
||
"header": "X-Data-Domain",
|
||
"possible_names": [
|
||
"X-Data-Domain"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "缺少必需的请求头 Authorization",
|
||
"details": {
|
||
"header": "Authorization",
|
||
"possible_names": [
|
||
"Authorization"
|
||
],
|
||
"endpoint": "POST /api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-SECURITY-002",
|
||
"test_case_name": "敏感字段加密检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.001503250008681789,
|
||
"timestamp": "2025-07-16T22:57:15.210932",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "未在响应中找到需要检查的敏感字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-LLM-COMPLIANCE-001",
|
||
"test_case_name": "LLM合规性综合检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0011177499836776406,
|
||
"timestamp": "2025-07-16T22:57:15.212120",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "合规性标准列表为空,跳过LLM合规性检查。",
|
||
"details": {
|
||
"reason": "compliance_criteria.json is empty or contains an empty list."
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-001",
|
||
"test_case_name": "核心命名与结构规范检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "响应中包含一个主列表,但其键名 'data' 不是 'list'。",
|
||
"duration_seconds": 0.0010879579931497574,
|
||
"timestamp": "2025-07-16T22:57:15.213290",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "模块名 'dms' 格式正确 (全小写/数字/中划线)。",
|
||
"details": {}
|
||
},
|
||
{
|
||
"passed": false,
|
||
"message": "响应中包含一个主列表,但其键名 'data' 不是 'list'。",
|
||
"details": {
|
||
"keys": [
|
||
"code",
|
||
"data",
|
||
"message"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-PAGINATION-001",
|
||
"test_case_name": "分页参数检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "API请求缺少标准分页参数:pageNo, pageSize, isSearchCount",
|
||
"duration_seconds": 0.0009738750231917948,
|
||
"timestamp": "2025-07-16T22:57:15.214396",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "API请求缺少标准分页参数:pageNo, pageSize, isSearchCount",
|
||
"details": {
|
||
"path": "/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0",
|
||
"method": "POST",
|
||
"missing_params": [
|
||
"pageNo",
|
||
"pageSize",
|
||
"isSearchCount"
|
||
],
|
||
"found_params": {
|
||
"pageNo": false,
|
||
"pageSize": false,
|
||
"isSearchCount": false
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-004",
|
||
"test_case_name": "资源集合复数命名检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "路径 '/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0' 的最后一个路径分段 '1.0.0' 可能不是复数形式,建议对资源集合使用复数命名。",
|
||
"duration_seconds": 0.0009258750069420785,
|
||
"timestamp": "2025-07-16T22:57:15.215395",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "路径 '/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0' 的最后一个路径分段 '1.0.0' 可能不是复数形式,建议对资源集合使用复数命名。",
|
||
"details": {
|
||
"path": "/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0",
|
||
"segment": "1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-002",
|
||
"test_case_name": "资源路径名词检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.001498083001933992,
|
||
"timestamp": "2025-07-16T22:57:15.216981",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "路径 '/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0' 符合资源名词命名规范。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-CORE-SCHEMA-001",
|
||
"test_case_name": "DMS核心存储服务API响应格式检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.001083665993064642,
|
||
"timestamp": "2025-07-16T22:57:15.218215",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "字段'code'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "字段'message'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "字段'data'在schema中未标记为必填(required)",
|
||
"details": {
|
||
"status_code": "200",
|
||
"required_fields": []
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "响应schema符合标准格式: {'code':int or number or string, 'message':string, 'data': any}",
|
||
"details": {
|
||
"status_code": "200"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-CORE-FUNC-001",
|
||
"test_case_name": "返回体JSON Schema验证",
|
||
"test_case_severity": "CRITICAL",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0010729170171543956,
|
||
"timestamp": "2025-07-16T22:57:15.219323",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "针对 POST http://127.0.0.1:5001/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0 (状态码 200) 的响应体 conforms to the JSON schema.",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-RESTful-003",
|
||
"test_case_name": "时间字段ISO 8601格式检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "失败",
|
||
"message": "时间字段 'data[].update_date' (format: date-time) 缺少建议的 `pattern` (^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([+-]\\d{2}:\\d{2}|Z)$) 来强制执行ISO 8601格式。",
|
||
"duration_seconds": 0.000912124989554286,
|
||
"timestamp": "2025-07-16T22:57:15.220308",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "时间字段 'data[].update_date' (format: date-time) 缺少建议的 `pattern` (^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}([+-]\\d{2}:\\d{2}|Z)$) 来强制执行ISO 8601格式。",
|
||
"details": {
|
||
"field": "data[].update_date"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-DMS-URL-VERSION-001",
|
||
"test_case_name": "DMS API URL版本号检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0009583749924786389,
|
||
"timestamp": "2025-07-16T22:57:15.221373",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "API路径 '/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0' 正确以'/api/'开头",
|
||
"details": {
|
||
"full_path": "/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0"
|
||
}
|
||
},
|
||
{
|
||
"passed": true,
|
||
"message": "API路径 '/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0' 包含版本标识: 'v1'",
|
||
"details": {
|
||
"pattern_matched": "/v\\d+/",
|
||
"version_string": "v1",
|
||
"full_path": "/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-SECURITY-001",
|
||
"test_case_name": "HTTPS 协议强制性检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "失败",
|
||
"message": "API通过HTTP (http://127.0.0.1:5001/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。",
|
||
"duration_seconds": 0.0010002079943660647,
|
||
"timestamp": "2025-07-16T22:57:15.222430",
|
||
"validation_points": [
|
||
{
|
||
"passed": false,
|
||
"message": "API通过HTTP (http://127.0.0.1:5001/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0) 响应了成功的状态码 200,这违反了HTTPS强制策略。",
|
||
"details": {
|
||
"status_code": 200
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4001-QUERY",
|
||
"test_case_name": "查询参数类型不匹配检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0011244580091442913,
|
||
"timestamp": "2025-07-16T22:57:15.223592",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在查询参数中未找到合适的字段来测试类型不匹配。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4001-BODY",
|
||
"test_case_name": "请求体字段类型不匹配检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0019150420266669244,
|
||
"timestamp": "2025-07-16T22:57:15.225540",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在请求体中未找到合适的字段来测试类型不匹配。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4002",
|
||
"test_case_name": "数值参数越界检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0010279999987687916,
|
||
"timestamp": "2025-07-16T22:57:15.226612",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:未找到具有明确范围限制的数值字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4006",
|
||
"test_case_name": "非法枚举值检查",
|
||
"test_case_severity": "MEDIUM",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0009910420048981905,
|
||
"timestamp": "2025-07-16T22:57:15.227641",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:未找到具有明确枚举值限制的字段。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4003-BODY",
|
||
"test_case_name": "缺失必填请求体字段检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0008280000183731318,
|
||
"timestamp": "2025-07-16T22:57:15.228508",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在API规范中未找到合适的必填请求体字段用于移除测试。",
|
||
"details": {}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"test_case_id": "TC-ERROR-4003-QUERY",
|
||
"test_case_name": "缺失必填查询参数检查",
|
||
"test_case_severity": "HIGH",
|
||
"status": "通过",
|
||
"message": "",
|
||
"duration_seconds": 0.0012281250092200935,
|
||
"timestamp": "2025-07-16T22:57:15.229774",
|
||
"validation_points": [
|
||
{
|
||
"passed": true,
|
||
"message": "跳过测试:在API规范中未找到合适的必填查询参数用于移除测试。",
|
||
"details": {}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"endpoint_id": "GET_/api/dms/wb_dr/v1/wb_dr_pro_daily_report/1.0.0/{id}",
|
||
"endpoint_name": "Read wb_dr_pro_daily_report",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.229871",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "PUT_/api/dms/wb_dr/v1/wb_dr_pro_daily_report",
|
||
"endpoint_name": "Update wb_dr_pro_daily_report",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.229958",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
},
|
||
{
|
||
"endpoint_id": "DELETE_/api/dms/wb_dr/v1/wb_dr_pro_daily_report",
|
||
"endpoint_name": "Delete wb_dr_pro_daily_report",
|
||
"overall_status": "跳过",
|
||
"duration_seconds": 0.0,
|
||
"start_time": "2025-07-16T22:57:15.229971",
|
||
"end_time": null,
|
||
"executed_test_cases": []
|
||
}
|
||
],
|
||
"stage_results": [],
|
||
"api_call_details_summary": []
|
||
} |