| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import subprocess
- import sys
- from pathlib import Path
- from Config.Config import TESTS_DIR, ALLURE_RESULTS_DIR
- from Utils.Log import log_for_api
- logger = log_for_api()
- class TestRunner:
- """测试运行器"""
- def __init__(self, tests_dir=None, results_dir=None):
- self.tests_dir = Path(tests_dir) if tests_dir else TESTS_DIR
- self.results_dir = Path(results_dir) if results_dir else ALLURE_RESULTS_DIR
- # 确保目录存在
- self.results_dir.mkdir(parents=True, exist_ok=True)
- def run_tests(self, additional_args=None):
- """运行测试套件"""
- if additional_args is None:
- additional_args = []
- # 构建pytest命令
- pytest_cmd = [
- sys.executable, "-m", "pytest",
- str(self.tests_dir),
- f"--alluredir={self.results_dir}",
- "--clean-alluredir",
- "-v"
- ] + additional_args
- logger.info(f"运行测试命令: {' '.join(pytest_cmd)}")
- # 执行测试
- try:
- process = subprocess.Popen(
- pytest_cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- universal_newlines=True,
- encoding='utf-8',
- errors='replace'
- )
- stdout, stderr = process.communicate()
- # 记录输出
- if stdout:
- logger.info(f"测试输出:\n{stdout}")
- if stderr:
- logger.error(f"测试错误:\n{stderr}")
- return process.returncode, stdout, stderr
- except Exception as e:
- logger.error(f"运行测试时发生异常: {e}")
- return -1, "", str(e)
|