| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import subprocess
- from pathlib import Path
- from Config.Config import ALLURE_RESULTS_DIR, ALLURE_REPORT_DIR
- from Utils.Log import log_for_api
- logger = log_for_api()
- class ReportGenerator:
- """报告生成器"""
- def __init__(self, results_dir=None, report_dir=None):
- self.results_dir = Path(results_dir) if results_dir else ALLURE_RESULTS_DIR
- self.report_dir = Path(report_dir) if report_dir else ALLURE_REPORT_DIR
- # 确保目录存在
- self.report_dir.mkdir(parents=True, exist_ok=True)
- def generate_allure_report(self):
- """生成Allure报告"""
- # 构建Allure命令
- allure_cmd = [
- "allure", "generate",
- str(self.results_dir),
- "-o", str(self.report_dir),
- "--clean"
- ]
- logger.info(f"生成Allure报告命令: {' '.join(allure_cmd)}")
- # 执行命令
- try:
- process = subprocess.Popen(
- allure_cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- universal_newlines=True,
- encoding='utf-8',
- errors='replace'
- )
- stdout, stderr = process.communicate()
- # 记录输出
- if stdout:
- logger.info(f"Allure输出:\n{stdout}")
- if stderr:
- logger.error(f"Allure错误:\n{stderr}")
- return process.returncode == 0
- except Exception as e:
- logger.error(f"生成Allure报告时发生异常: {e}")
- return False
- def is_allure_available(self):
- """检查Allure命令行工具是否可用"""
- try:
- process = subprocess.Popen(
- ["allure", "--version"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE
- )
- process.communicate()
- return process.returncode == 0
- except:
- return False
|