ShopperCove
Menu
All writingBlogTopicsCategoriesAboutRSS
Blog
Categories
Observability & SRE62All categories
About

Plate 44

  1. Blog

Playwright vs Cypress: 1.47s vs 4.24s Smoke

Playwright 1.55.1 Chromium vs Cypress 14.5.4 Electron on one local smoke (visit /, assert h1, click, assert). Warm medians (7 rounds after 1 warm-up): Playwright 1,466 ms vs Cypress 4,243 ms (~2.9x). Disk: PW node_modules ~12 MB + cache ~918 MB; Cypress node_modules ~23 MB + cache ~601 MB. Fixture /workspace/bench-pw-cy/.

Aditya Challa·5 October 2026·4 min read

Hands-on
On this page
  1. What I tested
  2. How wide was the smoke gap?
  3. Does the browser channel change the call?
  4. Should you switch for a one-spec smoke?
  5. Sources
  6. Related

I timed one identical browser smoke seven times on this box: Playwright 1.55 (Chromium) median 1,466 ms, Cypress 14.5 (Electron) median 4,243 ms — about 2.9× slower for the same visit, assert, click, assert. Warm-up already discarded; both exited 0 every round.

Short answer: for a thin CI smoke like this, Playwright was the faster default here. Cypress still wins if your team already lives in its time-travel runner UI; the wall-clock gap on a one-spec suite was real. No affiliate links in this post.

What I tested

  • Machine: 8 vCPU Intel Xeon / 15 GB RAM shared Linux cloud box, tested 6 Oct 2026 about 00:15–00:16 IST.
  • Versions: @playwright/test 1.55.1 with Chromium headless shell; Cypress 14.5.4 headless Electron; Node 22.20.0. Static fixture served at http://127.0.0.1:4177/.
  • Fixture: /workspace/bench-pw-cy/. One page with #title, a button, and #out. Spec: visit /, assert title text, click, assert "clicked". Playwright project workers=1; Cypress video off.
  • Timing: wall clock around each CLI (playwright test vs cypress run --browser electron --headless). One warm-up each, then 7 interleaved timed rounds. Caches already populated (browsers preinstalled).
  • Findings: Playwright median 1,466 ms (min 1,433 / max 1,601). Cypress median 4,243 ms (min 4,066 / max 4,396). Ratio ~2.9×.
  • Footprints on disk after install: Playwright node_modules ~12 MB + ms-playwright cache ~918 MB; Cypress node_modules ~23 MB + Cypress cache ~601 MB.
  • One surprise: Cypress Electron cache was smaller than Playwright's Chromium cache here, yet every warm run still cost about three Playwright smokes.
  • Not tested: Firefox/WebKit, Cypress Chrome channel, parallel shards, component testing, trace viewer UX, flaky-test tooling, Windows or macOS, Auth/SSO flows.

How wide was the smoke gap?

Runner (1 smoke, warm)BrowserMedian wallMin / Max
Playwright 1.55 testChromium1,466 ms1,433 / 1,601
Cypress 14.5 runElectron4,243 ms4,066 / 4,396

Same assertions, same local static server, same box. Cypress paid a larger per-process boot tax; Playwright's Chromium headless shell came up quicker for this one-file suite. That matches the narrow question: how long until green on a trivial smoke, not how the runners feel day to day.

If you are comparing unit runners instead of browsers, see Jest vs Vitest and Bun test vs Vitest. For a recent Playwright release note on this site, see Playwright 1.63 test locks.

Does the browser channel change the call?

Yes, partly. I did not run Cypress against Chrome or Playwright against Firefox. Electron vs Chromium is not an apples-to-apples engine match. Treat the 2.9× figure as "CLI smoke on this box with each tool's default headless path," not a universal browser benchmark.

Still, for CI scripts that only need a fast green/red on a public page, the Playwright median under 1.5 s was consistently ahead of Cypress past 4 s. Teams that already standardize on Cypress Dashboard, custom commands, and the interactive runner should weigh migration cost higher than this one number.

Should you switch for a one-spec smoke?

