mcp-api测试工具和接口
本文档总结了使LLM(大型语言模型)能够执行自动化API测试的潜在工具或接口。通过利用这些工具,LLM可以阅读API文档,使用 net/http,并帮助开发人员快速识别潜在问题。
核心工具(最小可行工具)
以下三个工具是最基本和最重要的接口,允许LLM进行 最小可行 自动化测试:
- listAllAPI来自文档
- 目的:列出文档中的所有可用API(名称、URL、HTTP方法等)。 - 示例示例返回值可能如下:
[
{ "name": "getUser", "method": "GET", "url": "/users/{id}" },
{ "name": "createUser", "method": "POST", "url": "/users" }
...
]- 当LLM使用它时:浏览可用的API并选择要测试的API。
- getSingleAPI详细信息
- 目的:按名称或路径检索特定API的详细文档,例如: - 请求参数(查询、路径、正文等) - 响应结构(模式) - 可能的状态代码和错误定义 - 示例示例返回值可能如下:
{
"name": "getUser",
"method": "GET",
"url": "/users/{id}",
"parameters": [
{ "in": "path", "name": "id", "type": "string", "required": true }
],
"responses": {
"200": {
"description": "Returns user data on success",
"schema": { ... }
},
"404": {
"description": "User not found"
}
}
}- 当LLM使用它时:为特定终点生成测试参数和预期响应。
- callNetHTTP
- 目的:允许LLM发送真实的HTTP请求并接收结果(状态代码、标头、正文)。 - 示例:
{
"request": {
"method": "POST",
"url": "/users",
"headers": { "Content-Type": "application/json" },
"body": { "name": "NewUser", "age": 30 }
},
"response": {
"status": 201,
"headers": { ... },
"body": { "id": "123", "name": "NewUser", "age": 30 }
}
}- 当LLM使用它时:执行测试调用,并将实际结果与预期结果进行比较。
______________________________________________________________________
高级建议工具(增强工具)
这些工具不是强制性的,但它们可以显著改善自动化测试、报告、环境设置等。
1.响应验证/解析工具
- 架构验证
- validateResponseWithSchema(responseBody, schemaInfo) -> (isValid, errorList) - 将返回的JSON正文与记录的模式进行比较,以检查字段一致性、数据类型和任何必需的字段。
- JSON解析
- parseJSON(responseBody) -> (parsedObject) - 使LLM能够方便地读取和检查响应中的特定字段(例如,确认某些字段不是空的)。
2.测试执行的上下文/日志工具
- 测试结果记录/存储
- storeTestResult(testCase, response, passOrFail, errorMessage) - 让LLM记录每个测试用例的执行细节、错误和结果,从而更容易编译报告。
- 历史测试结果
- getTestHistory(apiName or endpoint) -> (historyData) - 允许LLM(或其他系统)查询同一端点的过去测试结果,并了解随时间的回归或变化。
3.环境设置/管理工具
- 身份验证/凭据设置
- getAuthToken(username, password) -> token - 某些API需要令牌或cookie进行身份验证。LLM可能需要首先调用此工具以获取正确的凭据。
- 重置/初始化测试数据
- resetTestData() 或 seedTestData() - 在测试开始之前,确保数据库或系统状态处于已知的默认状态。
4.模糊/边缘案例测试工具
- generateFuzzyInput(字段类型,约束)
- 返回用于压力测试和安全检查的极端或异常输入(例如负值、极大值、随机字符、特殊符号)。
______________________________________________________________________
推荐开发流程
- 整合最小可行工具
1. 实施 listAllAPIFromDocument, getSingleAPIDetail,以及 callNetHTTP 在您的系统中,LLM可以: - 获取可用端点列表 - 获取给定API的详细规范 - 发出真正的HTTP请求
- 连接LLM
- 使LLM能够使用上述三个工具。它可以列出潜在的端点,检索每个端点的详细信息,生成测试场景,最后通过以下方式运行它们 callNetHTTP.
- 添加验证工具(响应/架构)
- 提供实用程序,让LLM验证返回的数据是否与记录的模式和期望相匹配。
- 扩展测试日志和环境管理
- 提供用于存储测试结果、查询历史测试、重置环境和检索身份验证令牌的接口。 - LLM可以调用这些工具来维护测试过程的一致状态和文档。
- 模糊/边缘案例测试
- 集成一个工具来生成恶意或极端值,或者让LLM自动生成它们以进行深入的压力或安全测试。
______________________________________________________________________
重要提示
- 安全和权限
- 当LLM调用API时,请确保这些测试在安全的环境(开发或沙箱)中运行,并且不会损害敏感数据。
- LLM生成内容的准确性
- LLM可能会产生无效或不正确的参数。接口中可能需要额外的验证或错误处理。
- 无法完全取代传统测试
- 虽然LLM可以快速生成边界和异常测试用例,但传统的单元测试对于全面覆盖仍然至关重要。
测试
readopenapidocument
curl -X POST --data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ReadOpenAPIDocument",
"arguments": {
"openAPIPath": "/absolute/path/to/your/openAPI/file"
}
}
}' http://localhost:8000/message?sessionId=9fa4fc8c-1799-4955-a0bb-4881258f13f9文档中列出所有API
curl -X POST --data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ListAllAPIFromDocument"
}
}' http://localhost:8000/message?sessionId=9fa4fc8c-1799-4955-a0bb-4881258f13f9
