| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import sys
- from datetime import datetime
- from pathlib import Path
- from TestCore.email_sender import EmailSender
- from TestCore.report_generator import ReportGenerator
- from TestCore.result_parser import TestResultParser
- from TestCore.test_runner import TestRunner
- # 添加项目根目录到Python路径
- sys.path.append(str(Path(__file__).parent))
- from Config.Config import ALLURE_RESULTS_DIR, ALLURE_REPORT_DIR, REPORT_ARCHIVE_DIR
- from Utils.FileUtils import zip_directory, create_archive_filename, cleanup_old_archives
- from Utils.Log import log_for_api
- logger = log_for_api()
- class AllureReportSystem:
- """Allure测试报告系统主类"""
- def __init__(self):
- self.test_runner = TestRunner()
- self.report_generator = ReportGenerator()
- self.result_parser = TestResultParser(ALLURE_RESULTS_DIR)
- self.email_sender = EmailSender()
- # 报告信息
- self.report_info = {
- "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- }
- def run(self, send_email=True):
- """运行完整的测试报告流程"""
- logger.info("=" * 50)
- logger.info("开始执行自动化测试流程")
- logger.info("=" * 50)
- # 1. 运行测试
- logger.info("步骤 1: 运行测试")
- returncode, stdout, stderr = self.test_runner.run_tests()
- if returncode not in [0, 1]: # 0: 全部通过, 1: 有失败用例
- logger.error("测试执行失败,终止流程")
- return False
- # 2. 解析测试结果
- logger.info("步骤 2: 解析测试结果")
- test_results = self.result_parser.parse_pytest_output(stdout)
- logger.info(f"测试结果: {test_results}")
- # 3. 生成Allure报告
- logger.info("步骤 3: 生成Allure报告")
- if not self.report_generator.is_allure_available():
- logger.error("Allure命令行工具不可用,跳过报告生成")
- else:
- report_generated = self.report_generator.generate_allure_report()
- if not report_generated:
- logger.error("生成Allure报告失败")
- # 4. 压缩报告
- logger.info("步骤 4: 压缩报告")
- archive_filename = create_archive_filename()
- archive_path = REPORT_ARCHIVE_DIR / archive_filename
- zip_success = zip_directory(ALLURE_REPORT_DIR, archive_path)
- if not zip_success:
- logger.error("压缩报告失败")
- archive_path = None
- # 5. 发送邮件
- if send_email and archive_path:
- logger.info("步骤 5: 发送邮件")
- email_sent = self.email_sender.send_email(test_results, self.report_info, str(archive_path))
- if email_sent:
- logger.info("邮件发送成功")
- else:
- logger.error("邮件发送失败")
- # 6. 清理旧归档
- logger.info("步骤 6: 清理旧归档")
- cleanup_old_archives(REPORT_ARCHIVE_DIR)
- logger.info("=" * 50)
- logger.info("自动化测试流程执行完成")
- logger.info("=" * 50)
- return True
- def main():
- """主函数"""
- system = AllureReportSystem()
- success = system.run()
- sys.exit(0 if success else 1)
- if __name__ == "__main__":
- main()
|