🚀 使用 mcp-api-tester 工具與接口進行自動化 API 測試
本項目藉助 mcp-api-tester
工具,實現大型語言模型(LLM)對 API 的自動化測試。通過利用相關工具,LLM 能夠閱讀 API 文檔、挑選並測試特定端點,還能助力開發人員迅速識別潛在問題。
🚀 快速開始
這份文檔總結了可讓大型語言模型(LLM)執行自動化 API 測試的潛在工具或接口。藉助這些工具,LLM 能閱讀 API 文檔、使用 net/http
選擇和測試特定端點,協助開發人員快速發現潛在問題。
✨ 主要特性
核心工具(最小可行工具)
以下三個工具是最基礎且關鍵的接口,可讓 LLM 進行最基本的自動化測試:
- listAllAPIFromDocument
- 目的:列出文檔中所有可用的 API(包含名稱、URL、HTTP 方法等)。
- 示例:樣本返回值可能如下:
[
{ "name": "getUser", "method": "GET", "url": "/users/{id}" },
{ "name": "createUser", "method": "POST", "url": "/users" }
...
]
- **LLM 使用場景**:瀏覽可用 API 並選擇要測試的端點。
- getSingleAPIDetail
- 目的:根據名稱或路徑檢索特定 API 的詳細文檔,例如:
- 請求參數(查詢、路徑、正文等)
- 響應結構(模式)
- 可能的狀態碼和錯誤定義
- 示例:樣本返回值可能如下:
{
"name": "getUser",
"method": "GET",
"url": "/users/{id}",
"parameters": [
{ "in": "path", "name": "id", "type": "string", "required": true }
],
"responses": {
"200": {
"description": "返回用戶數據在成功時",
"schema": { ... }
},
"404": {
"description": "未找到用戶"
}
}
}
- **LLM 使用場景**:獲取特定端點的詳細信息以進行測試。
- callNetHTTP
- 目的:根據從文檔中獲取的信息,向目標 API 發送實際的 HTTP 請求。
- 示例:LLM 可以使用以下命令發送 GET 請求:
curl http://example.com/api/users
- **LLM 使用場景**:執行實際的 HTTP 請求並驗證響應。
擴展功能
除上述核心工具外,還可擴展以下功能:
- 響應與模式驗證
- 提供工具以驗證返回的數據是否符合文檔中定義的模式和期望。
- 示例:LLM 可以使用以下命令驗證 JSON 響應格式:
validate_response.sh --expectedSchema schema.json --actualResponse response.json
- 測試日誌與環境管理
- 提供接口用於存儲測試結果、查詢歷史測試記錄、重置測試環境以及獲取身份驗證令牌。
- 示例:LLM 可以使用以下命令記錄測試結果:
log_test.sh --testId 123 --status passed --response response.json
- 邊界與異常測試
- 集成工具生成惡意或極端值,或讓 LLM 自動生成這些值以進行深入的壓力或安全性測試。
- 示例:LLM 可以使用以下命令生成無效的參數:
generate_extreme_values.py --parameterType string --constraint minLength=1
🔧 技術細節
重要注意事項
- 安全與權限
- 當 LLM 執行 API 調用時,要確保這些測試在安全的環境中運行(如開發或沙盒環境),避免洩露敏感數據。
- LLM 生成內容的準確性
- LLM 可能會產生無效或錯誤的參數。因此,在接口中需要添加額外的驗證或錯誤處理機制。
- 無法完全替代傳統測試
- 雖然 LLM 可以快速生成邊界和異常測試用例,但傳統的單元測試仍然是實現全面覆蓋不可或缺的一部分。
💻 使用示例
示例請求
讀取 OpenAPI 文檔
curl -X POST --data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ReadOpenAPIDocument",