97 lines
2.2 KiB
Python
97 lines
2.2 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Agent 测试运行器
|
|
运行所有 Agent 相关测试并生成报告
|
|
"""
|
|
|
|
import subprocess
|
|
import sys
|
|
import os
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
|
|
def run_tests():
|
|
"""运行测试"""
|
|
# 获取项目根目录
|
|
project_root = Path(__file__).parent.parent.parent
|
|
os.chdir(project_root)
|
|
|
|
print("=" * 60)
|
|
print("DeepAudit Agent 测试套件")
|
|
print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
# 测试命令
|
|
cmd = [
|
|
sys.executable, "-m", "pytest",
|
|
"tests/agent/",
|
|
"-v",
|
|
"--tb=short",
|
|
"-x", # 遇到第一个失败就停止
|
|
"--color=yes",
|
|
]
|
|
|
|
print(f"运行命令: {' '.join(cmd)}")
|
|
print()
|
|
|
|
# 运行测试
|
|
result = subprocess.run(cmd, cwd=project_root)
|
|
|
|
print()
|
|
print("=" * 60)
|
|
if result.returncode == 0:
|
|
print("✅ 所有测试通过!")
|
|
else:
|
|
print(f"❌ 测试失败 (退出码: {result.returncode})")
|
|
print("=" * 60)
|
|
|
|
return result.returncode
|
|
|
|
|
|
def run_tests_with_coverage():
|
|
"""运行测试并生成覆盖率报告"""
|
|
project_root = Path(__file__).parent.parent.parent
|
|
os.chdir(project_root)
|
|
|
|
cmd = [
|
|
sys.executable, "-m", "pytest",
|
|
"tests/agent/",
|
|
"-v",
|
|
"--cov=app/services/agent",
|
|
"--cov-report=term-missing",
|
|
"--cov-report=html:coverage_agent",
|
|
]
|
|
|
|
result = subprocess.run(cmd, cwd=project_root)
|
|
return result.returncode
|
|
|
|
|
|
def run_specific_test(test_name: str):
|
|
"""运行特定测试"""
|
|
project_root = Path(__file__).parent.parent.parent
|
|
os.chdir(project_root)
|
|
|
|
cmd = [
|
|
sys.executable, "-m", "pytest",
|
|
f"tests/agent/{test_name}",
|
|
"-v",
|
|
"--tb=long",
|
|
"-s", # 显示 print 输出
|
|
]
|
|
|
|
result = subprocess.run(cmd, cwd=project_root)
|
|
return result.returncode
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
if sys.argv[1] == "--coverage":
|
|
sys.exit(run_tests_with_coverage())
|
|
else:
|
|
sys.exit(run_specific_test(sys.argv[1]))
|
|
else:
|
|
sys.exit(run_tests())
|
|
|