项目简介

Test Runner MCP 是一个基于 Model Context Protocol (MCP) 构建的服务器,旨在为 LLM 应用提供统一的测试执行和结果解析能力。它支持多种流行的测试框架,包括 Bats, Pytest, Flutter, Jest 和 Go,允许 LLM 客户端通过标准化的 MCP 协议调用和管理测试任务。

主要功能点

  • 统一测试接口: 提供 'run_tests' 工具,LLM 客户端可以使用相同的接口运行不同框架的测试。
  • 多框架支持: 支持 Bats, Pytest, Flutter, Jest, Go 等多种测试框架。
  • 结构化输出: 解析各种测试框架的输出,提供结构化的 JSON 结果,方便 LLM 理解和处理测试结果。
  • 详细日志: 保存原始测试输出和错误日志,方便问题排查。
  • 灵活配置: 允许配置测试命令、工作目录、超时时间和环境变量。
  • Flutter 增强支持: 针对 Flutter 测试进行了特殊优化,包括环境配置、错误处理和详细输出处理。

安装步骤

  1. 克隆仓库 (如果需要修改或开发,本项目本身是npm包,客户端无需克隆此仓库)
  2. 安装 npm 包 (对于希望直接使用该 MCP 服务器的用户,通常是安装到 MCP 客户端环境,例如 Claude 客户端):
    npm install test-runner-mcp
  3. 安装测试框架 (根据需要测试的框架,安装相应的测试工具,确保这些工具在运行 MCP 服务器的环境中可用):
    • Bats: 'apt-get install bats' 或 'brew install bats'
    • Pytest: 'pip install pytest'
    • Flutter: 参考 Flutter 安装指南
    • Jest: 'npm install --save-dev jest'
    • Go: 参考 Go 安装指南

服务器配置

要将 Test Runner MCP 服务器添加到 MCP 客户端配置中,您需要配置 'mcpServers' 部分。以下是一个示例配置,通常在 'claude_desktop_config.json' 或 'cline_mcp_settings.json' 文件中配置:

{
  "mcpServers": {
    "test-runner": {  // 服务器名称,客户端用此名称引用
      "command": "node", // 启动服务器的命令,这里使用 node 运行 JavaScript 文件
      "args": ["/path/to/test-runner-mcp/build/index.js"], // 启动命令的参数,指向编译后的 index.js 文件路径
      "env": { // 环境变量配置 (可选)
        "NODE_PATH": "/path/to/test-runner-mcp/node_modules" // Node.js 模块路径 (如果需要)
        // "FLUTTER_ROOT": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter", // Flutter 根目录 (如果需要 Flutter 测试)
        // "PUB_CACHE": "/Users/username/.pub-cache", // Pub 缓存路径 (如果需要 Flutter 测试)
        // "PATH": "/opt/homebrew/Caskroom/flutter/3.27.2/flutter/bin:/usr/local/bin:/usr/bin:/bin" // 包含 Flutter 命令的 PATH (如果需要 Flutter 测试)
      }
    }
  }
}

注意:

  • 请将 '/path/to/test-runner-mcp' 替换为 'test-runner-mcp' 包的实际安装路径。通常,如果您全局安装了 'test-runner-mcp',可以尝试使用 'which test-runner-mcp' 或 'where test-runner-mcp' 查找安装路径,然后根据相对路径调整 'args' 中的路径。如果是在项目内部安装,则路径可能类似于 './node_modules/test-runner-mcp/build/index.js'。
  • 如果您需要运行 Flutter 测试,请根据您的 Flutter 安装路径配置 'FLUTTER_ROOT', 'PUB_CACHE' 和 'PATH' 环境变量。您可以使用 'flutter --version', 'echo $PUB_CACHE', 'which flutter' 命令获取这些值。

基本使用方法

配置完成后,LLM 客户端可以通过 MCP 协议调用 'run_tests' 工具来执行测试。以下是一个调用示例 (JSON 格式,通常由 MCP 客户端自动构建和发送):

{
  "tool_call": {
    "name": "run_tests",
    "arguments": {
      "command": "pytest test_file.py -v", // 要执行的测试命令,例如 "pytest test_file.py -v" 或 "bats test/*.bats"
      "workingDir": "/path/to/your/project", // 测试项目的工作目录
      "framework": "pytest", // 使用的测试框架,可选值: "bats", "pytest", "flutter", "jest", "go"
      "outputDir": "test_reports", // (可选) 测试结果输出目录,默认为 "test_reports"
      "timeout": 600000, // (可选) 测试执行超时时间,单位毫秒,默认为 300000 (5分钟)
      "env": { // (可选) 额外的环境变量
        // "CUSTOM_VAR": "custom_value"
      }
    }
  }
}

参数说明:

  • 'command': 要执行的测试命令,根据不同的测试框架和项目进行调整。
  • 'workingDir': 测试项目所在的绝对路径。
  • 'framework': 指定测试框架,必须是 "bats", "pytest", "flutter", "jest", "go" 之一。
  • 'outputDir' (可选): 用于存放测试结果文件的目录名,相对于 'workingDir'。
  • 'timeout' (可选): 测试执行的最大时长,单位毫秒。
  • 'env' (可选): 额外的环境变量,用于传递测试所需的配置信息。

LLM 客户端发送上述请求后,Test Runner MCP 服务器将执行指定的测试命令,解析测试结果,并将结果以文本形式返回给客户端。详细的测试报告 (JSON, 日志文件等) 将保存在 'workingDir' 下的 'outputDir' 目录中。

信息

分类

开发者工具