""" 全面系统测试执行脚本 执行所有测试并生成详细报告。 """ import subprocess import sys from pathlib import Path from datetime import datetime def run_command(cmd, description): """运行命令并返回结果""" print(f"\n{'='*60}") print(f"🧪 {description}") print(f"{'='*60}") print(f"命令: {cmd}") print("") result = subprocess.run(cmd, shell=True, capture_output=True, text=True) if result.stdout: print(result.stdout) if result.stderr: print("STDERR:", result.stderr) return result.returncode == 0 def main(): """主函数""" print("🚀 开始全面系统测试") print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") # 创建报告目录 report_dir = Path("reports") report_dir.mkdir(exist_ok=True) results = {} # 1. 冒烟测试 results["冒烟测试"] = run_command( "python -m pytest tests/ -m smoke -v --tb=short -q --no-header 2>&1 | head -50", "Phase 1: 冒烟测试" ) # 2. Admin端认证测试 results["Admin认证"] = run_command( "python -m pytest tests/web/test_auth.py -v --tb=short -q --no-header 2>&1 | head -50", "Phase 2: Admin端认证测试" ) # 3. Admin端用户管理测试 results["Admin用户管理"] = run_command( "python -m pytest tests/web/test_user_management.py -v --tb=short -q --no-header 2>&1 | head -50", "Phase 3: Admin端用户管理测试" ) # 4. Uniapp端黄历测试 results["Uniapp黄历"] = run_command( "python -m pytest tests/uniapp/test_almanac.py -v --tb=short -q --no-header 2>&1 | head -50", "Phase 4: Uniapp端黄历测试" ) # 5. Uniapp端日历测试 results["Uniapp日历"] = run_command( "python -m pytest tests/uniapp/test_calendar.py -v --tb=short -q --no-header 2>&1 | head -50", "Phase 5: Uniapp端日历测试" ) # 生成报告 print(f"\n{'='*60}") print("📊 测试执行报告") print(f"{'='*60}") passed = sum(1 for v in results.values() if v) total = len(results) print(f"\n总测试项: {total}") print(f"通过: {passed}") print(f"失败: {total - passed}") print(f"通过率: {passed/total*100:.1f}%") print("\n详细结果:") for name, result in results.items(): status = "✅ 通过" if result else "❌ 失败" print(f" {status} - {name}") # 保存报告 report_file = report_dir / f"test_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" with open(report_file, "w") as f: f.write(f"测试执行报告\n") f.write(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") f.write(f"总测试项: {total}\n") f.write(f"通过: {passed}\n") f.write(f"失败: {total - passed}\n") f.write(f"通过率: {passed/total*100:.1f}%\n\n") f.write("详细结果:\n") for name, result in results.items(): status = "通过" if result else "失败" f.write(f" {status} - {name}\n") print(f"\n📄 报告已保存: {report_file}") # 返回退出码 return 0 if all(results.values()) else 1 if __name__ == "__main__": sys.exit(main())