Skip to main content
Glama
README.md
# API Testing MCP

一个基于 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 的 **API 自动化测试服务器**。

提供从 API 规范解析、测试场景生成、测试代码生成、测试数据构造、测试执行到 AI 智能审核的**全流程 API 测试能力**,可被 Claude Desktop、Cursor、Cline 等任何 MCP 客户端直接调用。

---

## 功能概览

```
                         ┌──────────────────────────────────────┐
  OpenAPI 3.x ──┐       │          API Testing MCP             │
  Swagger 2.0 ──┤       │                                      │
  Postman      ──┼──────>│  解析 → 生成场景 → 生成代码/数据     │──────> 可执行测试代码
  HAR          ──┘       │           ↓                          │──────> 测试数据集
                         │       执行测试 → AI 审核 → 自动修复   │──────> 测试报告
                         └──────────────────────────────────────┘
```

### 8 个 MCP 工具

| # | 工具 | 功能 |
|---|------|------|
| 1 | `tool_parse_api_spec` | 解析 API 规范 (OpenAPI 3.x / Swagger 2.0 / Postman / HAR) |
| 2 | `tool_generate_test_scenarios` | 生成全面测试场景 (8 大类别,每端点最多 50 个) |
| 3 | `tool_generate_test_code` | 生成可执行测试代码 (Python / JavaScript / TypeScript / cURL) |
| 4 | `tool_generate_test_data` | 用 11 种策略生成测试数据 |
| 5 | `tool_execute_api_test` | 执行单个 API 测试并验证响应 |
| 6 | `tool_run_test_suite` | 批量运行测试套件 (支持并发) |
| 7 | `tool_ai_review` | AI 智能审核 + 自动修复 |
| 8 | `tool_configure` | 配置 AI 模型提供商 / 查看当前配置 |

---

## 快速开始

### 安装

```bash
# 克隆仓库
git clone https://github.com/amyzlp/API-Testing-MCP.git
cd API-Testing-MCP

# 安装 (推荐使用 editable 模式)
pip install -e .

# 如需使用 Anthropic Claude 作为 AI 审核模型
pip install -e ".[anthropic]"
```

### 运行

```bash
# 启动 MCP 服务器
api-testing-mcp

# 或者
python -m api_testing_mcp.server
```

### 在 MCP 客户端中配置

<details>
<summary><b>Claude Desktop</b></summary>

编辑 `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "api-testing": {
      "command": "api-testing-mcp",
      "env": {
        "DEEPSEEK_API_KEY": "sk-your-key"
      }
    }
  }
}
```
</details>

<details>
<summary><b>Cursor</b></summary>

在 Settings → MCP Servers 中添加:

```json
{
  "api-testing": {
    "command": "api-testing-mcp",
    "env": {
      "DEEPSEEK_API_KEY": "sk-your-key"
    }
  }
}
```
</details>

<details>
<summary><b>Cline (VS Code)</b></summary>

在 Cline MCP 设置中添加:

```json
{
  "mcpServers": {
    "api-testing": {
      "command": "api-testing-mcp",
      "env": {
        "DEEPSEEK_API_KEY": "sk-your-key"
      }
    }
  }
}
```
</details>

---

## 工具详解

### 1. `tool_parse_api_spec` — 解析 API 规范

支持 4 种格式的 API 规范,解析为统一的结构化数据:

| 格式 | 支持版本 |
|------|---------|
| OpenAPI | 3.0.x, 3.1.x |
| Swagger | 2.0 |
| Postman Collection | v2.x |
| HAR (HTTP Archive) | 1.2 |

**参数:**
- `spec_content` — API 规范的 JSON 或 YAML 字符串

**返回:** 结构化的 API 信息,包含端点、参数、请求体、响应、安全方案等。

---

### 2. `tool_generate_test_scenarios` — 生成测试场景

根据 API 规范自动生成覆盖全面的测试场景:

