Pytest测试管道服务

一个提供完整Pytest管道的模型上下文协议(MCP)服务器,可分析代码、生成测试、运行覆盖测试并自动修复失败。

  • by hadasaelishyov
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 hadasaelishyov/MCP_Server

使用说明

Pytest管道MCP服务器

一个模型上下文协议(MCP)服务器,提供完整的pytest管道:分析代码、生成测试、以覆盖率运行和自动修复故障。


概述

给定一个Python文件或代码字符串,服务器可以:

  • 分析 使用AST解析(函数、类、方法)、验证语法和报告质量指标的代码结构
  • 生成 pytest测试使用 证据优先 方法(文档测试、类型提示、异常、边界值),可选AI细化
  • 跑 在具有覆盖率报告的隔离环境中生成测试
  • 修复 使用AI辅助的错误检测自动失败代码(可选,需要OpenAI API密钥)
  • 整合 使用GitHub分析存储库并创建pull请求
  • 质量:包括300多个内部pytest测试(服务/核心/处理程序),以保持管道的可靠性

安装

需要Python 3.10+。推荐: uv.

git clone https://github.com/hadasaelishyov/pytest-pipeline-mcp.git
cd pytest-pipeline-mcp
uv sync

# sanity check
uv run pytest

跑步

推荐:通过MCP客户端(Cursor/Claude Desktop等)运行

将此服务器添加到MCP客户端配置中。客户端将自动启动它。

配置示例:

{
  "mcpServers": {
    "pytest-pipeline": {
      "command": "uv",
      "args": ["run", "pytest-pipeline-mcp"],
      "cwd": "C:\\path\\to\\pytest-pipeline-mcp"
    }
  }
}

更新配置后重新启动MCP客户端。

调试:手动运行服务器

uv run pytest-pipeline-mcp

可选配置

为可选功能设置环境变量:

  • OPENAI_API_KEY --实现人工智能增强的生成和 fix_code
  • GITHUB_TOKEN --启用GitHub工具(PR/评论)

PowerShell:

$env:OPENAI_API_KEY="..."
$env:GITHUB_TOKEN="..."

端到端管道

该服务器的核心设计原则是 工具可组合性每个工具的输出都被结构化为下一个工具的输入,从而实现无缝链接的工作流程:

┌──────────────┐     ┌─────────────────┐     ┌───────────┐     ┌──────────┐
│ analyze_code │ ──▶ │ generate_tests  │ ──▶ │ run_tests │ ──▶ │ fix_code  │
└──────────────┘     └─────────────────┘     └───────────┘     └──────────┘
       │                     │                     │                 │
       ▼                     ▼                     ▼                 ▼
   Code structure       Test code            Pass/fail +        Fixed code
   + warnings           ready to run         coverage           + verification

工具参考

核心工具

工具 目的 必需 可选
analyze_code 通过AST解析代码,验证语法,报告指标 file_path 或 code —
generate_tests 通过循证富集生成pytest测试 file_path 或 code output_path, include_edge_cases, use_ai
run_tests 在覆盖范围内的隔离环境中执行测试 source_code, test_code —
fix_code 人工智能辅助的错误修复与验证 source_code, test_code test_output, verify

GitHub工具

工具 目的 必需 可选
analyze_repository 克隆并分析测试覆盖率差距的存储库 repo_url branch, path_filter
get_repo_file 从存储库检索文件内容 repo_url, file_path branch
create_test_pr 使用生成的测试创建PR repo_url, test_code, target_file branch, title
comment_test_results PR的测试后结果 repo_url, pr_number, test_results coverage_report

建筑

pytest_pipeline_mcp/
├── server.py                  # MCP entry point (thin routing layer)
├── handlers/                  # Tool handlers (MCP ↔ services)
│   ├── core/                  # analyze, generate, run, fix
│   └── github/                # repo analysis, PR creation, comments
├── services/                  # Business logic (testable without MCP)
│   ├── base.py                # ServiceResult pattern, error codes
│   ├── code_loader.py         # Load Python code from file/string
│   ├── analysis.py            # AnalysisService
│   ├── generation.py          # GenerationService
│   ├── execution.py           # ExecutionService
│   ├── fixing.py              # FixingService
│   ├── github.py              # GitHubService
│   └── repository_analysis.py # RepositoryAnalysisService
└── core/                      # Pure logic (no framework dependencies)
    ├── analyzer/              # AST parsing, syntax validation
    ├── generators/            # Template + AI test generation
    │   ├── template.py        # Layer 1+2: template & evidence tests
    │   ├── ai.py              # Layer 3: AI enhancement
    │   └── extractors/        # Doctest, type, exception extractors
    ├── runner/                # pytest execution, coverage
    ├── fixer/                 # AI-powered bug fixing
    └── repo_analysis/         # Repository analysis models

设计原则:

  • 关注点分离:服务器→ 处理器→ 服务→ Core
  • ServiceResult模式:所有操作返回成功/失败,并带有结构化错误
  • 依赖注入:服务通过以下方式接受依赖关系 __init__ 可测试性
  • 框架独立性:核心模块没有MCP或外部框架依赖关系

测试生成管道

生成器使用三层方法:

  1. 第1层(回退烟雾):仅在未发现循证检测时使用
  2. 第2层(证据):从代码中的具体信号中丰富:
    • Doctest示例→ 确切断言
    • 类型注解→ 类型检查和边界值
    • 发表声明→ pytest.raises 测试
    • 命名约定→ 布尔断言 is_* / has_*
  3. 第3层(AI,可选):OpenAI增强了具有计算期望值的断言

局限性

  • 测试在子流程中运行,超时30秒
  • fix_code 和人工智能增强需要一个OpenAI API密钥
  • GitHub的运营受到费率限制

安全说明

此服务器执行Python代码。不要在没有沙盒的情况下运行不受信任的代码。 安全存储API密钥,并使用最小的GitHub令牌权限。