Aller au contenu

test-proxy-recorder vs MSW, routeFromHAR, Polly.js et le mode test de Next.js

Chaque outil présenté ici contrôle les réponses d’API que voit un test de bout en bout. Ils diffèrent par l’endroit où ils interceptent les requêtes (dans le navigateur, dans votre serveur ou dans un proxy séparé) et par le fait que vous écriviez les réponses ou que vous les enregistriez. Le tableau reprend les six outils de la vue d’ensemble de la documentation et ajoute le mode test de Next.js, mockttp, scenarist, talkback et proxay. Chaque cellule provient de la documentation, du README ou du code source de l’outil lui-même, liés sous le tableau, à la date du 2026-10-03. « Non documenté » signifie que ces sources ne le précisent pas.

OutilEnregistre le trafic réelCôté serveur (SSR)Côté navigateurWebSocketNatif PlaywrightDernière version
test-proxy-recorderOuiOui, via le proxyOui, via HAROuiOui1.3.1, 2026-08-05
Playwright routeFromHAROuiNonOuiNonIntégréPlaywright 1.63.0, 2026-09-04
MSWNon (handlers, ou un HAR via @msw/source)Dans le processus serveurOuiOui@msw/playwright, requêtes du navigateur3.0.2, 2026-10-03
Polly.jsOuiDans le processus serveurOuiNon documentéAdaptateur tiers@pollyjs/core 6.0.6, 2023-07-20
playwright-network-cacheOuiNonOuiNon documentéOui0.3.0, 2026-05-12
Mocky BalboaNon (handlers)OuiOuiNon documentéOui@mocky-balboa/playwright 2.0.2, 2026-05-21
Mode test de Next.jsNon (handlers)Oui, Next.js uniquementRequêtes vers d’autres originesNon documentéOuiExpérimental, dans Next.js 16.3.8, 2026-09-30
mockttpNon documentéOui, comme proxy sortant (forward proxy)Oui, comme proxy du navigateurOuiNon, une fixture à écrire soi-même4.6.3, 2026-09-11
scenaristNon (scénarios dans le code)Next.js et ExpressNonNon documentéOui0.5.1, 2026-09-27
talkbackOuiOui, comme adresse de l’APINon documentéNon documentéNon4.2.0, 2024-07-10
proxayOuiOui, comme adresse de l’APIOui, comme adresse de l’APINon documentéNonnpm 1.9.0, 2024-05-15 ; GitHub 2.0.0, 2026-01-29

Les dates de version proviennent du registre npm, sauf quand une release GitHub est liée.

  • test-proxy-recorder. Les appels côté serveur passent par le proxy et les appels du navigateur par HAR (comment ça marche). Les messages WebSocket enregistrés sont rejoués par le proxy (CLI). Version : npm.
  • Playwright routeFromHAR. Avec update: true, il enregistre un HAR à partir du trafic réel (Mock APIs). Le replay sert « the network requests that are made in the page » (API). Il passe par des handlers route() qui répondent aux requêtes HTTP et n’a pas de chemin pour WebSocket (harRouter.ts). Version : v1.63.0.
  • MSW. Vous écrivez des handlers de requêtes. MSW n’enregistre rien lui-même, mais @msw/source peut générer des handlers à partir d’un fichier HAR exporté depuis les DevTools du navigateur. Dans Node.js, il s’exécute dans le processus qui fait les requêtes (setupServer). Les WebSockets passent par l’API ws. Le binding officiel @msw/playwright passe par page.route(), il couvre donc les requêtes du navigateur. Version : v3.0.2.
  • Polly.js. Son dépôt le décrit comme « Record, Replay, and Stub HTTP Interactions ». L’adaptateur node-http patche les modules http et https de Node, et l’adaptateur fetch enveloppe le fetch global. Polly enregistre donc dans le processus qui l’exécute. Sa documentation ne liste aucun adaptateur WebSocket. La prise en charge de Playwright passe par l’adaptateur tiers polly-adapter-playwright, vers lequel renvoie la documentation de Polly. Version : npm.
  • playwright-network-cache. Son README indique qu’il accélère les tests Playwright « by caching network requests on the filesystem ». CacheRoute intercepte avec page.route() (source), il ne voit donc que les requêtes du navigateur. Version : npm.
  • Mocky Balboa. Vous définissez les mocks dans le test, pour les requêtes du serveur comme du client, via une seule API. Les mocks restent isolés par test pendant que les tests tournent en parallèle (fonctionnalités). Pour Next.js 14 et versions ultérieures, sa CLI démarre votre serveur Next.js (Next.js). Sa documentation ne mentionne WebSocket que comme canal entre votre serveur et le test runner. Version : npm.
  • Mode test de Next.js. Les handlers déclarés avec next.onFetch() reçoivent les appels fetch du serveur, ainsi que les appels fetch de la page vers d’autres origines (README, page-route.ts). La page Mock côté serveur couvre sa mise en place, son statut et MSW 3. Version : Next.js 16.3.8.
  • mockttp. Un serveur de mock et proxy HTTP et HTTPS pour des tests qui tournent « in node or browsers » (README). forAnyWebSocket() mocke les connexions WebSocket (source). Le README ne décrit aucun mode d’enregistrement. L’article de l’équipe Playwright montre la fixture à écrire. Version : npm.
  • scenarist. Le README le présente comme « Built on MSW with runtime scenario management and test ID isolation », et vous écrivez les scénarios dans le code. Sa FAQ indique qu’il « provides server-side scenario management, which complements Playwright’s client-side mocking ». Le code de votre serveur transmet x-scenarist-test-id à chaque fetch (adaptateur Next.js), et @scenarist/playwright-helpers fournit la fixture Playwright. Version : npm.
  • talkback. « A javascript HTTP proxy that records and playbacks HTTP requests » (README). Votre app envoie ses requêtes à talkback. Une requête qui correspond à une cassette (tape) sauvegardée reçoit la réponse de cette cassette, et une requête inconnue est transmise à l’hôte puis sauvegardée comme nouvelle cassette. Le README ne mentionne ni les navigateurs ni des cassettes par test. Version : npm.
  • proxay. Un proxy d’enregistrement et de replay pour « a web frontend and its backend » ou « a server and another server » (README). Les tests choisissent une cassette avec POST /__proxay/tape, par exemple dans beforeEach, et le README ne traite pas des tests en parallèle. La version 2.0.0 est une release GitHub ; npm sert toujours la 1.9.0.

