當一個專案經歷數年迭代,測試套件常不自覺地演化成所謂的「測試冰淇淋甜筒(Testing Ice Cream Cone)」:底層單元測試寥寥無幾,中間層整合測試嚴重缺失,而最頂層的端對端(E2E)自動化腳本卻高達數百個。這種結構會直接導致 CI 每次跑完需要 45 分鐘以上,且幾乎每次構建都有 1-2 個測試因為網路或瀏覽器渲染延遲而隨機失敗。
重塑測試金字塔並不是要全盤拋棄 E2E 測試,而是重新界定各層級的責任邊界:E2E 測試應僅作為「冒煙測試(Smoke Tests)」驗證核心主流程連通性(例如使用者能否成功登入並完成結帳下單),數量應嚴格控制在幾十個以內。
對於各類邊界條件、異常分支、折扣規則計算、權限校驗等繁複邏輯,應全面下沉至「基於記憶體的整合測試」或「純函數單元測試」。透過建立依賴注入(Dependency Injection)與資料庫記憶體容器(如 Testcontainers),整合測試可以在毫秒級完成資料庫交易與中介軟體的交互驗證,而無需啟動重量級的前端渲染器。
在下沉過程中,團隊可以採用「絞殺者模式(Strangler Fig Pattern)」:每當發現一個脆弱的 E2E 測試,先在單元或整合層補齊對應的邊界驗證,確認覆蓋完整後,再果斷刪除該 E2E 腳本。數週內,CI 構建時間即可獲得數量級的改善。
陳奕廷 / 測試架構諮詢顧問
App Axiscore Advisory 顧問團隊成員,長期專注於分散式系統品質工程、變異測試架構與持續整合自動化管線優化。