Перейти к содержимому

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 используется API ws. Официальная привязка @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 от Netflix записывает, воспроизводит и подменяет заглушками HTTP-запросы, и именно он вдохновил test-proxy-recorder. Его состояние на 2026-10-03:

  • У @pollyjs/core не было выпусков после 6.0.6 от 2023-07-20. Последнее изменение в репозитории, 2025-05-31, опубликовало @pollyjs/adapter-fetch 6.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.jstest-proxy-recorder
Режимы record, replay и passthrough (конфигурация)Режимы record, replay и transparent, которые для каждого теста задаёт playwrightProxy.before()
Именованная запись на каждый экземпляр Polly, которую сохраняет persister.mock.json (сервер) и .har (браузер) на каждый тест Playwright в каталоге записей
Адаптеры внутри процесса, который делает запросыПроцесс прокси для серверных вызовов, HAR для вызовов из браузера и registerProxyFetch() на сервере
По умолчанию запросы сопоставляются по методу, заголовкам, телу, порядку и URLСерверные запросы сопоставляются по методу, пути и хешу строки запроса в порядке записи, тела не сравниваются. Запросы браузера следуют правилам HAR в Playwright, которые сравнивают ещё и тела POST

В приложении 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-серверы, которые сохраняют записи в виде файлов кассет.