CI (Непрерывная интеграция)
Настройка Playwright в системах непрерывной интеграции: GitHub Actions, Jenkins, GitLab CI, CircleCI, Docker-образы и разделение тестов.
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) - Allure —
pytest --alluredir=allure-results - JUnit XML —
pytest --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/