Spec-Zone.ru › Playwright

Непрерывная интеграция

Введение​

Тесты Playwright могут выполняться в средах непрерывной интеграции. Мы создали образцы конфигураций для распространённых поставщиков CI.

3 шага для запуска ваших тестов в CI:

  1. Убедитесь, что агент CI может запускать браузеры: Используйте наш образ Docker в агентах Linux или установите зависимости с помощью CLI.

  2. Установите Playwright:

    # Install NPM packages
    npm ci
    
    # Install Playwright browsers and dependencies
    npx playwright install --with-deps
  3. Запустите свои тесты:

    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.

Рекомендуемая конфигурация

  1. Использование --ipc=host также рекомендуется при использовании Chromium. Без него у Chromium может закончиться оперативная память и произойти сбой. Узнайте больше об этом параметре в документации Docker.
  2. Видите другие странные ошибки при запуске Chromium? Попробуйте запустить свой контейнер с docker run --cap-add=SYS_ADMIN при разработке локально.
  3. Использование флага 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API