| 类别 | 说明 |
|------|------|
| `happy_path` | 正常流程 — 必填参数、全部参数、示例值 |
| `input_validation` | 输入验证 — 缺少必填字段、类型错误、无效枚举 |
| `boundary` | 边界值 — 最小值/最大值/溢出/空字符串 |
| `error_handling` | 错误处理 — 404 资源不存在、405 方法错误、415 类型错误 |
| `security` | 安全测试 — SQL 注入、XSS、路径穿越、命令注入、SSRF |
| `authentication` | 认证测试 — 无凭证、无效 Token、过期 Token |
| `edge_case` | 边缘用例 — 特殊字符、未知参数、Unicode |
| `idempotency` | 幂等性 — PUT/DELETE 重复请求一致性 |

**参数:**
- `spec_content` — API 规范
- `categories` — 要生成的类别 (逗号分隔,留空为全部)
- `max_per_endpoint` — 每端点最大场景数 (默认 50)
- `endpoint_filter` — 端点路径过滤

---

### 3. `tool_generate_test_code` — 生成测试代码

将测试场景转换为可直接运行的测试代码:

| 语言 | 框架 | 运行方式 |
|------|------|---------|
| Python | pytest + requests | `pytest test_api.py -v` |
| JavaScript | Node.js + fetch | `node test_api.js` |
| TypeScript | vitest + fetch | `npx vitest run test_api.ts` |
| cURL | Bash 脚本 | `bash test_api.sh` |

**参数:**
- `spec_content` — API 规范
- `language` — 目标语言 (`python` / `javascript` / `typescript` / `curl`)
- `auth_type` — 认证类型 (`bearer` / `basic` / `api_key`)
- `auth_token` — 认证令牌

---

### 4. `tool_generate_test_data` — 生成测试数据

用 11 种策略自动生成测试数据集:

| 策略 | 说明 |
|------|------|
| `valid` | 有效数据 — 符合类型和约束 |
| `boundary` | 边界值 — 最小/最大/临界值 |
| `invalid` | 无效数据 — 类型错误的值 |
| `random` | 随机数据 — 随机生成 |
| `realistic` | 仿真数据 — 类似真实生产数据 |
| `sql_injection` | SQL 注入载荷 |
| `xss` | XSS 攻击载荷 |
| `empty` | 空值 — 空字符串/零/空数组 |
| `null` | Null 值 |
| `overflow` | 溢出值 — 超大字符串/极限数字 |
| `unicode` | Unicode — 中日韩文字/Emoji/零宽字符 |

---

### 5. `tool_execute_api_test` — 执行单个测试

发送 HTTP 请求并验证响应:

- 支持所有 HTTP 方法 (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS)
- 支持 Bearer / Basic / API Key 认证
- 自动断言: 状态码、响应体内容、响应时间
- 返回完整的请求/响应详情和断言结果

---

### 6. `tool_run_test_suite` — 运行测试套件

一键解析规范 → 生成场景 → 批量执行:

- 支持并发请求 (默认 5 并发)
- 按类别/优先级分组统计
- 输出通过率、响应时间、详细断言结果

---

### 7. `tool_ai_review` — AI 智能审核

**双层审核机制:**

```
┌─────────────────────────────────────────┐
│  第一层: 程序化检查 (始终运行)             │
│  ├── 覆盖率分析 (缺失分类检测)            │
│  ├── 一致性验证 (状态码逻辑检查)           │
│  ├── 安全检测 (凭证泄露/硬编码检查)        │
│  ├── 类型检查 (参数类型匹配验证)           │
│  └── 代码质量 (断言完整性/错误处理)        │
├─────────────────────────────────────────┤
│  第二层: AI 深度审查 (可选,需配置模型)     │
│  ├── 遗漏测试用例识别                     │
│  ├── 不合理参数值检测                     │
│  ├── 冗余/重复场景发现                    │
│  └── 安全测试完整性评估                   │
├─────────────────────────────────────────┤
│  自动修复: 最小化调整                      │
│  ├── 修正不一致的状态码                    │
│  ├── 替换硬编码凭证为环境变量              │
│  ├── 修正类型不匹配的参数                  │
│  └── 替换疑似真实密钥为占位符              │
└─────────────────────────────────────────┘
```

