Pular para o conteúdo

test-proxy-recorder vs MSW, routeFromHAR, Polly.js e o modo de teste do Next.js

Cada ferramenta aqui controla as respostas de API que um teste de ponta a ponta vê. Elas diferem em onde interceptam as requisições (no navegador, dentro do seu servidor ou em um proxy separado) e em se você escreve as respostas ou as grava. A tabela mantém as seis ferramentas da visão geral da documentação e acrescenta o modo de teste do Next.js (test mode), mockttp, scenarist, talkback e proxay. Cada célula vem da documentação, do README ou do código-fonte da própria ferramenta, com os links abaixo da tabela, conforme o estado em 2026-10-03. “Não documentado” significa que essas fontes não dizem nada a respeito.

FerramentaGrava tráfego realLado do servidor (SSR)Lado do navegadorWebSocketNativo do PlaywrightVersão mais recente
test-proxy-recorderSimSim, pelo proxySim, pelo HARSimSim1.3.1, 2026-08-05
Playwright routeFromHARSimNãoSimNãoEmbutidoPlaywright 1.63.0, 2026-09-04
MSWNão (handlers, ou um HAR via @msw/source)Dentro do processo do servidorSimSim@msw/playwright, requisições do navegador3.0.2, 2026-10-03
Polly.jsSimDentro do processo do servidorSimNão documentadoAdaptador de terceiros@pollyjs/core 6.0.6, 2023-07-20
playwright-network-cacheSimNãoSimNão documentadoSim0.3.0, 2026-05-12
Mocky BalboaNão (handlers)SimSimNão documentadoSim@mocky-balboa/playwright 2.0.2, 2026-05-21
Modo de teste do Next.jsNão (handlers)Sim, só Next.jsRequisições para outras origensNão documentadoSimExperimental, no Next.js 16.3.8, 2026-09-30
mockttpNão documentadoSim, como proxy de encaminhamento (forward proxy)Sim, como proxy do navegadorSimNão, uma fixture que você escreve4.6.3, 2026-09-11
scenaristNão (cenários em código)Next.js e ExpressNãoNão documentadoSim0.5.1, 2026-09-27
talkbackSimSim, como o endereço da APINão documentadoNão documentadoNão4.2.0, 2024-07-10
proxaySimSim, como o endereço da APISim, como o endereço da APINão documentadoNãonpm 1.9.0, 2024-05-15; GitHub 2.0.0, 2026-01-29

As datas de lançamento vêm do registro do npm, a menos que haja um link para um release do GitHub.

  • test-proxy-recorder. As chamadas do lado do servidor passam pelo proxy, e as do navegador, pelo HAR (como funciona). As mensagens de WebSocket gravadas são reproduzidas pelo proxy (CLI). Versão: npm.
  • Playwright routeFromHAR. Com update: true, ele grava um HAR a partir de tráfego real (Mock APIs). A reprodução serve “as requisições de rede feitas na página” (API). Ele passa por handlers de route() que atendem requisições HTTP e não tem caminho para WebSocket (harRouter.ts). Versão: v1.63.0.
  • MSW. Você escreve handlers de requisição. O MSW não grava nada por conta própria, mas o @msw/source pode gerar handlers a partir de um arquivo HAR que você exporta do DevTools do navegador. No Node.js, ele roda dentro do processo que faz as requisições (setupServer). WebSockets usam a API ws. A integração oficial @msw/playwright passa pelo page.route(), então cobre as requisições do navegador. Versão: v3.0.2.
  • Polly.js. O repositório o descreve como “gravar, reproduzir e criar stubs de interações HTTP”. O adaptador node-http faz patch dos módulos http e https do Node, e o adaptador fetch envolve o fetch global. Portanto, o Polly grava dentro do processo que o executa. A documentação dele não lista nenhum adaptador de WebSocket. O suporte ao Playwright vem do polly-adapter-playwright, de terceiros, para o qual a documentação do Polly aponta. Versão: npm.
  • playwright-network-cache. O README diz que ele acelera os testes do Playwright “armazenando em cache as requisições de rede no sistema de arquivos”. O CacheRoute intercepta com page.route() (código-fonte), então só vê requisições do navegador. Versão: npm.
  • Mocky Balboa. Você define os mocks no teste, para requisições do servidor e do cliente, por meio de uma única API. Os mocks ficam isolados por teste enquanto os testes rodam em paralelo (recursos). Para Next.js 14 e posteriores, a CLI dele inicia o seu servidor Next.js (Next.js). A documentação dele só menciona WebSocket como o canal entre o seu servidor e o executor de testes. Versão: npm.
  • Modo de teste do Next.js. Os handlers registrados com next.onFetch() recebem as chamadas fetch do servidor, além das chamadas fetch da página para outras origens (README, page-route.ts). O guia de mock do lado do servidor cobre a configuração, a situação dele e o MSW 3. Versão: Next.js 16.3.8.
  • mockttp. Um servidor de mock e proxy HTTP e HTTPS para testes que rodam “no node ou em navegadores” (README). O forAnyWebSocket() faz mock de conexões WebSocket (código-fonte). O README não descreve nenhum modo de gravação. A publicação da equipe do Playwright mostra a fixture a escrever. Versão: npm.
  • scenarist. O README diz que ele é “construído sobre o MSW, com gerenciamento de cenários em tempo de execução e isolamento por ID de teste”, e você escreve os cenários em código. A FAQ dele diz que ele “oferece gerenciamento de cenários do lado do servidor, que complementa o mock do lado do cliente do Playwright”. O código do seu servidor repassa x-scenarist-test-id em cada fetch (adaptador para Next.js), e o @scenarist/playwright-helpers fornece a fixture do Playwright. Versão: npm.
  • talkback. “Um proxy HTTP em javascript que grava e reproduz requisições HTTP” (README). A sua aplicação envia as requisições para o talkback. Uma requisição que corresponde a uma tape salva recebe a resposta da tape, e uma desconhecida é encaminhada ao host e salva como uma nova tape. O README não menciona navegadores nem tapes por teste. Versão: npm.
  • proxay. Um proxy de gravação e reprodução para “um frontend web e seu backend” ou “um servidor e outro servidor” (README). Os testes escolhem uma tape com POST /__proxay/tape, por exemplo no beforeEach, e o README não aborda testes em paralelo. A versão 2.0.0 é um release do GitHub; o npm ainda serve a 1.9.0.

