mcp-swagger-server/docs/mcp-openapi-auto-testing-im...

149 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 基于 AI + MCP Tools 的 OpenAPI 接口自动化测试 — 实施方案
本方案基于现有三包架构a- 工具来源改为:
- 路由若携带 serverId则从 serverAPI.getServerDetails(serverId) 读取 tools 列表;
- 否则维持现有基于 OpenAPI 的本地转换列表(作为兜底)。
- 执行逻辑:
- 调用后端 executeServerTool显示真实结果
- 保留现有参数校验与表单渲染逻辑;
- 历史记录沿用 testingStore但 result 取后端返回。
3) ServerDetail.vue 交互
- 工具表点击"测试"时,跳转到 /tester?serverId={id}&toolId={toolId}APITester 接管并自动选中该工具。
4) AI 智能测试界面(新增)
- 新建 AITester.vue 组件,提供 AI 驱动的批量测试功能:
- 选择 MCP Server 和要测试的 Tools 子集
- AI 自动生成测试参数和执行计划
- 展示测试执行进度和结果分析
- 生成智能测试报告
## 三、AI 智能体集成
1) AI 服务接口设计
- POST /v1/ai/generate-test-plan基于 Tools Schema 生成测试计划
- POST /v1/ai/execute-test-plan执行 AI 生成的测试计划
- GET /v1/ai/test-reports/:id获取 AI 生成的测试报告
2) AI 核心能力
- **工具理解**:读取 MCP Tools 的 schema 信息,理解参数类型、约束、依赖关系
- **参数生成**:基于 schema 约束,生成正常值、边界值、异常值测试数据
- **执行编排**:分析 Tools 间的依赖关系(如需要先登录再访问用户信息),规划执行顺序
- **结果分析**:解析 Tool 执行结果,判断成功/失败,识别业务逻辑问题
3) MCP Tools 作为执行引擎
- AI 不直接调用 HTTP 接口,而是通过现有的 MCP Client 调用 Tools
- 充分利用 mcp-swagger-server 的转换成果
- 保持与现有架构的一致性
## 四、数据与安全),以 mcp-swagger-server 已转换的 MCP Tools 为基础,构建 AI 智能测试系统。核心思路是让 AI 通过 MCP Client 调用现成的 Tools而非重新解析 API 文档。
## 架构概览
```
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI 智能体 │ │ MCP Client │ │ MCP Tools │
│ (测试编排) │───▶│ (工具执行) │───▶│ (已转换接口) │
│ │ │ │ │ │
│ • 策略规划 │ │ • stdio/stream │ │ • GET /users │
│ • 参数生成 │ │ • JSON-RPC │ │ • POST /login │
│ • 结果分析 │ │ • 错误处理 │ │ • PUT /profile │
└─────────────────┘ └──────────────────┘ └─────────────────┘
```
## 一、后端改造packages/mcp-swagger-apiMCP 自动进行 OpenAPI 接口测试 — 实施方案
本方案依托现有三包架构api / ui / server补齐“执行 MCP Tool”的后端能力并将 UI 测试器接入真实执行流。
## 一、后端改造packages/mcp-swagger-api
1) 新增服务 MCPExecutionService
- 作用:根据服务器传输类型与子进程句柄,代表 UI 执行指定 Tool。
- 核心职责:
- 构造 MCP 初始化请求initialize、tools/list 可选、tools/call 调用。
- 适配不同传输:
- STDIO通过 ProcessManagerService 获取 ChildProcess使用其 stdin/stdout 建立 JSON-RPC 通道,发送/接收消息。
- STREAMABLE向 /mcp 端点server.config.endpoint发起 HTTP POST维护 sessionId按协议发送 initialize -> tools/call。
- SSE/WS暂不在首版支持预留扩展接口。
- 超时/重试、错误归一化与审计日志写入(可借助现有 log 实体)。
2) 新增控制器路由 ServersController.executeTool
- 路由POST /v1/servers/:id/tools/:toolId/execute
- 入参parameters:anyheaders?timeout?ms
- 返回:{ success:boolean; data?:any; error?:string; executionTime:number; timestamp:Date }
- 流程:
- 校验 server 存在且运行中,读取其 transport 与 endpoint。
- 调用 MCPExecutionService.execute(serverId, toolId, parameters)。
- 记录一次操作日志level=info/error
3) ProcessManagerService 小改
- 暴露一个 getChildProcess(serverId) 安全方法,供 STDIO 模式读取 stdio 流。
- 若已有等价接口可复用,直接复用。
4) WebSocket 无需改动
- 继续负责 process:info 与 process:logs 推送UI 可同步看到测试执行时的日志。
5) 类型与错误
- 在 src/modules/servers/interfaces/process.interface.ts 中补充 ToolResult 类型定义,或在 DTO 中定义统一返回。
## 二、前端改造packages/mcp-swagger-ui
1) API 封装
- 在 services/api.ts 新增 testingAPI.executeServerTool(serverId, toolId, parameters) -> 调用 /v1/servers/:id/tools/:toolId/execute。
- 或直接在现有 serverAPI 下新增 executeServerTool 方法,便于按服务器维度组织。
2) APITester.vue 调整
- 工具来源改为:
- 路由若携带 serverId则从 serverAPI.getServerDetails(serverId) 读取 tools 列表;
- 否则维持现有基于 OpenAPI 的本地转换列表(作为兜底)。
- 执行逻辑:
- 调用后端 executeServerTool显示真实结果
- 保留现有参数校验与表单渲染逻辑;
- 历史记录沿用 testingStore但 result 取后端返回。
3) ServerDetail.vue 交互
- 工具表点击“测试”时,跳转到 /tester?serverId={id}&toolId={toolId}APITester 接管并自动选中该工具。
4) 体验
- 显示执行耗时、错误详情;
- 可选:在结果面板显示本次调用的 requestId 以便问题排查。
## 三、数据与安全
- 认证:后端端点走现有 JWT 拦截api.interceptors 已带 Bearer控制器可按需加 @UseGuards
- 限流:为执行端点设置速率限制与并发阈值(如每 serverId 同时最多 3 个)。
- 超时:默认 30s可在请求体自定义服务层统一执行 Promise.race(timeout)。
## 五、阶段性交付
阶段1MCP 基础执行):
- 后端STDIO 与 STREAMABLE 适配、执行端点;
- 前端APITester 对接后端执行ServerDetail 跳转联动;
- 验证:手动调用 MCP Tools 能够正常执行并返回结果。
阶段2AI 智能测试):
- 后端AI 服务集成、测试计划生成与执行;
- 前端AITester 界面、测试报告展示;
- 验证AI 能够理解 Tools Schema自动生成并执行测试。
阶段3高级功能
- 增加 WS/SSE 适配;
- 历史/用例落库;
- 测试覆盖率分析;
- 性能测试集成。
- 报告与断言(对比 expectedResult
## 五、实施清单
- api
- services/mcp-execution.service.ts
- controllers/servers.controller.ts 新增 POST /v1/servers/:id/tools/:toolId/execute
- services/process-manager.service.ts 暴露 getChildProcess(serverId)
- dto/server.dto.ts 新增 ExecuteToolDto 与返回类型
- ui
- services/api.ts 新增 serverAPI.executeServerTool
- modules/testing/APITester.vue 接入 executeServerTool
- modules/servers/ServerDetail.vue 的工具行加测试跳转
## 六、回退方案
- 若后端执行不可用APITester 退回本地模拟stores/testing.ts 现状),并在 UI 提示“当前为模拟模式”。