SituationMy pick
New greenfield app, CI needs a cheap smokePlaywright
Existing Cypress suite and shared custom commandsStay on Cypress
Multi-browser matrix (Chromium + Firefox + WebKit)Playwright first
Team depends on Cypress time-travel UI dailyCypress
Component tests inside Vite already on VitestPrefer Vitest 5 upgrade notes plus Playwright for e2e
Network mocking at the service-worker layerPair with MSW vs nock regardless of runner

Bottom line: on one smoke, Playwright returned in 1.47 s median while Cypress needed 4.24 s. Who should not switch: teams whose Cypress investment is the suite and the workflow, not the boot time of a single spec.

How this was made: I installed Playwright and Cypress on the ShopperCove box, served one static page, timed interleaved CLI smokes after a warm-up, recorded JSON medians and disk footprints; the write-up was drafted with AI help and checked against that output.

Sources

  • https://playwright.dev/docs/intro
  • https://docs.cypress.io/app/get-started/why-cypress
  • https://www.npmjs.com/package/@playwright/test
  • https://www.npmjs.com/package/cypress
  • https://github.com/microsoft/playwright

Related

  • https://www.shoppercove.com/blog/playwright-1-63-test-locks-october-2026
  • https://www.shoppercove.com/blog/jest-vs-vitest
  • https://www.shoppercove.com/blog/bun-test-vs-vitest
  • https://www.shoppercove.com/blog/vitest-5-should-you-upgrade-october-2026
  • https://www.shoppercove.com/blog/msw-vs-nock
  • https://www.shoppercove.com/blog/jsdom-vs-happy-dom-vitest
  • https://www.shoppercove.com/blog/c8-vs-nyc
  • https://www.shoppercove.com/blog/lefthook-vs-husky
playwrightcypressbenchmarkingautomationtestingciperformance

Lab evidence

What I found running this

Hands-on on ShopperCove box 6 Oct 2026 ~00:15–00:16 IST (8 vCPU Intel Xeon / 15 GB shared Linux, Node 22.20.0). @playwright/test 1.55.1 Chromium headless shell; Cypress 14.5.4 headless Electron. Fixture /workspace/bench-pw-cy/: static page at 127.0.0.1:4177 with #title/#btn/#out; one smoke each. Wall clock around CLI; 1 warm-up + 7 interleaved rounds. Medians PW 1466 ms (1433–1601) vs Cypress 4243 ms (4066–4396). Footprints: ms-playwright cache ~918 MB, Cypress cache ~601 MB; pw/node_modules ~12 MB, cy/node_modules ~23 MB. Raw: /workspace/bench-pw-cy/res-pw-cy.json. Not tested: Firefox/WebKit, Cypress Chrome, parallel shards, component testing, trace UX, Windows/macOS. No affiliate.

Notes when a lab post goes up

Occasional email for new hands-on reviews. No sequence and no sponsors.

Related links

  • Plate 46

    esbuild-register vs jiti: 343ms vs 540ms Cold

    esbuild-register 3.6.0 vs jiti 2.7.0 on a 61-file TypeScript graph: cold wall medians 343 ms vs 540 ms (~1.57x); after jiti disk cache warm, 185 ms vs esbuild-register 350 ms. Same printed result 970.

    5 Oct 2026

  • Plate 45

    Should You Leave Depcruise? 679ms Test

    Madge 8.0.0 vs dependency-cruiser 16.10.2 on 116 JS files: median wall 679 ms vs 1122 ms (~1.65x). Both found the same 2 circular dependency groups. Depcruise also reported 120 modules / 193 dependencies.

    5 Oct 2026

  • Plate 94

    Should You Leave Prettier? 1.59s vs 0.51s

    dprint 0.60.1 vs Prettier 3.9.9 on 180 files (120 JS + 40 JSON + 20 MD, 38925 B pristine): write medians 514 ms vs 1586 ms; check 455 ms vs 1313 ms. Output 44805 vs 45285 B. All 120 JS files differed on arrow-param parentheses under these defaults.

    5 Oct 2026

On this page

  1. What I tested
  2. How wide was the smoke gap?
  3. Does the browser channel change the call?
  4. Should you switch for a one-spec smoke?
  5. Sources
  6. Related
All writingBlogCategoriesTopicsAboutPrivacyRSS

© 2026 ShopperCove