Звіти й артефакти: що зберігати і як ділитися
Які звіти. HTML-звіт Playwright (playwright-report/) — для людей: кроки, скріншоти, trace. JUnit XML — для машин: CI і сторонні сервіси показують тести у своєму UI, малюють історію та анотують PR. Зазвичай вмикають обидва: reporter: [['html', { open: 'never' }], ['junit', { outputFile: 'results/junit.xml' }]], а в CI додають github (анотації в логах) чи dot (короткий вивід).
Що вантажити. Трасування, відео та скріншоти — найкращі докази падіння, але важкі. Записуйте їх лише для невдалих тестів чи ретраїв (trace: 'on-first-retry', video: 'retain-on-failure', screenshot: 'only-on-failure'). Для артефактів задавайте retention-days (7–14 днів вистачає) і не вантажте нічого, що не потрібне при успіху.
Шардовані прогони. Кожна шарда формує blob-звіт; окрема job (needs: [e2e]) завантажує всі blob-артефакти (download-artifact@v4 з pattern і merge-multiple: true), виконує npx playwright merge-reports --reporter html ./all-blob-reports і вантажить один HTML-звіт. Job злиття теж має if: ${{ !cancelled() }}, інакше після червоної шарди вона не запуститься.
Як ділитися. Zip-артефакт треба скачати й розпакувати, а HTML-звіт зі статикою неможливо відкрити як окремий файл без сервера. Зручніше публікувати звіт на GitHub Pages чи статичному хостингу і додавати посилання в коментар PR. Для короткого підсумку на сторінці запуску — писати Markdown у файл $GITHUB_STEP_SUMMARY.
Сповіщення. Надсилайте в канал (Slack/Teams) лише важливе: падіння nightly і main, а не кожного PR; у повідомленні — назва набору, кількість падінь, посилання на запуск і звіт.