report_generator.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import subprocess
  2. from pathlib import Path
  3. from Config.Config import ALLURE_RESULTS_DIR, ALLURE_REPORT_DIR
  4. from Utils.Log import log_for_api
  5. logger = log_for_api()
  6. class ReportGenerator:
  7. """报告生成器"""
  8. def __init__(self, results_dir=None, report_dir=None):
  9. self.results_dir = Path(results_dir) if results_dir else ALLURE_RESULTS_DIR
  10. self.report_dir = Path(report_dir) if report_dir else ALLURE_REPORT_DIR
  11. # 确保目录存在
  12. self.report_dir.mkdir(parents=True, exist_ok=True)
  13. def generate_allure_report(self):
  14. """生成Allure报告"""
  15. # 构建Allure命令
  16. allure_cmd = [
  17. "allure", "generate",
  18. str(self.results_dir),
  19. "-o", str(self.report_dir),
  20. "--clean"
  21. ]
  22. logger.info(f"生成Allure报告命令: {' '.join(allure_cmd)}")
  23. # 执行命令
  24. try:
  25. process = subprocess.Popen(
  26. allure_cmd,
  27. stdout=subprocess.PIPE,
  28. stderr=subprocess.PIPE,
  29. universal_newlines=True,
  30. encoding='utf-8',
  31. errors='replace'
  32. )
  33. stdout, stderr = process.communicate()
  34. # 记录输出
  35. if stdout:
  36. logger.info(f"Allure输出:\n{stdout}")
  37. if stderr:
  38. logger.error(f"Allure错误:\n{stderr}")
  39. return process.returncode == 0
  40. except Exception as e:
  41. logger.error(f"生成Allure报告时发生异常: {e}")
  42. return False
  43. def is_allure_available(self):
  44. """检查Allure命令行工具是否可用"""
  45. try:
  46. process = subprocess.Popen(
  47. ["allure", "--version"],
  48. stdout=subprocess.PIPE,
  49. stderr=subprocess.PIPE
  50. )
  51. process.communicate()
  52. return process.returncode == 0
  53. except:
  54. return False