GitHub Actions для Playwright: мой оптимальный workflow Вот YAML, который я использую в реальных проектах. Разбираю каждую важную строчку.
Это не «Hello World» workflow — это конфиг, который прошёл через несколько продуктовых проектов.
name: Playwright Tests
on: push: branches: [main] pull_request:
jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: shard: [1, 2, 3, 4] # 4 параллельных раннера
steps:
-
uses: actions/checkout@v4
-
uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' # кэш node_modules
-
name: Install dependencies run: npm ci
-
name: Cache Playwright browsers uses: actions/cache@v4 id: playwright-cache with: path: ~/.cache/ms-playwright key: playwright-${{ hashFiles('package-lock.json') }}
-
name: Install browsers if: steps.playwright-cache.outputs.cache-hit != 'true' run: npx playwright install --with-deps
-
name: Run tests (shard) run: npx playwright test --shard=${{ matrix.shard }}/4
-
uses: actions/upload-artifact@v4 if: always() with: name: report-${{ matrix.shard }} path: playwright-report/
Три момента, которые экономят больше всего:
• Кэш браузеров по хешу package-lock.json — установка занимает 15 секунд вместо 2 минут. Браузеры скачиваются только при обновлении зависимостей. • fail-fast: false — все шарды дорабатывают до конца, даже если один упал. Вы видите полную картину, а не первое падение. • matrix.shard с 4 раннерами — 500 тестов за 4 минуты вместо 16. Стоит $0 на GitHub Free.
Типичная ошибка: пропустить --with-deps при установке браузеров — Chromium запустится, но без системных библиотек. В Ubuntu это libnss3, libatk-bridge и другие. Флаг ставит всё сразу.
Что добавили бы в этот workflow? Может, есть трюк, который я пропустил — буду рад узнать.
#github_actions #playwright #ci_cd #sdet #typescript #ts @haradkou_sdet