Непрерывная интеграция
Введение
Тесты Playwright могут выполняться в средах непрерывной интеграции. Мы создали образцы конфигураций для распространённых поставщиков CI.
3 шага для запуска ваших тестов в CI:
-
Убедитесь, что агент CI может запускать браузеры: Используйте наш образ Docker в агентах Linux или установите зависимости с помощью CLI.
-
Установите Playwright:
# Install NPM packages npm ci # Install Playwright browsers and dependencies npx playwright install --with-deps
-
Запустите свои тесты:
npx playwright test
Рабочие процессы
Мы рекомендуем установить workers в значение "1" в средах CI, чтобы повысить стабильность и воспроизводимость. Последовательный запуск тестов гарантирует, что каждый тест получает все системные ресурсы, избегая потенциальных конфликтов. Однако, если у вас есть мощная система CI с собственным хостингом, вы можете включить параллельные тесты. Для более широкой параллелизации рассмотрите фрагментацию — распределение тестов по нескольким задачам CI.
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Opt out of parallel tests on CI.
workers: process.env.CI ? 1 : undefined,
}); Конфигурации CI
Инструменты командной строки Command line tools могут быть использованы для установки всех зависимостей операционной системы в CI.
GitHub Actions
При push/pull_request
Тесты будут выполняться при push или pull request на ветках main/master. Поток будет устанавливать все зависимости, устанавливать Playwright и затем запускать тесты. Он также создаст HTML отчёт.
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-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: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 30 При push/pull_request (фрагментированные)
GitHub Actions поддерживает фрагментацию тестов между несколькими задачами. Ознакомьтесь с нашим документом по фрагментации, чтобы узнать больше о фрагментации и посмотреть пример GitHub actions того, как настроить задачу для запуска тестов на нескольких машинах, а также как объединить HTML отчёты.
С помощью контейнеров
GitHub Actions поддерживает запуск задач в контейнере с использованием параметра jobs.<job_id>.container. Это полезно для того, чтобы не загрязнять среду хоста зависимостями и обеспечить согласованную среду, например, для скриншотов/тестирования визуального сходства на разных операционных системах.
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:v1.49.0-noble
options: --user 1001
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Run your tests
run: npx playwright test При развертывании
Это запустит тесты после того, как GitHub Deployment перешёл в состояние success. Такие сервисы, как Vercel, используют эту схему, чтобы вы могли запускать свои тесты end-to-end в их развернутой среде.
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-node@v4
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Install Playwright
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
env:
PLAYWRIGHT_TEST_BASE_URL: ${{ github.event.deployment_status.target_url }} Быстрое завершение при ошибке
Большие наборы тестов могут выполняться очень долго. Выполнив предварительный запуск тестов с флагом --only-changed, вы можете запустить сначала файлы тестов, которые, скорее всего, завершатся ошибкой. Это позволит получить более быструю обратную связь и немного снизить потребление CI при работе над Pull Request. Для обнаружения файлов тестов, затронутых вашим изменением, --only-changed анализирует граф зависимостей ваших наборов тестов. Это эвристика и может пропустить тесты, поэтому важно всегда запускать весь набор тестов после предварительного запуска.
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
with:
# Force a non-shallow checkout, so that we can reference $GITHUB_BASE_REF.
# See https://github.com/actions/checkout for more details.
fetch-depth: 0
- 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 changed Playwright tests
run: npx playwright test --only-changed=$GITHUB_BASE_REF
if: github.event_name == 'pull_request'
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 30 Docker
У нас есть готовый образ Docker, который можно использовать напрямую или как эталон для обновления ваших существующих определений Docker.
Рекомендуемая конфигурация
- Использование
--ipc=hostтакже рекомендуется при использовании Chromium. Без него у Chromium может закончиться оперативная память и произойти сбой. Узнайте больше об этом параметре в документации Docker. - Видите другие странные ошибки при запуске Chromium? Попробуйте запустить свой контейнер с
docker run --cap-add=SYS_ADMINпри разработке локально. - Использование флага Docker
--initили dumb-init рекомендуется для избежания специального обращения с процессами с PID=1. Это распространённая причина для процессов-зомби.
Azure Pipelines
Для агентов Windows или macOS дополнительная настройка не требуется, просто установите Playwright и запустите свои тесты.
Для агентов Linux вы можете использовать наш контейнер Docker с поддержкой Azure Pipelines для запуска задач в контейнере. В качестве альтернативы, вы можете использовать Инструменты командной строки для установки всех необходимых зависимостей.
Для запуска тестов Playwright используйте эту задачу конвейера:
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: NodeTool@0
inputs:
versionSpec: '18'
displayName: 'Install Node.js'
- script: npm ci
displayName: 'npm ci'
- script: npx playwright install --with-deps
displayName: 'Install Playwright browsers'
- script: npx playwright test
displayName: 'Run Playwright tests'
env:
CI: 'true' Загрузка папки отчётов Playwright с Azure Pipelines
Это заставит конвейер завершиться ошибкой, если какой-либо из тестов Playwright завершится ошибкой. Если вы также хотите интегрировать результаты тестов с Azure DevOps, используйте задачу PublishTestResults, как показано ниже:
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: NodeTool@0
inputs:
versionSpec: '18'
displayName: 'Install Node.js'
- script: npm ci
displayName: 'npm ci'
- script: npx playwright install --with-deps
displayName: 'Install Playwright browsers'
- script: npx playwright test
displayName: 'Run Playwright tests'
env:
CI: 'true'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
searchFolder: 'test-results'
testResultsFormat: 'JUnit'
testResultsFiles: 'e2e-junit-results.xml'
mergeTestResults: true
failTaskOnFailedTests: true
testRunTitle: 'My End-To-End Tests'
condition: succeededOrFailed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: playwright-report
artifact: playwright-report
publishLocation: 'pipeline'
condition: succeededOrFailed()
Примечание: Репортёр JUnit необходимо настроить соответствующим образом с помощью
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['junit', { outputFile: 'test-results/e2e-junit-results.xml' }]],
}); в playwright.config.ts.
Azure Pipelines (фрагментированные)
trigger:
- main
pool:
vmImage: ubuntu-latest
strategy:
matrix:
chromium-1:
project: chromium
shard: 1/3
chromium-2:
project: chromium
shard: 2/3
chromium-3:
project: chromium
shard: 3/3
firefox-1:
project: firefox
shard: 1/3
firefox-2:
project: firefox
shard: 2/3
firefox-3:
project: firefox
shard: 3/3
webkit-1:
project: webkit
shard: 1/3
webkit-2:
project: webkit
shard: 2/3
webkit-3:
project: webkit
shard: 3/3
steps:
- task: NodeTool@0
inputs:
versionSpec: '18'
displayName: 'Install Node.js'
- script: npm ci
displayName: 'npm ci'
- script: npx playwright install --with-deps
displayName: 'Install Playwright browsers'
- script: npx playwright test --project=$(project) --shard=$(shard)
displayName: 'Run Playwright tests'
env:
CI: 'true' Azure Pipelines (в контейнерах)
trigger:
- main
pool:
vmImage: ubuntu-latest
container: mcr.microsoft.com/playwright:v1.49.0-noble
steps:
- task: NodeTool@0
inputs:
versionSpec: '18'
displayName: 'Install Node.js'
- script: npm ci
displayName: 'npm ci'
- script: npx playwright test
displayName: 'Run Playwright tests'
env:
CI: 'true' CircleCI
Запуск Playwright на CircleCI очень похож на запуск на GitHub Actions. Чтобы указать готовый образ Playwright Docker, просто измените определение агента, добавив docker: в вашу конфигурацию, как показано ниже:
executors:
pw-noble-development:
docker:
- image: mcr.microsoft.com/playwright:v1.49.0-noble Примечание: при использовании определения агента Docker вы указываете ресурсный класс, в котором работает Playwright, на уровень "средний" здесь. По умолчанию Playwright устанавливает количество рабочих процессов равное количеству ядер (2 в случае среднего уровня). Переопределение количества рабочих процессов на значение больше этого приведёт к ненужным таймаутам и ошибкам.
Фрагментация в CircleCI
Фрагментация в CircleCI индексируется с 0, что означает, что вам потребуется переопределить стандартные переменные среды для параллелизма. Следующий пример демонстрирует, как запустить Playwright с параллелизмом CircleCI 4, добавив 1 к CIRCLE_NODE_INDEX, чтобы передать его в аргумент cli --shard.
playwright-job-name:
executor: pw-noble-development
parallelism: 4
steps:
- run: SHARD="$((${CIRCLE_NODE_INDEX}+1))"; npx playwright test -- --shard=${SHARD}/${CIRCLE_NODE_TOTAL} Jenkins
Jenkins поддерживает агентов Docker для конвейеров. Используйте образ Docker Playwright для запуска тестов в Jenkins.
pipeline {
agent { docker { image 'mcr.microsoft.com/playwright:v1.49.0-noble' } }
stages {
stage('e2e-tests') {
steps {
sh 'npm ci'
sh 'npx playwright test'
}
}
}
} Bitbucket Pipelines
Bitbucket Pipelines может использовать общедоступные образы Docker в качестве сред построения. Для запуска тестов Playwright в Bitbucket используйте наш общедоступный образ Docker (см. Dockerfile).
image: mcr.microsoft.com/playwright:v1.49.0-noble
GitLab CI
Для запуска тестов Playwright в GitLab используйте наш общедоступный образ Docker (см. Dockerfile).
stages: - test tests: stage: test image: mcr.microsoft.com/playwright:v1.49.0-noble script: ...
Фрагментация
GitLab CI поддерживает фрагментацию тестов между несколькими задачами с использованием ключевого слова parallel. Задача тестирования будет разделена на несколько меньших задач, которые выполняются параллельно. Параллельные задачи имеют имена, формируемые последовательно, от job_name 1/N до job_name N/N.
stages:
- test
tests:
stage: test
image: mcr.microsoft.com/playwright:v1.49.0-noble
parallel: 7
script:
- npm ci
- npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL GitLab CI также поддерживает фрагментацию тестов между несколькими задачами с использованием опции parallel:matrix. Задача тестирования будет запускаться несколько раз параллельно в одном конвейере, но с различными значениями переменных для каждого экземпляра задачи. В примере ниже у нас есть 2 значения PROJECT и 10 значений SHARD, что в результате даёт 20 задач для выполнения.
stages:
- test
tests:
stage: test
image: mcr.microsoft.com/playwright:v1.49.0-noble
parallel:
matrix:
- PROJECT: ['chromium', 'webkit']
SHARD: ['1/10', '2/10', '3/10', '4/10', '5/10', '6/10', '7/10', '8/10', '9/10', '10/10']
script:
- npm ci
- npx playwright test --project=$PROJECT --shard=$SHARD Google Cloud Build
Для запуска тестов Playwright на Google Cloud Build используйте наш общедоступный образ Docker (см. Dockerfile).
steps: - name: mcr.microsoft.com/playwright:v1.49.0-noble script: ... env: - 'CI=true'
Drone
Для запуска тестов Playwright на Drone используйте наш общедоступный образ Docker (см. Dockerfile).
kind: pipeline
name: default
type: docker
steps:
- name: test
image: mcr.microsoft.com/playwright:v1.49.0-noble
commands:
- npx playwright test Кэширование браузеров
Кэширование бинарников браузеров не рекомендуется, так как время восстановления кэша сопоставимо со временем загрузки бинарников. Особенно под Linux, необходимо установить зависимости операционной системы зависимости операционной системы, которые не могут быть кэшированы.
Если вы всё-таки хотите кэшировать бинарники браузеров между запусками CI, кэшируйте эти каталоги в вашей конфигурации CI, по отношению к хэшу версии Playwright.
Отладка запусков браузеров
Playwright поддерживает переменную среды DEBUG для вывода отладочных журналов во время выполнения. Установка её в значение pw:browser полезна при отладке ошибок Error: Failed to launch browser.
DEBUG=pw:browser npx playwright test
Запуск с графическим интерфейсом
По умолчанию Playwright запускает браузеры в бестелесной (headless) режиме. Смотрите в нашем руководстве Запуск тестов, как запустить тесты в режиме с графическим интерфейсом (headed).
На Linux-агентах запуск с графическим интерфейсом требует установки Xvfb. В нашем образе Docker и действиях GitHub Xvfb предварительно установлен. Чтобы запустить браузеры в режиме с графическим интерфейсом с Xvfb, добавьте xvfb-run перед самим командным кодом.
xvfb-run npx playwright test
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/ci