API自动化测试工具

该工具集使大型语言模型(LLM)能够执行自动化API测试,包括列出API、获取详细信息和执行测试调用,帮助开发者快速识别潜在问题。

  • by TinyMurky
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 tinymurky/mcp-api-tester

使用说明

mcp-api测试工具和接口

本文档总结了使LLM(大型语言模型)能够执行自动化API测试的潜在工具或接口。通过利用这些工具,LLM可以阅读API文档,使用 net/http,并帮助开发人员快速识别潜在问题。

核心工具(最小可行工具)

以下三个工具是最基本和最重要的接口,允许LLM进行 最小可行 自动化测试:

  1. listAllAPI来自文档

    • 目的:列出文档中的所有可用API(名称、URL、HTTP方法等)。
    • 示例示例返回值可能如下:
      [
        { "name": "getUser", "method": "GET", "url": "/users/{id}" },
        { "name": "createUser", "method": "POST", "url": "/users" }
        ...
      ]
      
    • 当LLM使用它时:浏览可用的API并选择要测试的API。
  2. 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使用它时:为特定终点生成测试参数和预期响应。
  3. 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.响应验证/解析工具

  1. 架构验证

    • validateResponseWithSchema(responseBody, schemaInfo) -> (isValid, errorList)
    • 将返回的JSON正文与记录的模式进行比较,以检查字段一致性、数据类型和任何必需的字段。
  2. JSON解析

    • parseJSON(responseBody) -> (parsedObject)
    • 使LLM能够方便地读取和检查响应中的特定字段(例如,确认某些字段不是空的)。

2.测试执行的上下文/日志工具

  1. 测试结果记录/存储

    • storeTestResult(testCase, response, passOrFail, errorMessage)
    • 让LLM记录每个测试用例的执行细节、错误和结果,从而更容易编译报告。
  2. 历史测试结果

    • getTestHistory(apiName or endpoint) -> (historyData)
    • 允许LLM(或其他系统)查询同一端点的过去测试结果,并了解随时间的回归或变化。

3.环境设置/管理工具

  1. 身份验证/凭据设置

    • getAuthToken(username, password) -> token
    • 某些API需要令牌或cookie进行身份验证。LLM可能需要首先调用此工具以获取正确的凭据。
  2. 重置/初始化测试数据

    • resetTestData() 或 seedTestData()
    • 在测试开始之前,确保数据库或系统状态处于已知的默认状态。

4.模糊/边缘案例测试工具

  • generateFuzzyInput(字段类型,约束)
  • 返回用于压力测试和安全检查的极端或异常输入(例如负值、极大值、随机字符、特殊符号)。

推荐开发流程

  1. 整合最小可行工具

    1. 实施 listAllAPIFromDocument, getSingleAPIDetail,以及 callNetHTTP 在您的系统中,LLM可以:
      • 获取可用端点列表
      • 获取给定API的详细规范
      • 发出真正的HTTP请求
  2. 连接LLM

    • 使LLM能够使用上述三个工具。它可以列出潜在的端点,检索每个端点的详细信息,生成测试场景,最后通过以下方式运行它们 callNetHTTP.
  3. 添加验证工具(响应/架构)

    • 提供实用程序,让LLM验证返回的数据是否与记录的模式和期望相匹配。
  4. 扩展测试日志和环境管理

    • 提供用于存储测试结果、查询历史测试、重置环境和检索身份验证令牌的接口。
    • LLM可以调用这些工具来维护测试过程的一致状态和文档。
  5. 模糊/边缘案例测试

    • 集成一个工具来生成恶意或极端值,或者让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