Запуск тестов в GitHub Actions и GitLab CI, headless режим, параллельный запуск, кэширование
Автоматизация тестов без CI/CD — как код без репозитория. Playwright отлично интегрируется с GitHub Actions и GitLab CI.
# .github/workflows/e2e.yml
name: E2E Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
pip install -r requirements.txt
playwright install chromium
- name: Run tests
run: pytest tests/ --browser chromiumЭто основа: checkout → Python → зависимости → браузеры → тесты.
Скачивание браузеров занимает 1-2 минуты. Кешируйте между запусками:
- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('requirements.txt') }}
restore-keys: playwright-browsers-${{ runner.os }}-
- name: Install Playwright browsers
run: playwright install chromium~/.cache/ms-playwright — директория браузеров на Linux. Кеш восстанавливается за секунды вместо скачивания.
Установите pytest-xdist для распределения тестов по ядрам:
pip install pytest-xdist - name: Run tests in parallel
run: pytest tests/ --browser chromium -n auto-n auto использует все доступные ядра. Реальное ускорение: 2-4x на 4-ядерном runner.
- name: Run tests with HTML report
run: pytest tests/ --browser chromium --reporter=html
- name: Upload test report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
retention-days: 30if: always() гарантирует загрузку отчёта даже при падении тестов. Отчёт доступен в разделе Actions → Artifacts.
- name: Run tests with tracing
run: pytest tests/ --browser chromium --tracing=on
- name: Upload traces
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-traces
path: test-results/
retention-days: 14Скачайте артефакт и откройте trace локально:
npx playwright show-trace test-results/trace.zipЗапуск на всех трёх движках:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
browser: [chromium, firefox, webkit]
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
pip install -r requirements.txt
playwright install ${{ matrix.browser }}
- name: Run tests
run: pytest tests/ --browser ${{ matrix.browser }}fail-fast: false — все браузеры тестируются даже если один упал.
# .gitlab-ci.yml
e2e-tests:
image: python:3.12
stage: test
variables:
PLAYWRIGHT_BROWSERS_PATH: /ms-playwright
cache:
key: playwright-browsers
paths:
- /ms-playwright
before_script:
- pip install -r requirements.txt
- playwright install chromium
script:
- pytest tests/ --browser chromium --reporter=html
artifacts:
when: always
reports:
html: playwright-report/
paths:
- playwright-report/
expire_in: 30 days - name: Run tests
env:
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
API_TOKEN: ${{ secrets.API_TOKEN }}
run: pytest tests/В тестах:
import os
def test_api(page):
token = os.environ['API_TOKEN']
page.goto(f'/auth?token={token}')on:
schedule:
- cron: '0 6 * * 1-5' # Каждый будний день в 6:00 UTCПолезно для nightly-прогона полного набора тестов.
Запускать e2e только при изменении фронтенда:
test:
paths:
- 'frontend/**'
- 'tests/**'Или через paths-ignore:
test:
paths-ignore:
- 'docs/**'
- 'README.md'Готовый образ с браузерами экономит время:
FROM mcr.microsoft.com/playwright/python:v1.40.0-jammy
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["pytest", "tests/", "--reporter=html"] - name: Run tests in Docker
run: docker build -t e2e . && docker run e2e❌ Нет playwright install в CI. Тесты упадут: «Browser is not available». pip install playwright не скачивает браузеры.
❌ Нет кэширования браузеров. Каждый запуск скачивает 300-500 МБ — лишние 1-2 минуты.
❌ Отсутствие артефактов при падении. if: always() или when: always критичны — без них отчёт не загрузится при неудаче.
✅ Правильный подход: кэширование браузеров, -n auto для параллелизма, HTML-отчёт + traces как артефакты, секреты через переменные окружения.
.github/workflows/e2e.yml для запуска тестов на Chromium при push в main.actions/cache.Изучите отчёты и отладку, чтобы диагностировать падения тестов через Trace Viewer.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.