Unit Test
Jest(JavaScript / TypeScript):最主流。設定少,snapshot testing、mock 機制、coverage report 內建。缺點是在大型專案裡速度慢,因為每個測試檔案起獨立的 worker。
Vitest(JavaScript / TypeScript):Vite 生態的 Jest 替代,速度快很多(共用 Vite 的 transform pipeline),API 和 Jest 幾乎相容,遷移成本低。新專案優先考慮。
Pytest(Python):事實標準。fixture 機制強大,plugin 生態豐富(pytest-asyncio、pytest-cov、pytest-mock)。
Go test(Go):語言內建,go test ./... 直接跑,table-driven test 是 Go 社群慣例。
JUnit 5(Java):Spring 生態標配,支援 @ParameterizedTest、extension model。
E2E / Browser Test
Playwright(Microsoft):目前最推薦。支援 Chromium / Firefox / WebKit,有 auto-wait 機制(不需要手動 waitFor),codegen 可以錄製操作生成測試,TypeScript 支援一流。
Cypress:純 Chromium,DX 好(時間旅行 debugger),但跨瀏覽器測試受限。對前端工程師友善,學習曲線低。
Selenium:老牌,語言支援廣,但設定繁瑣,不穩定性高。新專案通常不選,除非需要 IE / 舊瀏覽器或整合現有 Selenium Grid。
API Test
Postman / Bruno:手動測試和 collection 管理。Bruno 是 Postman 的 open source 替代,collection 存在本機檔案,可以 git 版控。
Hoppscotch:Open source 的 Postman web 版替代,輕量。
REST Assured(Java)、pytest + httpx(Python)、supertest(Node.js):在自動化測試套件裡做 API integration test。
Load / Stress Test
k6(Grafana Labs):JavaScript 腳本,Go 執行,效能好。雲端版(Grafana Cloud k6)可以分散式跑,dashboard 整合 Grafana。適合大多數後端系統的 load testing。
JMeter(Apache):GUI,Java,歷史悠久,設定複雜。在需要 GUI 設定或有現存 JMeter 腳本的環境繼續用。
Gatling(Scala):DSL 優雅,報告美,適合 JVM 生態系。
Contract Test
Pact:Consumer-driven contract testing 的事實標準。消費方定義期待,提供方在 CI 裡驗證。有 Pact Broker 管理 contract 版本。支援 HTTP 和 messaging(Kafka / RabbitMQ)。
Spring Cloud Contract:Spring 生態的 contract testing,以提供方為中心定義 contract,生成 stub 給消費方用。
Chaos / Resilience
Chaos Mesh(CNCF):Kubernetes 上的 chaos engineering 平台。注入 pod failure、network partition、HTTP fault、磁碟 I/O 延遲。有 Dashboard UI,支援 chaos workflow 定義。
Litmus(CNCF):類似功能,有更完整的實驗 workflow(ChaosEngine + ChaosResult CRD)。
選型原則
不需要每種類型都用最新的工具。降低摩擦比功能強大更重要——用整個團隊都熟悉的工具,比強制採用「最佳」工具但大家不願意寫測試更有價值。工具是手段,讓測試被寫出來、被跑、被信任才是目的。