O Polly.js, da Netflix, grava, reproduz e cria stubs de HTTP, e foi a inspiração do test-proxy-recorder. A situação dele em 2026-10-03:

  • O @pollyjs/core não tem nenhum lançamento desde a 6.0.6, em 2023-07-20. A última mudança do repositório, em 2025-05-31, publicou o @pollyjs/adapter-fetch 6.0.7, que retirou a descontinuação do adaptador fetch para Node (Netflix/pollyjs#506).
  • O Polly não tem um adaptador próprio para o Playwright. A documentação dele aponta para o polly-adapter-playwright, de terceiros, que se conecta a um contexto de navegador ou a uma página. O último lançamento dele, 2.4.0, foi em 2024-04-18.
  • Para chamadas do lado do servidor, o Polly precisa rodar dentro do processo do servidor, por meio do adaptador node-http ou do adaptador fetch.

Se você está migrando do Polly.js, os conceitos dele correspondem aos do test-proxy-recorder assim:

Polly.jstest-proxy-recorder
Modos record, replay e passthrough (configuração)Modos record, replay e transparent, definidos por teste pelo playwrightProxy.before()
Uma gravação nomeada por instância do Polly, salva por um persisterUm .mock.json (servidor) e um .har (navegador) por teste do Playwright, no diretório de gravações
Adaptadores dentro do processo que faz as requisiçõesUm processo de proxy para as chamadas do servidor, HAR para as chamadas do navegador e registerProxyFetch() no servidor
Por padrão, a correspondência das requisições usa método, headers, corpo, ordem e URLA correspondência das requisições do lado do servidor usa método, caminho e um hash da query, na ordem gravada, sem comparar os corpos. As requisições do navegador seguem as regras de HAR do Playwright, que também comparam os corpos de POST

Em uma aplicação Next.js, as requisições do navegador e as do servidor precisam de configurações diferentes do MSW.

  • Requisições do navegador. O @msw/playwright, a integração oficial, executa os seus handlers por meio do page.route(), com uma fixture network que você pode mudar por teste.
  • Requisições do servidor. O MSW roda dentro do processo do Next.js. A documentação do MSW não tem um guia de Next.js, e o exemplo de referência é um pull request aberto, o mswjs/examples#101. Os handlers que você muda em tempo de execução são compartilhados por todos os testes que chegam a esse servidor. O guia de mock do lado do servidor traz os detalhes e as fontes.
  • Handlers de servidor por teste. O modo de teste do Next.js aceita handlers do MSW por teste, mas o ponto de entrada dele para o MSW não carrega com o MSW 3.0 (detalhes). O scenarist monta cenários por teste sobre o MSW para Next.js e Express, e o código do seu servidor repassa um header com o id do teste em cada fetch.
  • Gravação. O MSW não grava tráfego. O @msw/source transforma um arquivo HAR, exportado do DevTools do navegador, em handlers.

O test-proxy-recorder faz a troca oposta. Ele grava os dois lados a partir da API real, então não há handlers para escrever. Em compensação, você tem menos controle sobre as respostas que a API não produz sob demanda.

  • Todo o seu tráfego é do lado do navegador. O routeFromHAR embutido do Playwright não precisa de nenhuma dependência extra. Comece por ele e adicione o test-proxy-recorder quando aparecerem requisições do lado do servidor.
  • Você quer escrever as respostas à mão ou forçar erros e casos-limite. Os handlers do MSW se encaixam melhor nisso, e o MSW também roda no Vitest, no Storybook e no navegador, não só no Playwright. Para handlers do lado do servidor por teste no Playwright, veja o Mocky Balboa, o scenarist ou o modo de teste do Next.js.
  • Você só precisa de cache do lado do navegador, com pouca configuração. O playwright-network-cache guarda as respostas em cache no disco por meio de uma única fixture.
  • O seu servidor não é escrito em JavaScript, ou você não pode mudar o código dele. Um proxy de encaminhamento como o mockttp funciona por meio de HTTPS_PROXY. A publicação da equipe do Playwright diz que Python, Go, Ruby, Rust e .NET funcionam do mesmo jeito, e que o Java precisa de -Dhttps.proxyHost e -Dhttps.proxyPort.
  • Você precisa gravar e reproduzir fora do Playwright, em qualquer linguagem. O proxay e o talkback são servidores HTTP independentes que salvam as gravações como arquivos de tape.