compliance/tests/test_pdf_optimization.py
gongwenxin fa343eb111 .
2025-08-07 15:07:38 +08:00

241 lines
10 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
测试优化后的PDF报告生成功能
"""
import json
import sys
from pathlib import Path
import datetime
# 添加项目根目录到Python路径
sys.path.insert(0, str(Path(__file__).parent))
from run_api_tests import save_pdf_report
def create_sample_test_data():
"""创建示例测试数据包含40个测试用例和stage用例"""
return {
"start_time": "2025-07-30T10:00:00.000000",
"end_time": "2025-07-30T10:05:30.500000",
"duration_seconds": "330.50",
"overall_summary": {
"total_endpoints_defined": 15,
"endpoints_tested": 12,
"endpoints_passed": 10,
"endpoints_failed": 2,
"endpoints_error": 0,
"endpoints_skipped": 3,
"endpoint_success_rate": "83.33%",
"total_test_cases_applicable": 200,
"total_test_cases_executed": 40, # 模拟40个测试用例
"test_cases_passed": 28,
"test_cases_failed": 12,
"test_cases_error": 0,
"test_case_success_rate": "70.00%",
"total_stages_defined": 1,
"total_stages_executed": 2,
"stages_passed": 2,
"stages_failed": 0,
"stages_error": 0,
"stages_skipped": 0,
"stage_success_rate": "100.00%"
},
"endpoint_results": [
{
"endpoint_id": "POST_/api/dms/wb_ml/v1/well_info",
"endpoint_name": "井信息查询服务",
"overall_status": "通过",
"duration_seconds": 0.245,
"executed_test_cases": [
{
"test_case_id": "TC-STATUS-001",
"test_case_name": "基本状态码 200 检查",
"test_case_severity": "CRITICAL",
"status": "通过",
"message": "响应状态码为 200符合预期。"
},
{
"test_case_id": "TC-HEADER-001",
"test_case_name": "必需请求头Schema验证",
"test_case_severity": "HIGH",
"status": "失败",
"message": "缺少必需的请求头 X-Tenant-ID"
}
]
},
{
"endpoint_id": "POST_/api/dms/wb_ml/v1/layer_info",
"endpoint_name": "分层信息表查询服务",
"overall_status": "通过",
"duration_seconds": 0.189,
"executed_test_cases": [
{
"test_case_id": "TC-STATUS-001",
"test_case_name": "基本状态码 200 检查",
"test_case_severity": "CRITICAL",
"status": "通过",
"message": "响应状态码为 200符合预期。"
},
{
"test_case_id": "TC-CRUD-001",
"test_case_name": "CRUD操作验证",
"test_case_severity": "HIGH",
"status": "通过",
"message": "新增、删除、修改、查询操作正常。"
}
]
},
{
"endpoint_id": "POST_/api/dms/wb_ml/v1/log_parsing",
"endpoint_name": "测井曲线解析服务",
"overall_status": "通过",
"duration_seconds": 0.312,
"executed_test_cases": [
{
"test_case_id": "TC-STATUS-001",
"test_case_name": "基本状态码 200 检查",
"test_case_severity": "CRITICAL",
"status": "通过",
"message": "响应状态码为 200符合预期。"
},
{
"test_case_id": "TC-PARSING-001",
"test_case_name": "数据解析功能验证",
"test_case_severity": "HIGH",
"status": "通过",
"message": "成功解析wis、las格式的测井数据。"
},
{
"test_case_id": "TC-SECURITY-001",
"test_case_name": "HTTPS协议强制性检查",
"test_case_severity": "HIGH",
"status": "失败",
"message": "API通过HTTP响应违反HTTPS强制策略。"
},
{
"test_case_id": "TC-RESTful-001",
"test_case_name": "核心命名与结构规范检查",
"test_case_severity": "HIGH",
"status": "失败",
"message": "响应中包含一个主列表,但其键名不符合规范。"
}
]
},
{
"endpoint_id": "GET_/api/dms/wb_ml/v1/well_info/{id}",
"endpoint_name": "井信息详情查询服务",
"overall_status": "通过",
"duration_seconds": 0.156,
"executed_test_cases": [
{
"test_case_id": "TC-STATUS-001",
"test_case_name": "基本状态码 200 检查",
"test_case_severity": "CRITICAL",
"status": "通过",
"message": "响应状态码为 200符合预期。"
},
{
"test_case_id": "TC-PARAM-001",
"test_case_name": "路径参数验证",
"test_case_severity": "HIGH",
"status": "通过",
"message": "路径参数ID验证通过。"
},
{
"test_case_id": "TC-RESPONSE-001",
"test_case_name": "响应数据格式验证",
"test_case_severity": "HIGH",
"status": "通过",
"message": "响应数据格式符合Schema定义。"
}
]
},
{
"endpoint_id": "PUT_/api/dms/wb_ml/v1/well_info",
"endpoint_name": "井信息更新服务",
"overall_status": "失败",
"duration_seconds": 0.234,
"executed_test_cases": [
{
"test_case_id": "TC-STATUS-001",
"test_case_name": "基本状态码 200 检查",
"test_case_severity": "CRITICAL",
"status": "失败",
"message": "响应状态码为 500预期为 200。"
},
{
"test_case_id": "TC-UPDATE-001",
"test_case_name": "数据更新验证",
"test_case_severity": "HIGH",
"status": "失败",
"message": "数据更新失败,服务器内部错误。"
}
]
}
],
"stage_results": [
{
"stage_id": "dms_crud_scenario_stage",
"stage_name": "DMS Full CRUD Scenario",
"description": "执行完整的Create->Read->Update->Delete->List工作流测试",
"overall_status": "通过",
"duration_seconds": 2.45,
"start_time": "2025-07-30T10:02:00.000000",
"end_time": "2025-07-30T10:02:02.450000"
},
{
"stage_id": "keyword_driven_crud_stage",
"stage_name": "Keyword Driven CRUD Stage",
"description": "基于关键字驱动的CRUD操作测试阶段",
"overall_status": "通过",
"duration_seconds": 1.85,
"start_time": "2025-07-30T10:03:00.000000",
"end_time": "2025-07-30T10:03:01.850000"
}
]
}
def main():
"""主函数"""
print("开始测试优化后的PDF报告生成功能...")
# 创建测试数据
test_data = create_sample_test_data()
# 设置输出路径
output_path = Path("test_reports") / "optimized_report_test.pdf"
output_path.parent.mkdir(parents=True, exist_ok=True)
try:
# 生成PDF报告 - 测试不同的严格等级
save_pdf_report(test_data, output_path, 'HIGH') # 使用HIGH级别测试
if output_path.exists():
print(f"✅ PDF报告生成成功: {output_path}")
print(f"📄 文件大小: {output_path.stat().st_size / 1024:.2f} KB")
print("\n📊 测试数据统计:")
print(f"- 总测试用例数: {test_data['overall_summary']['total_test_cases_executed']}")
print(f"- 端点测试用例: {sum(len(ep.get('executed_test_cases', [])) for ep in test_data['endpoint_results'])}")
print(f"- Stage测试用例: {len(test_data['stage_results'])}")
print(f"- 测试成功率: {test_data['overall_summary']['test_case_success_rate']}")
print("\n📋 报告包含以下优化内容:")
print("- 报告编码和基本信息")
print("- 摘要部分")
print("- API服务列表表格")
print("- 完整测试用例列表包含所有40个用例和stage用例")
print("- 测试情况说明")
print("- 测试结论")
print("- 检测依据")
print("- 报告生成信息")
else:
print("❌ PDF报告生成失败")
except Exception as e:
print(f"❌ 生成PDF报告时出错: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()