Polly.js, de Netflix, enregistre, rejoue et bouchonne (stub) des échanges HTTP, et a inspiré test-proxy-recorder. Son état au 2026-10-03 :

  • @pollyjs/core n’a plus eu de version depuis la 6.0.6 du 2023-07-20. La dernière modification du dépôt, le 2025-05-31, a publié @pollyjs/adapter-fetch 6.0.7, qui a levé la dépréciation de l’adaptateur fetch pour Node (Netflix/pollyjs#506).
  • Polly n’a pas d’adaptateur Playwright à lui. Sa documentation renvoie vers l’adaptateur tiers polly-adapter-playwright, qui s’attache à un contexte de navigateur ou à une page. Sa dernière version, la 2.4.0, date du 2024-04-18.
  • Pour les appels côté serveur, Polly doit tourner dans le processus serveur, via son adaptateur node-http ou fetch.

Si vous migrez depuis Polly.js, ses concepts correspondent à ceux de test-proxy-recorder comme suit.

Polly.jstest-proxy-recorder
Modes record, replay et passthrough (configuration)Modes record, replay et transparent, définis par test par playwrightProxy.before()
Un enregistrement nommé par instance de Polly, sauvegardé par un persisterUn .mock.json (serveur) et un .har (navigateur) par test Playwright, dans le répertoire des enregistrements
Des adaptateurs dans le processus qui fait les requêtesUn processus proxy pour les appels du serveur, HAR pour les appels du navigateur, et registerProxyFetch() sur le serveur
Requêtes mises en correspondance par défaut selon la méthode, les en-têtes, le corps, l’ordre et l’URLRequêtes côté serveur mises en correspondance selon la méthode, le chemin et un hash de la query string, dans l’ordre d’enregistrement, sans comparer les corps. Les requêtes du navigateur suivent les règles HAR de Playwright, qui comparent aussi les corps des POST

Dans une app Next.js, les requêtes du navigateur et celles du serveur demandent des configurations MSW différentes.

  • Requêtes du navigateur. @msw/playwright, le binding officiel, exécute vos handlers via page.route(), avec une fixture network modifiable par test.
  • Requêtes du serveur. MSW tourne dans le processus Next.js. La documentation de MSW n’a pas de guide Next.js, et l’exemple de référence est une pull request ouverte, mswjs/examples#101. Les handlers que vous modifiez à l’exécution sont partagés par tous les tests qui atteignent ce serveur. La page Mock côté serveur donne les détails et les sources.
  • Handlers serveur par test. Le mode test de Next.js accepte des handlers MSW par test, mais son point d’entrée MSW ne se charge pas avec MSW 3.0 (détails). scenarist construit des scénarios par test sur MSW pour Next.js et Express, et le code de votre serveur transmet un en-tête d’id de test à chaque fetch.
  • Enregistrement. MSW n’enregistre pas le trafic. @msw/source transforme en handlers un fichier HAR exporté depuis les DevTools du navigateur.

test-proxy-recorder fait le compromis inverse. Il enregistre les deux côtés depuis la vraie API : il n’y a donc aucun handler à écrire. En contrepartie, vous avez moins de contrôle sur les réponses que l’API ne produit pas à la demande.

  • Tout votre trafic est côté navigateur. Le routeFromHAR intégré de Playwright ne demande aucune dépendance supplémentaire. Commencez par là, et ajoutez test-proxy-recorder quand des requêtes côté serveur apparaissent.
  • Vous voulez écrire les réponses à la main, ou forcer des erreurs et des cas limites. Les handlers de MSW s’y prêtent mieux, et MSW tourne aussi dans Vitest, Storybook et le navigateur, pas seulement dans Playwright. Pour des handlers côté serveur par test dans Playwright, regardez Mocky Balboa, scenarist ou le mode test de Next.js.
  • Il vous faut seulement un cache côté navigateur, avec peu de configuration. playwright-network-cache met les réponses en cache sur le disque via une seule fixture.
  • Votre serveur n’est pas écrit en JavaScript, ou vous ne pouvez pas modifier son code. Un proxy sortant comme mockttp fonctionne via HTTPS_PROXY. L’article de l’équipe Playwright indique que Python, Go, Ruby, Rust et .NET fonctionnent de la même façon, et que Java a besoin de -Dhttps.proxyHost et -Dhttps.proxyPort.
  • Il vous faut l’enregistrement et le replay hors de Playwright, dans n’importe quel langage. proxay et talkback sont des serveurs HTTP autonomes qui sauvegardent les enregistrements dans des fichiers de cassette.