在 E2E 測試 Mock 情境
目前E2E Mock情境:
1. API 請求與回應 Mock
(未) 2. 資料庫查詢與儲存 Mock
3. 外部系統與微服務 Mock
4. 前端與後端互動 Mock
(未) 5. 第三方服務(如電子郵件、簡訊、通知)Mock
(未)6. 第三方檔案服務(如 S3、FTP、雲端儲存)Mock
在 E2E 測試中,Mock 是指模擬或替代外部系統、服務或資源,確保測試環境穩定且可控。以下是 E2E 測試中常見的 Mock 情境以及應使用的 Mock 工具:
E2E Mock情境
1. API 請求與回應 Mock
情境:
測試系統中的某一部分需要調用外部 API(如第三方支付、地圖服務、天氣 API),但這些 API:
可能會有費用(付費 API)。
可能會限流(API Rate Limiting)。
回應時間不可控(延遲/超時)。
測試環境中無法連接。
推薦工具:WireMock:Java Mock 服務框架,支援 HTTP/HTTPS API 模擬,並可輕鬆設定回應狀態、延遲和錯誤情況。
MockServer:Java Mock 服務工具,支援動態 API 模擬和 HTTP/HTTPS。
Karate Mock Server:內建於 Karate 框架中,快速建立 API 模擬,並支援 GraphQL、SOAP。
推薦工具:
WireMock:Java Mock 服務框架,支援 HTTP/HTTPS API 模擬,並可輕鬆設定回應狀態、延遲和錯誤情況。
MockServer:Java Mock 服務工具,支援動態 API 模擬和 HTTP/HTTPS。
Karate Mock Server:內建於 Karate 框架中,快速建立 API 模擬,並支援 GraphQL、SOAP。
實務應用:
模擬第三方支付 API(成功/失敗/超時)。
模擬 Google Maps API 回傳地理位置。
模擬電子郵件服務 API(SMTP)。
2. 資料庫查詢與儲存 Mock
情境:
測試系統需進行資料庫查詢或儲存,但:
測試數據需保持固定,避免受測試影響。
資料庫伺服器負載可能影響測試穩定性。
測試期間不希望實際修改資料庫數據。
推薦工具:
H2 Database:嵌入式 Java 資料庫,模擬 MySQL、PostgreSQL 等環境。
Testcontainers:Docker 為基礎,動態建立資料庫容器並初始化測試數據。
Mockito(針對 Repository 或 Service 進行 Mock)。
實務應用:
模擬用戶帳號查詢(避免實際查詢生產數據)。
測試訂單系統的訂單創建(不寫入真實資料庫)。
測試報表產生器(模擬數據計算結果)。
3. 外部系統與微服務 Mock
情境:
測試系統為微服務架構,需要調用其他微服務:
測試環境中這些微服務可能不可用。
測試需要模擬多種回應情況(成功、錯誤、延遲)。
推薦工具:
WireMock:模擬 HTTP/REST API,並支援動態回應。
Spring Cloud Contract:支援 Spring Boot 微服務的契約測試與 Mock。
MockServer:支援 REST、SOAP、WebSocket 模擬。
實務應用:
模擬用戶驗證服務(Auth Service)成功或失敗。
模擬產品查詢服務(Product Service)返回特定產品列表。
模擬消息隊列(如 Kafka、RabbitMQ)傳遞消息。
4. 前端與後端互動 Mock
情境:
測試 Web 前端和後端 API 互動,避免因後端不穩定影響測試結果。
測試表單提交、用戶登入、檔案上傳等操作。
推薦工具:
Playwright Mock API:直接在測試腳本中攔截 API 請求,返回自訂回應。
Cypress Intercept:在前端測試中攔截 API 請求並返回 Mock 回應。
Puppeteer Mock:可模擬前端與後端 API 互動。
實務應用:
測試登入表單(模擬登入成功/失敗)。
測試產品搜尋(模擬後端返回產品列表)。
測試檔案上傳(模擬上傳結果)。
5. 第三方服務(如電子郵件、簡訊、通知)Mock
情境:
測試系統會發送電子郵件、簡訊或推播通知:
測試環境不希望發送真實電子郵件或簡訊。
測試需檢查通知內容。
推薦工具:
MailHog:模擬 SMTP 伺服器,捕捉所有電子郵件。
FakeSMTP:本地 SMTP 伺服器,用於捕捉測試期間發送的郵件。
WireMock或 MockServer:模擬簡訊 API 回應。
實務應用:
測試用戶註冊確認信(檢查信件格式與內容)。
測試重設密碼通知(檢查連結和格式)。
測試行銷電子報發送(確認格式和排版)。
6. 第三方檔案服務(如 S3、FTP、雲端儲存)Mock
情境:
測試檔案上傳、下載、刪除,無法連接真實檔案伺服器:
測試檔案需要隨測試案例變動。
避免污染生產或測試環境。
推薦工具:
MinIO:模擬 S3 兼容的物件儲存服務。
WireMock 或 MockServer:模擬檔案 API 回應(上傳/下載)。
LocalStack:本地模擬 AWS 服務(包括 S3)。
實務應用:
測試檔案上傳功能(檢查檔案是否上傳成功)。
測試檔案下載鏈結(檢查檔案名稱和內容)。
測試檔案刪除功能(檢查刪除是否成功)。
總結:選擇 Mock 工具時的關鍵考量
API 測試與外部服務:優先考慮 WireMock(簡單)或 MockServer(高彈性)。
內部微服務/契約測試:優先考慮 Spring Cloud Contract。
資料庫:使用 H2(嵌入式) 或 Testcontainers(Docker)。
前端互動:使用 Playwright Mock 或 Cypress Intercept。
電子郵件與通知:使用 MailHog 或 FakeSMTP。
留言
張貼留言