使用说明
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使用它时:为特定终点生成测试参数和预期响应。
- 目的:按名称或路径检索特定API的详细文档,例如:
-
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(字段类型,约束)
- 返回用于压力测试和安全检查的极端或异常输入(例如负值、极大值、随机字符、特殊符号)。
推荐开发流程
-
整合最小可行工具
- 实施
listAllAPIFromDocument,getSingleAPIDetail,以及callNetHTTP在您的系统中,LLM可以:- 获取可用端点列表
- 获取给定API的详细规范
- 发出真正的HTTP请求
- 实施
-
连接LLM
- 使LLM能够使用上述三个工具。它可以列出潜在的端点,检索每个端点的详细信息,生成测试场景,最后通过以下方式运行它们
callNetHTTP.
- 使LLM能够使用上述三个工具。它可以列出潜在的端点,检索每个端点的详细信息,生成测试场景,最后通过以下方式运行它们
-
添加验证工具(响应/架构)
- 提供实用程序,让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
