测试运行器MCP
用于运行和解析来自多个测试框架的测试结果的模型上下文协议(MCP)服务器。该服务器为执行测试和处理其输出提供了一个统一的接口,支持:
- Bats(Bash自动测试系统)
- Pytest(Python测试框架)
- 颤振试验
- Jest(JavaScript测试框架)
- Go测试
- 锈蚀试验(货物试验)
- 通用(用于任意命令执行)
安装
npm install test-runner-mcp先决条件
需要为各自的测试类型安装以下测试框架:
- 蝙蝠:
apt-get install bats或brew install bats - Pytest:
pip install pytest - Flutter:跟随 颤振安装指南
- 杰斯特:
npm install --save-dev jest - 去:跟随 Go安装指南
- 锈蚀:跟随 除锈安装指南
用法
配置
将测试运行器添加到MCP设置中(例如 claude_desktop_config.json 或 cline_mcp_settings.json):
{
"mcpServers": {
"test-runner": {
"command": "node",
"args": ["/path/to/test-runner-mcp/build/index.js"],
"env": {
"NODE_PATH": "/path/to/test-runner-mcp/node_modules",
// Flutter-specific environment (required for Flutter tests)
"FLUTTER_ROOT": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter",
"PUB_CACHE": "/Users/username/.pub-cache",
"PATH": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}注意:对于Flutter测试,请确保替换:
/opt/homebrew/Caskroom/flutter/3.27.2/flutter使用您实际的Flutter安装路径/Users/username/.pub-cache使用您的实际发布缓存路径- 更新PATH以包含系统的实际路径
您可以通过运行以下命令找到这些值:
# Get Flutter root
flutter --version
# Get pub cache path
echo $PUB_CACHE # or default to $HOME/.pub-cache
# Get Flutter binary path
which flutter运行测试
使用 run_tests 工具具有以下参数:
{
"command": "test command to execute",
"workingDir": "working directory for test execution",
"framework": "bats|pytest|flutter|jest|go|rust|generic",
"outputDir": "directory for test results",
"timeout": "test execution timeout in milliseconds (default: 300000)",
"env": "optional environment variables",
"securityOptions": "optional security options for command execution"
}每个框架的示例:
// Bats
{
"command": "bats test/*.bats",
"workingDir": "/path/to/project",
"framework": "bats",
"outputDir": "test_reports"
}
// Pytest
{
"command": "pytest test_file.py -v",
"workingDir": "/path/to/project",
"framework": "pytest",
"outputDir": "test_reports"
}
// Flutter
{
"command": "flutter test test/widget_test.dart",
"workingDir": "/path/to/project",
"framework": "flutter",
"outputDir": "test_reports",
"FLUTTER_ROOT": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter",
"PUB_CACHE": "/Users/username/.pub-cache",
"PATH": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter/bin:/usr/local/bin:/usr/bin:/bin"
}
// Jest
{
"command": "jest test/*.test.js",
"workingDir": "/path/to/project",
"framework": "jest",
"outputDir": "test_reports"
}
// Go
{
"command": "go test ./...",
"workingDir": "/path/to/project",
"framework": "go",
"outputDir": "test_reports"
}
// Rust
{
"command": "cargo test",
"workingDir": "/path/to/project",
"framework": "rust",
"outputDir": "test_reports"
}
// Generic (for arbitrary commands, CI/CD tools, etc.)
{
"command": "act -j build",
"workingDir": "/path/to/project",
"framework": "generic",
"outputDir": "test_reports"
}
// Generic with security overrides
{
"command": "sudo docker-compose -f docker-compose.test.yml up",
"workingDir": "/path/to/project",
"framework": "generic",
"outputDir": "test_reports",
"securityOptions": {
"allowSudo": true
}
}安全特性
测试运行器包括内置的安全功能,以防止执行可能有害的命令,特别是对于 generic 框架:
- 命令验证
- 积木 sudo 和 su 默认情况下 - 防止危险命令,如 rm -rf / - 阻止安全位置之外的文件系统写入操作
- 环境变量消毒
- 过滤掉潜在危险的环境变量 - 防止覆盖关键系统变量 - 确保安全的路径处理
- 可配置的安全性
- 必要时通过以下方式覆盖安全限制 securityOptions - 对安全功能的细粒度控制 - 标准测试使用的默认安全设置
您可以配置的安全选项:
{
"securityOptions": {
"allowSudo": false, // Allow sudo commands
"allowSu": false, // Allow su commands
"allowShellExpansion": true, // Allow shell expansion like $() or backticks
"allowPipeToFile": false // Allow pipe to file operations (> or >>)
}
}颤振测试支持
测试运行器包括对Flutter测试的增强支持:
- 环境设置
- Flutter环境自动配置 - 路径和PUB_CACHE设置 - 颤振安装验证
- 错误处理
- 堆栈跟踪收集 - 断言错误处理 - 异常捕获 - 测试失败检测
- 输出处理
- 完成测试输出捕获 - 堆栈痕迹保存 - 详细的错误报告 - 原始输出保存
锈蚀测试支持
测试运行器为Rust的 cargo test:
- 环境设置
- 自动设置RUST_BACKTRACE=1以获得更好的错误消息
- 输出解析
- 分析单个测试结果 - 捕获失败测试的详细错误消息 - 识别被忽略的测试 - 提取摘要信息
通用测试支持
对于CI/CD管道,GitHub操作通过 act或任何其他命令执行,通用框架提供:
- 自动输出分析
- 尝试将输出分割成逻辑块 - 标识节标题 - 检测通过/失败指示器 - 即使对于未知格式,也能提供合理的输出结构
- 柔性集成
- 适用于任意shell命令 - 无特定格式要求 - 非常适合与以下工具集成 act、Docker和自定义脚本
- 安全特性
- 命令验证以防止有害操作 - 可以配置为在必要时允许特定的提升权限
输出格式
测试运行器产生结构化输出,同时保留完整的测试输出:
interface TestResult {
name: string;
passed: boolean;
output: string[];
rawOutput?: string; // Complete unprocessed output
}
interface TestSummary {
total: number;
passed: number;
failed: number;
duration?: number;
}
interface ParsedResults {
framework: string;
tests: TestResult[];
summary: TestSummary;
rawOutput: string; // Complete command output
}结果保存在指定的输出目录中:
test_output.log:原始测试输出test_errors.log:错误消息(如有)test_results.json:结构化测试结果summary.txt:人类可读摘要
发展
设置
- 克隆存储库
- 安装依赖项:
npm install- 构建项目:
npm run build运行测试
npm test测试套件包括对所有支持框架的测试,并验证成功和失败的测试场景。
CI/CD
该项目使用GitHub Actions进行持续集成:
- Node.js 18.x和20.x的自动测试
- 测试结果作为工件上传
- Dependabot已配置为自动更新依赖关系
贡献
- 分叉存储库
- 创建功能分支
- 提交您的更改
- 推到分支
- 创建拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
