平行執行與 CI/CD 整合
測試案例變多後,執行時間會直接影響開發與部署的節奏。Playwright 預設就支援平行執行,並且很容易整合進 CI/CD 流程,讓每次提交程式碼都能自動跑完整測試。
平行執行的兩個層次
Playwright 的平行化分成兩層:
- 檔案層級(Workers):不同測試檔案會分配給多個 Worker 行程同時執行,數量由
workers設定(預設約為 CPU 核心數的一半)。 - 同檔案內(fullyParallel):預設同一個檔案內的測試會依序執行;設定
fullyParallel: true後,同一檔案內的測試也會平行執行,適合測試案例之間完全獨立、沒有共用狀態的專案。
平行執行能大幅縮短整體時間,但前提是測試之間必須互不干擾——例如不要共用同一筆會被修改的資料庫資料,這也是每個測試預設拿到獨立 context(見 Fixtures 與 Hooks)如此重要的原因。CI 環境資源有限,workers 通常會設得比本機保守,避免資源競爭反而拖慢速度或造成不穩定。
GitHub Actions 整合
用 npm init playwright@latest 建立專案時,若選擇加入 GitHub Actions,會自動產生類似以下的工作流程:
# .github/workflows/playwright.yml
name: Playwright Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
幾個重點:
npx playwright install --with-deps會下載瀏覽器,並安裝 Linux 環境所需的系統依賴套件。upload-artifact搭配if: always(),確保即使測試失敗,HTML 報表(包含失敗測試的 Trace)也會上傳,方便之後下載檢視,這正是 Trace Viewer 追蹤除錯 在 CI 環境派上用場的地方。- 若專案較大,可以搭配
--shard參數把測試切分到多個 Job 並行執行,進一步縮短總時間:
使用官方 Docker Image
若 CI 環境不是 GitHub Actions(例如 GitLab CI、Jenkins),官方提供預先安裝好瀏覽器與系統依賴的 Docker Image,避免每次都要重新安裝:
docker run --rm -v $(pwd):/work -w /work mcr.microsoft.com/playwright:v1.55.0-noble \
npx playwright test
使用官方 Image 的另一個好處是環境一致:本機、CI 若都用同一個版本的 Image,能減少「本機過、CI 卻失敗」這類環境差異造成的問題,對 視覺比對 這類對渲染環境敏感的測試尤其重要。
延伸閱讀
完成 CI 整合後,建議回頭瀏覽 影音教學資源,透過官方與社群的實際操作影片,鞏固前面幾個章節學到的觀念。