**审核对象:**
- `scenario` — 测试场景
- `test_code` — 测试代码
- `test_data` — 测试数据
- `parameter` — 请求参数

**返回:** 评分 (0-100)、问题列表、修复建议、自动修复后的内容。

---

### 8. `tool_configure` — 配置管理

运行时查看和修改 AI 模型配置:

```
# 查看当前配置
tool_configure(action="show")

# 列出所有支持的提供商
tool_configure(action="providers")

# 设置提供商
tool_configure(action="set", provider="deepseek", api_key="sk-xxx")
```

---

## AI 模型配置

AI 审核功能支持 **17 个模型提供商**,涵盖国际模型、国内大模型和本地部署:

### 支持的提供商

| 分类 | 提供商 | 标识 | 环境变量 | 默认模型 |
|------|--------|------|---------|---------|
| 国际 | OpenAI | `openai` | `OPENAI_API_KEY` | gpt-4o |
| 国际 | Anthropic | `anthropic` | `ANTHROPIC_API_KEY` | claude-sonnet-4-20250514 |
| 国内 | 通义千问/Qwen | `qwen` | `DASHSCOPE_API_KEY` | qwen-plus |
| 国内 | 智谱 AI/GLM | `zhipu` | `ZHIPU_API_KEY` | glm-4-plus |
| 国内 | DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | deepseek-chat |
| 国内 | Moonshot/Kimi | `moonshot` | `MOONSHOT_API_KEY` | moonshot-v1-8k |
| 国内 | 零一万物/Yi | `yi` | `YI_API_KEY` | yi-large |
| 国内 | 百川/Baichuan | `baichuan` | `BAICHUAN_API_KEY` | Baichuan4 |
| 国内 | 文心一言/ERNIE | `ernie` | `ERNIE_API_KEY` | ernie-4.0-8k |
| 国内 | 豆包/Doubao | `doubao` | `DOUBAO_API_KEY` | doubao-pro-32k |
| 国内 | MiniMax | `minimax` | `MINIMAX_API_KEY` | abab6.5s-chat |
| 国内 | 阶跃星辰 | `stepfun` | `STEPFUN_API_KEY` | step-2-16k |
| 本地 | Ollama | `ollama` | 不需要 | llama3.1 |
| 本地 | LM Studio | `lmstudio` | 不需要 | local-model |
| 本地 | vLLM | `vllm` | 不需要 | default |
| 本地 | LocalAI | `localai` | 不需要 | gpt-4 |
| 本地 | llama.cpp | `llamacpp` | 不需要 | default |

> 所有国内模型均通过 **OpenAI 兼容 API** 接入,无需额外适配。

### 配置方式

#### 方式一: 环境变量 (推荐)

只需设置一个提供商的 API Key,系统自动识别:

```bash
# 使用 DeepSeek (推荐,性价比高)
export DEEPSEEK_API_KEY=sk-xxx

# 使用通义千问
export DASHSCOPE_API_KEY=sk-xxx

# 使用 OpenAI
export OPENAI_API_KEY=sk-xxx
```

如需指定模型:

```bash
export AI_PROVIDER=deepseek
export AI_MODEL=deepseek-chat
export DEEPSEEK_API_KEY=sk-xxx
```

#### 方式二: 本地模型 (不需要 API Key)

```bash
# Ollama
export AI_PROVIDER=ollama
export AI_MODEL=qwen2.5    # 或 llama3.1, deepseek-v2, etc.

# LM Studio
export AI_PROVIDER=lmstudio

# vLLM
export AI_PROVIDER=vllm
export AI_BASE_URL=http://localhost:8000/v1
```

#### 方式三: .env 文件

```bash
cp .env.example .env
# 编辑 .env 填入配置
```

#### 方式四: MCP 客户端配置

在 Claude Desktop / Cursor 的 MCP 配置中直接传入:

```json
{
  "mcpServers": {
    "api-testing": {
      "command": "api-testing-mcp",
      "env": {
        "AI_PROVIDER": "deepseek",
        "DEEPSEEK_API_KEY": "sk-xxx"
      }
    }
  }
}
```

