Playwright Python — справочник На главный сайт

Playwright в CI: общие принципы

Для запуска Playwright-тестов в CI необходимо установить браузеры с помощью playwright install и обеспечить окружение с графической подсистемой (XVFB) или использовать headless-режим.

Рекомендация: Используйте headless-режим (headless=True) в CI. Это снижает потребление ресурсов и не требует XVFB. Для отладки сохраняйте трейсы и видео.

GitHub Actions

Playwright поддерживает GitHub Actions через официальное действие microsoft/playwright-github-action или напрямую установкой браузеров.

name: Playwright Tests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        shardIndex: [1, 2, 3]
        shardTotal: [3]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install playwright pytest pytest-playwright
      - run: playwright install --with-deps
      - run: pytest --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: test-results-${{ matrix.shardIndex }}
          path: test-results/
          retention-days: 7

Совет: Используйте playwright install --with-deps для автоматической установки всех системных зависимостей браузеров (шрифты, библиотеки). Это предпочтительнее, чем отдельная установка.

Jenkins

В Jenkins нужно настроить виртуальный дисплей (Xvfb) для браузеров в non-headless режиме.

pipeline {
    agent { docker { image 'mcr.microsoft.com/playwright/python:v1.61.0-noble' } }
    stages {
        stage('Install') {
            steps {
                sh 'pip install pytest pytest-playwright'
                sh 'playwright install --with-deps'
            }
        }
        stage('Test') {
            steps {
                sh 'pytest --junitxml=report.xml'
            }
        }
    }
    post {
        always {
            junit 'report.xml'
        }
    }
}

GitLab CI

image: mcr.microsoft.com/playwright/python:v1.61.0-noble

stages:
  - test

playwright-tests:
  stage: test
  script:
    - pip install pytest pytest-playwright
    - playwright install --with-deps
    - pytest --html=report.html
  artifacts:
    reports:
      junit: report.xml
    paths:
      - report.html
    when: always

CircleCI

В CircleCI удобно использовать orb для кэширования браузеров Playwright между запусками.

version: 2.1
orbs:
  playwright: microsoft/playwright@1.0.0
jobs:
  test:
    docker:
      - image: mcr.microsoft.com/playwright/python:v1.61.0-noble
    steps:
      - checkout
      - playwright/install-browsers
      - run: pip install -r requirements.txt
      - run: pytest --junitxml=report.xml
      - store_test_results:
          path: report.xml

Шардирование тестов (--shard)

Для ускорения CI-пайплайна тесты можно разделять на шарды и запускать параллельно на разных агентах.

# Запуск 1-го шарда из 4
pytest --shard=1/4

# Запуск 2-го шарда из 4
pytest --shard=2/4

# В GitHub Actions через matrix
# matrix.shardIndex: [1, 2, 3, 4]
# matrix.shardTotal: [4]
pytest --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}

Отчёты

Playwright поддерживает несколько форматов отчётов, полезных в CI:

  • HTML-отчётpytest --html=report.html (требуется pytest-html)
  • Allurepytest --alluredir=allure-results
  • JUnit XMLpytest --junitxml=report.xml (для интеграции с Jenkins, GitLab)
  • JSON — кастомный вывод для дашбордов
# Установка Allure
pip install allure-pytest

# Запуск с Allure
pytest --alluredir=allure-results

# Генерация отчёта (локально)
allure generate allure-results -o allure-report

# Загрузка артефактов в CI
# GitHub Actions: actions/upload-artifact
# GitLab: artifacts.paths

Важно: При использовании pytest-html убедитесь, что путь для отчёта не перезаписывается параллельными шардами. Добавляйте идентификатор шарда в имя файла.

Docker-образы в CI

Официальные Docker-образы Playwright уже содержат установленные браузеры и все системные зависимости. Это самый надёжный способ запуска в CI.

# Использование готового образа
# mcr.microsoft.com/playwright/python:v1.61.0-noble

# Установка зависимостей проекта
pip install -r requirements.txt

# Запуск тестов (браузеры уже установлены)
pytest -v

Сохранение артефактов при падении

При падении тестов полезно сохранять трейсы, скриншоты и видео для анализа.

# pytest-playwright: автоматическое сохранение
# pytest.ini или pyproject.toml:
# [tool.pytest.ini_options]
# addopts = "--tracing=retain-on-failure --screenshot=only-on-failure --video=retain-on-failure"

# В GitHub Actions артефакты загружаются при failure()
- uses: actions/upload-artifact@v4
  if: failure()
  with:
    name: test-results
    path: test-results/