Skip to main content
Glama
test_regression_protection.py5.16 kB
#!/usr/bin/env python3 """ 回归测试保护脚本 防止新功能破坏已有功能的自动化测试 """ import subprocess import sys import os from datetime import datetime from pathlib import Path class RegressionProtector: """回归测试保护器""" def __init__(self): self.test_results = [] self.failed_tests = [] # 获取项目根目录 self.project_root = Path(__file__).parent def run_test(self, test_name, test_command): """运行单个测试""" print(f"\n🧪 运行测试: {test_name}") print("=" * 50) try: result = subprocess.run( test_command, shell=True, capture_output=True, text=True, timeout=60, cwd=str(self.project_root) # 设置工作目录 ) if result.returncode == 0: print(f"✅ {test_name} - 通过") self.test_results.append((test_name, "PASS", "")) return True else: print(f"❌ {test_name} - 失败") print(f"错误输出: {result.stderr}") self.test_results.append((test_name, "FAIL", result.stderr)) self.failed_tests.append(test_name) return False except subprocess.TimeoutExpired: print(f"⏰ {test_name} - 超时") self.test_results.append((test_name, "TIMEOUT", "测试超时")) self.failed_tests.append(test_name) return False except Exception as e: print(f"💥 {test_name} - 异常: {e}") self.test_results.append((test_name, "ERROR", str(e))) self.failed_tests.append(test_name) return False def run_core_tests(self): """运行核心功能测试""" print("🛡️ 开始回归测试保护检查") print("=" * 60) # 核心测试列表 core_tests = [ ("Shell配置测试", "python3 test_shell_config.py"), # ("Zsh连接测试", "python3 test_zsh_connection.py"), # 暂时禁用,需要实际网络连接 ("配置文件语法检查", f"python3 -c 'import sys; sys.path.insert(0, \"{self.project_root}/../python\"); import config_manager.main; print(\"配置管理器导入成功\")'"), ("MCP服务器语法检查", f"python3 -c 'import sys; sys.path.insert(0, \"{self.project_root}/../python\"); import mcp_server; print(\"MCP服务器导入成功\")'"), ] # 运行所有测试 for test_name, test_command in core_tests: self.run_test(test_name, test_command) # 生成报告 self.generate_report() # 返回是否所有测试都通过 return len(self.failed_tests) == 0 def generate_report(self): """生成测试报告""" print("\n📊 回归测试报告") print("=" * 60) total_tests = len(self.test_results) passed_tests = total_tests - len(self.failed_tests) print(f"总测试数: {total_tests}") print(f"通过: {passed_tests}") print(f"失败: {len(self.failed_tests)}") print(f"成功率: {(passed_tests/total_tests)*100:.1f}%") if self.failed_tests: print(f"\n❌ 失败的测试:") for test_name in self.failed_tests: print(f" - {test_name}") print(f"\n⚠️ 警告: 有 {len(self.failed_tests)} 个测试失败!") print("建议在提交代码前修复这些问题。") else: print(f"\n✅ 所有测试通过! 代码质量良好。") # 保存报告到文件 self.save_report_to_file() def save_report_to_file(self): """保存报告到文件""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") report_file = f"regression_test_report_{timestamp}.txt" with open(report_file, 'w', encoding='utf-8') as f: f.write(f"回归测试报告 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") f.write("=" * 60 + "\n\n") for test_name, status, error in self.test_results: f.write(f"{test_name}: {status}\n") if error: f.write(f" 错误: {error}\n") f.write("\n") print(f"📄 详细报告已保存到: {report_file}") def main(): """主函数""" protector = RegressionProtector() print("🚀 Remote Terminal - 回归测试保护") print("防止新功能破坏已有功能") print("=" * 60) # 运行核心测试 all_passed = protector.run_core_tests() # 根据结果设置退出码 if all_passed: print("\n🎉 所有测试通过! 可以安全提交代码。") sys.exit(0) else: print("\n🚨 有测试失败! 请修复后再提交代码。") sys.exit(1) if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/maricoxu/remote-terminal-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server