Files
smart-management-auto-test/generate_report.py

96 lines
4.1 KiB
Python

# -*- coding: utf-8 -*-
import json
import os
# 读取allure-results目录中的result.json文件
results_dir = r'C:\Users\a\PyCharmMiscProject\smart-management-auto-test\dulizhan\test_case\reports\allure-results'
result_files = [f for f in os.listdir(results_dir) if f.endswith('-result.json')]
test_results = []
for result_file in result_files:
file_path = os.path.join(results_dir, result_file)
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
test_results.append({
'name': data.get('name', 'Unknown'),
'status': data.get('status', 'unknown'),
'statusDetails': data.get('statusDetails', {}),
'fullName': data.get('fullName', '')
})
# 统计结果
passed = [r for r in test_results if r['status'] == 'passed']
failed = [r for r in test_results if r['status'] == 'failed']
broken = [r for r in test_results if r['status'] == 'broken']
# 生成HTML报告
html_content = f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JoyHub用户模块接口自动化测试报告</title>
<style>
body {{ font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f5f5f5; }}
.container {{ max-width: 1200px; margin: 0 auto; }}
h1 {{ color: #333; text-align: center; }}
.summary {{ display: flex; justify-content: center; gap: 30px; margin: 30px 0; }}
.stat-box {{ background: white; padding: 20px 40px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }}
.stat-box.passed {{ border-top: 4px solid #52c41a; }}
.stat-box.failed {{ border-top: 4px solid #f5222d; }}
.stat-box.total {{ border-top: 4px solid #1890ff; }}
.stat-value {{ font-size: 36px; font-weight: bold; }}
.stat-label {{ color: #666; }}
.test-list {{ background: white; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); padding: 20px; }}
.test-item {{ display: flex; justify-content: space-between; align-items: center; padding: 10px 15px; border-bottom: 1px solid #eee; }}
.test-item:last-child {{ border-bottom: none; }}
.test-name {{ flex: 1; }}
.status {{ padding: 5px 15px; border-radius: 20px; font-size: 12px; font-weight: bold; }}
.status.passed {{ background: #f6ffed; color: #52c41a; }}
.status.failed {{ background: #fff2f0; color: #f5222d; }}
.status.broken {{ background: #fff7e6; color: #fa8c16; }}
.timestamp {{ text-align: center; color: #999; margin-top: 20px; }}
</style>
</head>
<body>
<div class="container">
<h1>JoyHub用户模块接口自动化测试报告</h1>
<div class="summary">
<div class="stat-box total">
<div class="stat-value">{len(test_results)}</div>
<div class="stat-label">总用例数</div>
</div>
<div class="stat-box passed">
<div class="stat-value">{len(passed)}</div>
<div class="stat-label">通过</div>
</div>
<div class="stat-box failed">
<div class="stat-value">{len(failed) + len(broken)}</div>
<div class="stat-label">失败</div>
</div>
</div>
<div class="test-list">
<h2>测试用例详情</h2>
{''.join([f'''
<div class="test-item">
<div class="test-name">{result['name']}</div>
<div class="status {result['status']}">{result['status']}</div>
</div>
''' for result in test_results])}
</div>
<div class="timestamp">测试时间: {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</div>
</div>
</body>
</html>
"""
# 保存HTML报告
report_path = r'C:\Users\a\PyCharmMiscProject\smart-management-auto-test\dulizhan\test_case\reports\test_report.html'
with open(report_path, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"测试报告已生成: {report_path}")