test-proxy-recorder vs MSW, routeFromHAR, Polly.js и тестовый режим Next.js
Каждый инструмент здесь управляет ответами API, которые видит end-to-end-тест. Они различаются тем, где перехватывают запросы (в браузере, внутри вашего сервера или в отдельном прокси), и тем, пишете ли вы ответы сами или записываете их. Таблица сохраняет шесть инструментов из обзора документации и добавляет тестовый режим Next.js (Next.js test mode), mockttp, scenarist, talkback и proxay. Каждая ячейка взята из собственной документации, README или исходного кода инструмента (ссылки под таблицей) по состоянию на 2026-10-03. «Не документировано» означает, что эти источники об этом не говорят.
Таблица возможностей
Заголовок раздела «Таблица возможностей»| Инструмент | Запись реального трафика | Серверная сторона (SSR) | Сторона браузера | WebSocket | Нативно для Playwright | Последний выпуск |
|---|---|---|---|---|---|---|
| test-proxy-recorder | Да | Да, через прокси | Да, через HAR | Да | Да | 1.3.1, 2026-08-05 |
Playwright routeFromHAR | Да | Нет | Да | Нет | Встроен | Playwright 1.63.0, 2026-09-04 |
| MSW | Нет (обработчики или HAR через @msw/source) | Внутри серверного процесса | Да | Да | @msw/playwright, запросы браузера | 3.0.2, 2026-10-03 |
| Polly.js | Да | Внутри серверного процесса | Да | Не документировано | Сторонний адаптер | @pollyjs/core 6.0.6, 2023-07-20 |
| playwright-network-cache | Да | Нет | Да | Не документировано | Да | 0.3.0, 2026-05-12 |
| Mocky Balboa | Нет (обработчики) | Да | Да | Не документировано | Да | @mocky-balboa/playwright 2.0.2, 2026-05-21 |
| Тестовый режим Next.js | Нет (обработчики) | Да, только Next.js | Запросы к другим источникам (origin) | Не документировано | Да | Экспериментальный, в Next.js 16.3.8, 2026-09-30 |
| mockttp | Не документировано | Да, как прямой прокси (forward proxy) | Да, как прокси браузера | Да | Нет, фикстуру пишете вы | 4.6.3, 2026-09-11 |
| scenarist | Нет (сценарии в коде) | Next.js и Express | Нет | Не документировано | Да | 0.5.1, 2026-09-27 |
| talkback | Да | Да, как адрес API | Не документировано | Не документировано | Нет | 4.2.0, 2024-07-10 |
| proxay | Да | Да, как адрес API | Да, как адрес API | Не документировано | Нет | npm 1.9.0, 2024-05-15; GitHub 2.0.0, 2026-01-29 |
Источники и примечания
Заголовок раздела «Источники и примечания»Даты выпусков взяты из реестра npm, если не указана ссылка на релиз GitHub.
- test-proxy-recorder. Серверные вызовы идут через прокси, а вызовы из браузера — через HAR (как это работает). Записанные сообщения WebSocket воспроизводит прокси (CLI). Выпуск: npm.
- Playwright
routeFromHAR. Сupdate: trueон записывает HAR из реального трафика (Mock APIs). Воспроизведение обслуживает «сетевые запросы, которые делаются на странице» (API). Оно идёт через обработчикиroute(), которые отвечают на HTTP-запросы, и пути для WebSocket у него нет (harRouter.ts). Выпуск: v1.63.0. - MSW. Обработчики запросов пишете вы. Сам MSW ничего не записывает, но
@msw/sourceумеет генерировать обработчики из файла HAR, который вы экспортируете из DevTools браузера. В Node.js он работает внутри процесса, который делает запросы (setupServer). Для WebSocket используется APIws. Официальная привязка@msw/playwrightработает черезpage.route(), поэтому охватывает запросы браузера. Выпуск: v3.0.2. - Polly.js. Его репозиторий описывает его как «запись, воспроизведение и заглушки HTTP-взаимодействий». Адаптер node-http патчит модули
httpиhttpsв Node, а адаптер fetch оборачивает глобальныйfetch. Поэтому Polly записывает внутри того процесса, в котором запущен. В его документации нет адаптера для WebSocket. Поддержку Playwright даёт сторонний polly-adapter-playwright, на который ссылается документация Polly. Выпуск: npm. - playwright-network-cache. Его README говорит, что он ускоряет тесты Playwright «за счёт кеширования сетевых запросов в файловой системе».
CacheRouteперехватывает черезpage.route()(исходный код), поэтому видит только запросы браузера. Выпуск: npm. - Mocky Balboa. Моки вы определяете в тесте — для серверных и клиентских запросов через один API. Моки остаются изолированными для каждого теста, пока тесты идут параллельно (возможности). Для Next.js 14 и новее его CLI запускает ваш сервер Next.js (Next.js). Его документация упоминает WebSocket только как канал между вашим сервером и тест-раннером. Выпуск: npm.
- Тестовый режим Next.js. Обработчики, зарегистрированные через
next.onFetch(), получают вызовыfetchсервера, а также вызовыfetchстраницы к другим источникам (README,page-route.ts). Его настройка, статус и MSW 3 разобраны в разделе Мокирование на сервере. Выпуск: Next.js 16.3.8. - mockttp. Мок-сервер и прокси для HTTP и HTTPS для тестов, которые выполняются «в Node или в браузерах» (README).
forAnyWebSocket()мокает WebSocket-соединения (исходный код). README не описывает режима записи. Пост команды Playwright показывает, какую фикстуру написать. Выпуск: npm. - scenarist. README говорит, что он «построен на MSW, с управлением сценариями во время выполнения и изоляцией по ID теста», а сценарии вы пишете в коде. Его FAQ говорит, что он «обеспечивает управление сценариями на стороне сервера, которое дополняет клиентское мокирование Playwright». Ваш серверный код пробрасывает
x-scenarist-test-idв каждомfetch(адаптер для Next.js), а@scenarist/playwright-helpersпредоставляет фикстуру Playwright. Выпуск: npm. - talkback. «HTTP-прокси на JavaScript, который записывает и воспроизводит HTTP-запросы» (README). Ваше приложение отправляет свои запросы в talkback. Запрос, который совпадает с сохранённой кассетой (tape), получает ответ из неё, а неизвестный пересылается на хост и сохраняется как новая кассета. README не упоминает ни браузеры, ни отдельные кассеты для каждого теста. Выпуск: npm.
- proxay. Прокси для записи и воспроизведения в связке «веб-фронтенд и его бэкенд» или «сервер и другой сервер» (README). Тесты выбирают кассету через
POST /__proxay/tape, например вbeforeEach, а параллельные тесты README не рассматривает. Версия 2.0.0 — это релиз на GitHub; npm по-прежнему отдаёт 1.9.0.
Альтернатива Polly.js для Playwright
Заголовок раздела «Альтернатива Polly.js для Playwright»Polly.js от Netflix записывает, воспроизводит и подменяет заглушками HTTP-запросы, и именно он вдохновил test-proxy-recorder. Его состояние на 2026-10-03:
- У
@pollyjs/coreне было выпусков после 6.0.6 от 2023-07-20. Последнее изменение в репозитории, 2025-05-31, опубликовало@pollyjs/adapter-fetch6.0.7, который снял с адаптера fetch пометку deprecated для Node (Netflix/pollyjs#506). - Собственного адаптера для Playwright у Polly нет. Его документация указывает на сторонний polly-adapter-playwright, который подключается к контексту браузера или странице. Его последний выпуск, 2.4.0, вышел 2024-04-18.
- Для серверных вызовов Polly должен работать внутри серверного процесса через свой адаптер node-http или fetch.
Если вы переходите с Polly.js, его понятия соотносятся с понятиями test-proxy-recorder следующим образом.
| Polly.js | test-proxy-recorder |
|---|---|
Режимы record, replay и passthrough (конфигурация) | Режимы record, replay и transparent, которые для каждого теста задаёт playwrightProxy.before() |
| Именованная запись на каждый экземпляр Polly, которую сохраняет persister | .mock.json (сервер) и .har (браузер) на каждый тест Playwright в каталоге записей |
| Адаптеры внутри процесса, который делает запросы | Процесс прокси для серверных вызовов, HAR для вызовов из браузера и registerProxyFetch() на сервере |
| По умолчанию запросы сопоставляются по методу, заголовкам, телу, порядку и URL | Серверные запросы сопоставляются по методу, пути и хешу строки запроса в порядке записи, тела не сравниваются. Запросы браузера следуют правилам HAR в Playwright, которые сравнивают ещё и тела POST |
MSW с Next.js и Playwright
Заголовок раздела «MSW с Next.js и Playwright»В приложении Next.js запросам браузера и серверным запросам нужны разные настройки MSW.
- Запросы браузера.
@msw/playwright, официальная привязка, запускает ваши обработчики черезpage.route(), с фикстуройnetwork, которую можно менять в каждом тесте. - Серверные запросы. MSW работает внутри процесса Next.js. В документации MSW нет руководства по Next.js, а эталонный пример — открытый pull request mswjs/examples#101. Обработчики, которые вы меняете во время выполнения, общие для всех тестов, которые обращаются к этому серверу. Подробности и источники — в разделе Мокирование на сервере.
- Серверные обработчики для каждого теста. Тестовый режим Next.js принимает обработчики MSW для каждого теста, но его точка входа для MSW не загружается с MSW 3.0 (подробности). scenarist строит сценарии для каждого теста на MSW для Next.js и Express, а ваш серверный код пробрасывает заголовок с id теста в каждом
fetch. - Запись. MSW не записывает трафик.
@msw/sourceпревращает в обработчики файл HAR, экспортированный из DevTools браузера.
test-proxy-recorder выбирает обратный компромисс. Он записывает обе стороны с реального API, поэтому писать обработчики не нужно. Взамен у вас меньше контроля над ответами, которые API не выдаёт по требованию.
Когда выбрать что-то другое
Заголовок раздела «Когда выбрать что-то другое»- Весь ваш трафик идёт на стороне браузера. Встроенному в Playwright
routeFromHARне нужны дополнительные зависимости. Начните с него и добавьте test-proxy-recorder, когда появятся серверные запросы. - Вы хотите писать ответы вручную или принудительно вызывать ошибки и крайние случаи. Для этого лучше подходят обработчики MSW, к тому же MSW работает в Vitest, Storybook и в браузере, а не только в Playwright. Для серверных обработчиков на каждый тест в Playwright посмотрите на Mocky Balboa, scenarist или тестовый режим Next.js.
- Вам нужно только кеширование на стороне браузера с минимальной настройкой. playwright-network-cache кеширует ответы на диске через одну фикстуру.
- Ваш сервер написан не на JavaScript, или вы не можете менять его код. Прямой прокси вроде mockttp работает через
HTTPS_PROXY. Пост команды Playwright говорит, что Python, Go, Ruby, Rust и .NET работают так же, а для Java нужны-Dhttps.proxyHostи-Dhttps.proxyPort. - Вам нужны запись и воспроизведение вне Playwright, на любом языке. proxay и talkback — самостоятельные HTTP-серверы, которые сохраняют записи в виде файлов кассет.