近年來,Playwright 作為一款跨瀏覽器、跨平台的端到端自動化測試框架,越來越多的測試團隊選擇它替代 Selenium 或 Puppeteer。 它提供了強大的 API 和智能等待機制,但在實際項目中,很多團隊仍會遇到各種坑。今天,我們結合行業實踐經驗,總結 Playwright 最容易踩的坑及解決方案,讓你的測試更快、更穩定。
1. 按風險級別組織測試
坑點:按功能模塊組織測試會導致發版流水線臃腫,低風險 UI 也佔用時間。 解決方案:
- 高風險場景(登錄、下單、支付)快速精準覆蓋並嚴格斷言。
- 低風險 UI 細節放到夜間全量回歸。
實踐:維護 @smoke 和 @full 標籤,冒煙測試每次提交跑,全量回歸在夜間或發版前跑。
2. 使用穩定的定位策略
坑點:複雜 CSS 或文本選擇器容易導致測試不穩定。 解決方案:
- 優先使用 data-testid,作為代碼與測試的契約。
- 在 PR 檢查中要求核心 UI 元素必須加測試 ID。
3. 充分利用 Playwright 自動等待
坑點:手寫 waitForTimeout 或固定等待時間會導致測試不穩定。 解決方案:
- 使用 Playwright 內置自動等待和 web-first 斷言。
- 必要時綁定到明確信號:網絡請求、元素出現或 URL 變化,而非毫秒數。
4. 用 fixtures 管理認證和環境狀態
坑點:每個測試重新登錄導致測試慢且脆弱。 解決方案:
- 使用 storageState 保存登錄態,每個測試啓動時即登錄狀態。
- 測試更快、更穩定、可讀性更高。
5. 通過 API 準備測試數據
坑點:UI 操作慢且容易失敗。 解決方案:
- 優先用後端接口準備測試數據,然後在 UI 驗證結果。
- 若無測試專用接口,可創建受控 /api/test/* 命名空間,僅在 CI 環境開啓。
6. 控制網絡請求,Mock 不可控依賴
坑點:第三方接口不穩定導致測試掛。 解決方案:
- 使用 HAR 文件或 stub 關鍵接口保證穩定性。
- 保留一套真實環境 Canary 測試監控外部接口變化。
7. 視覺迴歸測試要有的放矢
坑點:動態區域可能導致大量無用 diff。 解決方案:
- 對動態區域設置 mask 或閾值。
- 從小範圍開始(收據、PDF 或核心儀表盤),逐步擴大覆蓋面。
8. Trace 和視頻只在必要時開啓
坑點:全程錄製 Trace / 視頻浪費時間和存儲。 解決方案:
- 僅在測試失敗或重試時開啓 Trace。
- 保證快速通過,同時失敗時有完整信息。
9. 合理設置併發數
坑點:盲目增加併發可能引發資源競爭,反而不快。 解決方案:
- 先 Profile 測試套件,找出瓶頸。
- 只在總耗時確實降低時才增加 worker 數量。
10. 按用户場景組織,別死磕 Page Object
坑點:Page Object 容易臃腫,難維護。 解決方案:
- 採用“劇本式” helper 函數,用穩定定位器組合業務操作。
- 測試代碼讀起來像講故事,更直觀易懂。
11. 讓不穩定性可見
坑點:掩蓋不穩定測試會影響主流程的可信度。 解決方案:
- 用註解標記不穩定測試。
- 跟蹤每個 spec 文件的不穩定率,超過 1% 就該修復。
12. 優化測試報告
坑點:報告難讀、難定位問題。 解決方案:
- 標準化產物命名,突出關鍵信息:失敗步驟、截圖、Trace、網絡請求。
- 配置 CI,把 HTML 報告和 Trace 暴露為構建產物。
- 定位問題只需兩次點擊,不搞尋寶遊戲。
實戰案例
在實際項目中,有團隊在使用 Playwright 做 UI 測試時遇到以下問題: 問題:
- 600 多個 UI 測試,跑完 42 分鐘,每 5 次 run 就掛 1 次。
- 通過採納以下優化措施,取得了顯著效果:
- 核心 UI 元素加 data-testid
- API 接口準備測試數據,減少 UI 操作依賴
- 重試時開啓 Trace,方便排查失敗
- 區分 smoke 和 full 測試,合理調度流水線
- Worker 數量從 12 降到 6(降低數據庫壓力)
結果:
- PR 上 12 分鐘跑完
- 不穩定率 <0.3%
- 發版再也不用提心吊膽 這一案例展示了合理設計測試策略、優化定位器、使用 API 數據和 Trace 的組合實踐,可以顯著提升 Playwright 測試的穩定性和效率。
實踐流程示意圖
寫在最後
Playwright 不只是一個測試工具,它是一套 方法論:
- 風險級別組織測試
- 穩定選擇器 + 自動等待
- API 預置數據,Mock 不穩定接口
- 精準控制 Trace、併發和報告
一次採納幾個習慣,你會發現 CI 流水線的焦慮逐漸消失,發版變成例行公事。