#### 方式五: 运行时动态配置

通过 `tool_configure` 工具在对话中直接设置:

```
tool_configure(action="set", provider="qwen", api_key="sk-xxx")
```

> **注意:** 不配置 AI 模型不影响使用。AI 审核为可选功能,未配置时 `tool_ai_review` 仍会执行程序化检查并返回结果。

---

## 项目结构

```
API-Testing-MCP/
├── pyproject.toml                  # 项目配置与依赖
├── .env.example                    # 环境变量配置模板
└── src/api_testing_mcp/
    ├── server.py                   # MCP 服务器入口 (8 个工具注册)
    ├── types.py                    # Pydantic 数据模型 (20+ 类型定义)
    ├── utils.py                    # 工具函数 (值生成/边界计算/安全载荷)
    ├── llm_client.py               # LLM 统一调用层 (17 提供商适配)
    └── tools/
        ├── parse_spec.py           # API 规范解析 (4 种格式)
        ├── generate_scenarios.py   # 测试场景生成 (8 大类别)
        ├── generate_code.py        # 测试代码生成 (4 种语言)
        ├── generate_data.py        # 测试数据生成 (11 种策略)
        ├── execute_test.py         # 测试执行引擎 (异步并发)
        └── review.py               # AI 审核层 (双层检查 + 自动修复)
```

---

## 使用示例

### 示例 1: 从 OpenAPI 规范生成完整测试

```
用户: 解析这个 API 规范,生成测试场景和 Python 测试代码

→ tool_parse_api_spec(spec_content=<OpenAPI YAML>)
→ tool_generate_test_scenarios(spec_content=<spec>, categories="happy_path,security")
→ tool_generate_test_code(spec_content=<spec>, language="python", auth_type="bearer")
→ tool_ai_review(target_type="test_code", content=<生成的代码>)
```

### 示例 2: 生成安全测试数据

```
用户: 给 /api/users POST 端点生成 SQL 注入和 XSS 测试数据

→ tool_generate_test_data(spec_content=<spec>, strategies="sql_injection,xss", endpoint_filter="/users")
→ tool_ai_review(target_type="test_data", content=<生成的数据>)
```

### 示例 3: 直接测试一个 API

```
用户: 测试一下 https://httpbin.org/get 返回 200

→ tool_execute_api_test(url="https://httpbin.org/get", method="GET", expected_status=200)
```

### 示例 4: 运行完整测试套件

```
用户: 对这个 API 规范运行完整测试

→ tool_run_test_suite(spec_content=<spec>, categories="happy_path,error_handling,security")
```

---

## 技术栈

| 组件 | 技术选型 |
|------|---------|
| MCP 框架 | [FastMCP](https://github.com/modelcontextprotocol/python-sdk) |
| 数据模型 | [Pydantic v2](https://docs.pydantic.dev/) |
| HTTP 客户端 | [httpx](https://www.python-httpx.org/) (异步) |
| YAML 解析 | [PyYAML](https://pyyaml.org/) |
| LLM 调用 | [OpenAI SDK](https://github.com/openai/openai-python) (兼容协议) + [Anthropic SDK](https://github.com/anthropics/anthropic-sdk-python) (可选) |
| Python 版本 | >= 3.10 |

---

## 开发

```bash
# 克隆并安装开发环境
git clone https://github.com/amyzlp/API-Testing-MCP.git
cd API-Testing-MCP
pip install -e ".[all]"

# 运行服务器
api-testing-mcp

# 直接测试模块
python -c "
from api_testing_mcp.tools.parse_spec import parse_api_spec
from api_testing_mcp.tools.generate_scenarios import generate_test_scenarios
import json

spec = parse_api_spec(json.dumps({
    'openapi': '3.0.0',
    'info': {'title': 'Demo', 'version': '1.0'},
    'paths': {'/users': {'get': {'responses': {'200': {'description': 'ok'}}}}}
}))
scenarios = generate_test_scenarios(spec)
print(f'生成了 {len(scenarios)} 个测试场景')
"
```

---

## 许可证

MIT