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.
Tabela de recursos
Seção intitulada “Tabela de recursos”| Ferramenta | Grava tráfego real | Lado do servidor (SSR) | Lado do navegador | WebSocket | Nativo do Playwright | Versão mais recente |
|---|---|---|---|---|---|---|
| test-proxy-recorder | Sim | Sim, pelo proxy | Sim, pelo HAR | Sim | Sim | 1.3.1, 2026-08-05 |
Playwright routeFromHAR | Sim | Não | Sim | Não | Embutido | Playwright 1.63.0, 2026-09-04 |
| MSW | Não (handlers, ou um HAR via @msw/source) | Dentro do processo do servidor | Sim | Sim | @msw/playwright, requisições do navegador | 3.0.2, 2026-10-03 |
| Polly.js | Sim | Dentro do processo do servidor | Sim | Não documentado | Adaptador de terceiros | @pollyjs/core 6.0.6, 2023-07-20 |
| playwright-network-cache | Sim | Não | Sim | Não documentado | Sim | 0.3.0, 2026-05-12 |
| Mocky Balboa | Não (handlers) | Sim | Sim | Não documentado | Sim | @mocky-balboa/playwright 2.0.2, 2026-05-21 |
| Modo de teste do Next.js | Não (handlers) | Sim, só Next.js | Requisições para outras origens | Não documentado | Sim | Experimental, no Next.js 16.3.8, 2026-09-30 |
| mockttp | Não documentado | Sim, como proxy de encaminhamento (forward proxy) | Sim, como proxy do navegador | Sim | Não, uma fixture que você escreve | 4.6.3, 2026-09-11 |
| scenarist | Não (cenários em código) | Next.js e Express | Não | Não documentado | Sim | 0.5.1, 2026-09-27 |
| talkback | Sim | Sim, como o endereço da API | Não documentado | Não documentado | Não | 4.2.0, 2024-07-10 |
| proxay | Sim | Sim, como o endereço da API | Sim, como o endereço da API | Não documentado | Não | npm 1.9.0, 2024-05-15; GitHub 2.0.0, 2026-01-29 |
Fontes e observações
Seção intitulada “Fontes e observações”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. Comupdate: 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 deroute()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/sourcepode 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 APIws. A integração oficial@msw/playwrightpassa pelopage.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
httpehttpsdo Node, e o adaptador fetch envolve ofetchglobal. 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
CacheRouteintercepta compage.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 chamadasfetchdo servidor, além das chamadasfetchda 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-idem cadafetch(adaptador para Next.js), e o@scenarist/playwright-helpersfornece 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 nobeforeEach, 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.
Alternativa ao Polly.js para o Playwright
Seção intitulada “Alternativa ao Polly.js para o Playwright”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/corenã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-fetch6.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.js | test-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 persister | Um .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ções | Um 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 URL | A 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 |
MSW com Next.js e Playwright
Seção intitulada “MSW com Next.js e Playwright”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 dopage.route(), com uma fixturenetworkque 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/sourcetransforma 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.
Quando usar outra ferramenta
Seção intitulada “Quando usar outra ferramenta”- Todo o seu tráfego é do lado do navegador. O
routeFromHARembutido 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.proxyHoste-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.