Частые вопросы
Мои параллельные тесты воспроизведения иногда обращаются к реальному бэкенду — почему?
Заголовок раздела «Мои параллельные тесты воспроизведения иногда обращаются к реальному бэкенду — почему?»Скорее всего, вы вызываете playwrightProxy.teardown() в хуке для каждого теста. Он задаёт глобальный режим прокси как transparent, а при fullyParallel: true каждый воркер Playwright выполняет свой собственный test.afterAll. Если быстрый тест завершается и вызывает teardown(), пока более медленный тест ещё выполняется, прокси переключается в transparent посреди теста, и оставшиеся запросы пересылаются на реальный бэкенд вместо воспроизведения.
// ❌ breaks parallel replay — teardown() affects all sessions globallytest.afterAll(async () => { await playwrightProxy.teardown();});Решение: не используйте test.afterAll. Очистка сессии происходит автоматически через context.on('close') → cleanupSession(). Используйте global teardown только если нужно сбросить прокси после всего прогона.
Нужно ли коммитить записи в git?
Заголовок раздела «Нужно ли коммитить записи в git?»Да. Записи должны быть в git, чтобы CI мог воспроизводить их без сети — не добавляйте e2e/recordings в .gitignore. Чтобы крупные файлы записей не раздували diff’ы PR, пометьте их как бинарные в .gitattributes:
/e2e/recordings/** binaryВажна ли <target-url> прокси для записи только в браузере (HAR)?
Заголовок раздела «Важна ли <target-url> прокси для записи только в браузере (HAR)?»Нет. Для записи только в браузере цель не важна — процессу прокси нужно лишь работать, чтобы его эндпоинт /__control был доступен для управления сессиями. Цель важна только когда серверные (SSR) запросы тоже маршрутизируются через прокси.
Можно ли записывать против dev-сервера Next.js?
Заголовок раздела «Можно ли записывать против dev-сервера Next.js?»Для записи и воспроизведения предпочитайте next build + next start, а не next dev. Dev-сервер медленный и может приводить к таймаутам или нестабильным записям.
Как обновить запись?
Заголовок раздела «Как обновить запись?»Снова запустите в режиме record (задайте MODE = 'record' в фикстуре или RECORD_MODE=1) против реального API, затем вернитесь в replay и закоммитьте обновлённые файлы в e2e/recordings/.