跳到主要內容

持續整合

簡介

Playwright 測試可以在 CI 環境中執行。我們為常見的 CI 提供者建立了範例配置。

在 CI 上執行測試的 3 個步驟

  1. 確保 CI 代理程式可以執行瀏覽器:在 Linux 代理程式中使用我們的 Docker 映像檔,或使用 CLI 安裝您的依賴項。

  2. 安裝 Playwright:

    mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps"
  3. 執行您的測試:

    mvn test

CI 配置

命令列工具可以用於在 CI 中安裝所有作業系統依賴項。

GitHub Actions

在 push/pull_request 時

測試將在 main/master 分支上的 push 或 pull request 時執行。工作流程將安裝所有依賴項、安裝 Playwright,然後執行測試。

.github/workflows/playwright.yml
name: Playwright Tests
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Build & Install
run: mvn -B install -D skipTests --no-transfer-progress
- name: Ensure browsers are installed
run: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps"
- name: Run tests
run: mvn test

透過容器

GitHub Actions 支援使用 容器中執行任務,透過使用 jobs.<job_id>.container 選項。這對於不污染主機環境的依賴項,以及針對跨不同作業系統的螢幕截圖/視覺迴歸測試擁有一致的環境非常有用。

.github/workflows/playwright.yml
name: Playwright Tests
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
playwright:
name: 'Playwright Tests'
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright/java:v1.49.0-noble
options: --user 1001
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Build & Install
run: mvn -B install -D skipTests --no-transfer-progress
- name: Run tests
run: mvn test

在部署時

這將在 GitHub 部署進入 success 狀態後啟動測試。Vercel 等服務使用此模式,因此您可以在其部署的環境上執行端對端測試。

.github/workflows/playwright.yml
name: Playwright Tests
on:
deployment_status:
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
if: github.event.deployment_status.state == 'success'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Build & Install
run: mvn -B install -D skipTests --no-transfer-progress
- name: Install Playwright
run: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps"
- name: Run tests
run: mvn test
env:
# This might depend on your test-runner
PLAYWRIGHT_TEST_BASE_URL: ${{ github.event.deployment_status.target_url }}

Docker

我們有一個預先建立的 Docker 映像檔,可以直接使用,也可以作為更新現有 Docker 定義的參考。

建議配置

  1. 當使用 Chromium 時,也建議使用 --ipc=host。若沒有它,Chromium 可能會耗盡記憶體並崩潰。在 Docker 文件中了解有關此選項的更多資訊。
  2. 啟動 Chromium 時看到其他奇怪的錯誤?在本地開發時,嘗試使用 docker run --cap-add=SYS_ADMIN 執行您的容器。
  3. 建議使用 --init Docker 標誌或 dumb-init,以避免對 PID=1 的進程進行特殊處理。這是殭屍進程的常見原因。

Azure Pipelines

對於 Windows 或 macOS 代理程式,不需要額外的配置,只需安裝 Playwright 並執行您的測試即可。

對於 Linux 代理程式,您可以使用我們的 Docker 容器,並透過 Azure Pipelines 支援執行容器化任務。或者,您可以使用命令列工具來安裝所有必要的依賴項。

對於執行 Playwright 測試,請使用此管線任務

trigger:
- main

pool:
vmImage: ubuntu-latest

steps:
- task: JavaToolInstaller@0
inputs:
versionSpec: '17'
jdkArchitectureOption: 'x64'
jdkSourceOption: AzureStorage
- script: mvn -B install -D skipTests --no-transfer-progress
displayName: 'Build and install'
- script: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --with-deps"
displayName: 'Install Playwright browsers'
- script: mvn test
displayName: 'Run tests'

Azure Pipelines (容器化)

trigger:
- main

pool:
vmImage: ubuntu-latest
container: mcr.microsoft.com/playwright/java:v1.49.0-noble

steps:
- task: JavaToolInstaller@0
inputs:
versionSpec: '17'
jdkArchitectureOption: 'x64'
jdkSourceOption: AzureStorage

- script: mvn -B install -D skipTests --no-transfer-progress
displayName: 'Build and install'
- script: mvn test
displayName: 'Run tests'

CircleCI

在 CircleCI 上執行 Playwright 與在 GitHub Actions 上執行非常相似。為了指定預先建立的 Playwright Docker 映像檔,只需在您的配置中使用 docker: 修改代理程式定義,如下所示

executors:
pw-noble-development:
docker:
- image: mcr.microsoft.com/playwright/java:v1.49.0-noble

注意:當使用 docker 代理程式定義時,您將 playwright 運行的資源類別指定到 'medium' 層級 這裡。Playwright 的預設行為是將工作進程數設定為偵測到的核心數(在 medium 層級的情況下為 2 個)。將工作進程數覆寫為大於此數字將導致不必要的逾時和失敗。

Jenkins

Jenkins 支援管線的 Docker 代理程式。使用 Playwright Docker 映像檔在 Jenkins 上執行測試。

pipeline {
agent { docker { image 'mcr.microsoft.com/playwright/java:v1.49.0-noble' } }
stages {
stage('e2e-tests') {
steps {
sh 'mvn -B install -D skipTests --no-transfer-progress'
sh 'mvn test'
}
}
}
}

Bitbucket Pipelines

Bitbucket Pipelines 可以使用公共 Docker 映像檔作為建置環境。若要在 Bitbucket 上執行 Playwright 測試,請使用我們的公共 Docker 映像檔(請參閱 Dockerfile)。

image: mcr.microsoft.com/playwright/java:v1.49.0-noble

GitLab CI

若要在 GitLab 上執行 Playwright 測試,請使用我們的公共 Docker 映像檔(請參閱 Dockerfile)。

stages:
- test

tests:
stage: test
image: mcr.microsoft.com/playwright/java:v1.49.0-noble
script:
...

快取瀏覽器

不建議快取瀏覽器二進制檔案,因為還原快取所花費的時間與下載二進制檔案所花費的時間相當。尤其是在 Linux 下,需要安裝作業系統依賴項,這些依賴項是不可快取的。

如果您仍然想要在 CI 執行之間快取瀏覽器二進制檔案,請根據 Playwright 版本的雜湊值,在您的 CI 配置中快取這些目錄

偵錯瀏覽器啟動

Playwright 支援 DEBUG 環境變數,以在執行期間輸出偵錯日誌。將其設定為 pw:browser 在偵錯 Error: Failed to launch browser 錯誤時很有幫助。

DEBUG=pw:browser mvn test

以 Headed 模式執行

預設情況下,Playwright 以 headless 模式啟動瀏覽器。請參閱我們的執行測試指南,了解如何在 headed 模式下執行測試。

在 Linux 代理程式上,headed 執行需要安裝 Xvfb。我們的 Docker 映像檔和 GitHub Action 已預先安裝 Xvfb。若要使用 Xvfb 在 headed 模式下執行瀏覽器,請在實際命令之前新增 xvfb-run

xvfb-run mvn test