使用 Wiremock 搭建 mockapi
Contents
在開發或測試時,後端 API 往往尚未完成或難以重現特定情境(如錯誤回應、逾時)。WireMock 是一套強大的 HTTP Mock Server,可讓你在不依賴真實後端的情況下模擬 API 回應,達到測試隔離的效果。
WireMock 的主要用途
- 測試隔離:單元測試或整合測試時,不需要真實的外部服務
- 模擬特定情境:模擬 500 錯誤、逾時、網路延遲等難以重現的場景
- 前後端並行開發:前端開發者在後端 API 完成前就能串接 Mock API
- Contract Testing:驗證 API 格式是否符合約定
啟動方式
方式一:Standalone JAR(最快速)
從官網下載 JAR 檔後直接執行:
|
|
啟動後預設會在當前目錄建立 mappings/ 和 __files/ 資料夾。
方式二:Maven / Gradle 整合
適合整合進 JUnit 測試:
|
|
|
|
方式三:Docker
|
|
Mapping JSON 格式
在 mappings/ 目錄下建立 JSON 檔案定義 Mock 規則,格式分為 request(匹配條件)和 response(回應內容):
|
|
也可以將 body 單獨放到 __files/ 目錄,用 bodyFileName 參照:
|
|
Request 匹配條件
WireMock 支援多種匹配方式:
| 方式 | 說明 | 範例 |
|---|---|---|
url |
完整路徑比對 | /api/user/1 |
urlPattern |
正規表達式 | /api/users/[0-9]+ |
urlPathPattern |
路徑正規(忽略 query string) | /api/users/.* |
queryParameters |
Query 參數比對 | {"page": {"equalTo": "1"}} |
headers |
Header 比對 | {"Authorization": {"contains": "Bearer"}} |
bodyPatterns |
Body 比對(JSON、正規) | {"matchesJsonPath": "$.name"} |
動態 Response(Handlebars Template)
啟動時加上 --global-response-templating 參數可啟用 Handlebars 模板,讓 response 動態帶入 request 的值:
|
|
Mapping 範例:
|
|
也可以使用 randomValue、now(當前時間)等 Helper 函數產生動態資料。