· testing / playwright / cypress
Playwright vs Cypress 2026: Framework nào bạn nên dùng?
Playwright nhanh hơn 31%, parallel hóa miễn phí, và lượt tải nhiều gấp 8 lần Cypress. Chỉ chọn Cypress khi cần component testing hoặc time-travel debugging.
Bởi Ethan
2.266 từ · 12 phút đọc
Playwright thắng cho hầu hết các dự án mới trong năm 2026. Nó chạy nhanh hơn, hỗ trợ parallel hóa miễn phí, và hệ sinh thái đã nghiêng hẳn về phía này đến mức xu hướng npm không còn là cuộc đua ngang sức. Chỉ có hai trường hợp Cypress vẫn thắng rõ ràng: bạn cần component testing ở mức production ngay hôm nay, hoặc workflow debug của team phụ thuộc vào time-travel debugger và không muốn thay đổi.
Bài này dành cho ai
Các developer từ mid đến senior đang chọn hoặc chuyển đổi stack kiểm thử trình duyệt. Nếu bạn đang bắt đầu dự án mới và chưa đầu tư vào công cụ nào, bài này sẽ chỉ bạn đi đúng hướng. Nếu bạn đang có một Cypress suite lớn, câu hỏi về migration cũng được đề cập bên dưới.
Những gì chúng tôi đã test
Hai bộ test, cùng test case, chạy trên cùng một môi trường staging:
- Playwright v1.60.0 trên Node 22.4
- Cypress v15.15.0 trên Node 22.4
- Máy: M3 MacBook Pro, 36 GB RAM, kết nối fiber (500 Mbps upload/download)
- Workload: 200 end-to-end test trên một ứng dụng Next.js (auth flow, data table, form validation, file upload, third-party OAuth)
Cả hai chế độ sequential và parallel đều được đo. Parallel dùng 4 worker — cấu hình CI phổ biến. Tất cả thời gian là median của 5 lần chạy.
So sánh nhanh
| Playwright v1.60.0 | Cypress v15.15.0 | |
|---|---|---|
| Chạy tuần tự (200 test) | 4m 12s | 6m 5s |
| Chạy song song (4 worker) | 1m 38s | 2m 27s |
| Parallel hóa tích hợp sẵn | Miễn phí | Yêu cầu Cypress Cloud |
| Component testing | Thử nghiệm | Production-ready |
| Cross-browser (thực tế) | Chromium, Firefox, WebKit | Chỉ Chromium |
| Lượt tải npm hàng tuần | ~53M | ~6.3M |
| GitHub stars | 88,760 (171 issue mở) | 49,650 (1,205 issue mở) |
| Mức độ hài lòng State of JS 2024 | Playwright dẫn đầu | Cypress đang giảm |
| Chi phí để parallel hóa | Miễn phí | $0–$267/tháng (Cypress Cloud) |
Hiệu năng
Playwright chạy 200 test trong 4m 12s (sequential) so với Cypress ở 6m 5s — nhanh hơn 31%. Với 4 worker song song: 1m 38s so với 2m 27s — nhanh hơn 33%.
Khoảng cách này một phần do kiến trúc. Playwright chạy test trong các browser context riêng biệt, không phải các browser instance riêng biệt. Mỗi context rất nhẹ. Cypress khởi chạy một tiến trình trình duyệt đầy đủ cho mỗi spec file khi parallel hóa — overhead này tích lũy theo kích thước suite.
Con số cũng nhất quán qua các lần retry. Cơ chế retry-on-failure của Playwright chạy lại test trong cùng worker và tái sử dụng browser context. Cypress retry kích hoạt một chu kỳ navigation mới từ đầu.
Nhưng đây chưa phải con số quan trọng nhất. Điều quan trọng là chuyện gì xảy ra khi scale lên trên CI.
Chi phí CI
Parallel hóa của Playwright được tích hợp sẵn. Bạn phân chia worker trên các máy trong cấu hình CI, vậy là xong. Không cần đăng ký dịch vụ nào thêm.
Parallel hóa của Cypress yêu cầu Cypress Cloud. Gói Starter miễn phí có hỗ trợ parallel hóa nhưng giới hạn 500 test result mỗi tháng — đủ để thử nghiệm nhẹ, không đủ cho team ship nhiều PR mỗi ngày. Gói Team tính $67/tháng (thanh toán hàng năm) cho tối đa 50 người dùng và 120k test result mỗi năm. Gói Business là $267/tháng cho cùng quota 120k/năm với chi phí overage thấp hơn. Ở khối lượng test mà parallel hóa thực sự có ý nghĩa — chẳng hạn 200 test trên 8 worker, 30 lần CI mỗi ngày — bạn sẽ hết quota Starter trong vài ngày và đang nhìn vào $67–$267/tháng chỉ để có đủ test result.
Trên Semaphore hay Buildkite, parallel hóa miễn phí của Playwright tạo ra sự khác biệt rõ ràng ở hóa đơn. Chúng tôi mô phỏng một team vừa chạy 200 test với 8 worker song song, 30 lần CI mỗi ngày:
- Playwright: $0 cho hạ tầng parallel hóa
- Cypress: $267/tháng (gói Business) cho cùng khả năng đó
Đó là mức chênh lệch 2–2.7 lần tùy theo gói và số lượng máy. Khoảng cách còn lớn hơn khi số lượng test và tần suất chạy tăng lên.
Trải nghiệm developer
Đây là nơi hai công cụ thực sự sát nhau, và là lý do chính Cypress vẫn có lượng người dùng trung thành đáng kể.
Time-travel debugger của Cypress
Tính năng đặc trưng của Cypress: mỗi lệnh đều được snapshot lại. Bạn có thể lùi từng bước trong một test thất bại ngay trên trình duyệt, kiểm tra trạng thái DOM tại từng điểm, và thấy chính xác điều gì đã xảy ra trước khi assertion thất bại. Rất nhanh để hiểu lỗi khi làm việc local. Playwright không có tính năng tương đương trong cấu hình mặc định.
Playwright có Trace Viewer. Nó ghi lại một file zip gồm screenshot, network request, console log và dữ liệu timeline cho mỗi test. Khi test thất bại trên CI, bạn tải file trace về và mở local (hoặc qua VS Code extension). Trải nghiệm replay khá tốt, nhưng không trơn tru bằng debugger trực tiếp của Cypress — bạn đang xem lại bản ghi, không phải phiên làm việc live.
Nếu workflow debug của bạn gắn với session trình duyệt local và bạn chạy test tương tác nhiều, debugger của Cypress có lợi thế thực sự. Nếu phần lớn công việc debug xảy ra với CI failure (cách hầu hết các team thực sự debug ở quy mô lớn), Trace Viewer của Playwright là đủ.
Codegen
Lệnh codegen của Playwright: npx playwright codegen https://yourapp.com mở trình duyệt, bạn click qua ứng dụng, và nó sinh ra test code theo thời gian thực. Code sinh ra đủ sạch để dùng với chỉnh sửa nhỏ. Nó xử lý dynamic selector khá tốt.
Cypress có cy.origin() scripting nhưng không có codegen tương tác tương đương. Tính năng Studio (record-and-playback) của họ chỉ có trên gói trả phí và sinh ra selector dựa trên attribute thường cần dọn lại nhiều. Codegen của Playwright miễn phí và ưu tiên selector dựa trên text hiển thị và ARIA role — bền hơn theo thời gian.
Với team bắt đầu từ đầu hoặc đang thêm test coverage cho app có sẵn, codegen của Playwright tiết kiệm thời gian thực sự.
Component testing
Đây là nơi Cypress dẫn rõ ràng.
Cypress Component Testing (CT) đã ở mức production-ready từ v10 (giữa năm 2022). Nó mount các component React, Vue, Svelte và Angular trong trình duyệt thực, chạy assertion trên chúng, và tích hợp với Storybook. Các team đã chạy nó trong production suốt ba năm. Tài liệu đã hoàn thiện, các bug đã được phát hiện và hầu hết đã được sửa.
Playwright Component Testing vẫn còn ở trạng thái thử nghiệm tính đến v1.60.0. Nó hoạt động được — bạn có thể mount component React và Vue — nhưng tài liệu chính thức vẫn gắn nhãn experimental, API thay đổi qua các phiên bản minor, và thông báo lỗi khi có vấn đề kém hữu ích hơn Cypress CT. Nếu bạn đang xây dựng design system hoặc cần visual regression testing ở mức component, Cypress CT là lựa chọn an toàn hơn hiện tại.
Khoảng cách này sẽ thu hẹp. Roadmap component testing của Playwright đang được phát triển tích cực. Nhưng “sẽ thu hẹp” không phải “đã thu hẹp” — nếu bạn đang chọn stack cho component testing vào tháng 5 năm 2026, Cypress CT vẫn đang dẫn trước.
Nếu bạn đang chọn framework frontend, xem thêm so sánh React vs Vue để biết framework nào phù hợp hơn với từng cách tiếp cận kiểm thử.
Hỗ trợ đa trình duyệt
Playwright hỗ trợ Chromium, Firefox và WebKit (engine của Safari) ngay từ đầu. Bạn chạy cùng một bộ test trên cả ba trình duyệt chỉ với một thay đổi flag. Hỗ trợ WebKit là lý do chính các team có yêu cầu test trên Safari chọn Playwright — chạy test Safari thực tế mà không cần duy trì CI node trên macOS thực sự rất tiện lợi.
Cypress hỗ trợ các trình duyệt dựa trên Chromium (Chrome, Edge, Electron) và Firefox. Không có Safari/WebKit. Nếu app của bạn cần chạy trên Safari và bạn cần phát hiện các bug đặc thù của Safari trong CI, đây là ràng buộc cứng nghiêng về phía Playwright.
Cộng đồng và hệ sinh thái
Xu hướng tải npm nói lên tất cả: Playwright vượt qua Cypress vào giữa năm 2024 và tiếp tục bỏ xa. Tính đến tháng 5 năm 2026, Playwright đạt ~53M lượt tải hàng tuần so với Cypress ở mức ~6.3M.
Sức khỏe trên GitHub: Playwright có 88,760 star và 171 issue mở. Cypress có 49,650 star và 1,205 issue mở. Chênh lệch về số issue mở là con số đáng chú ý hơn — Playwright đang xử lý lượng người dùng lớn hơn với hàng đợi issue nhỏ hơn, thường là dấu hiệu của nhịp bảo trì tích cực hơn.
Mức độ hài lòng theo State of JS 2024: Playwright dẫn trước Cypress với khoảng cách đáng kể. Điểm hài lòng của Cypress đã giảm qua từng năm kể từ 2022. Của Playwright duy trì gần đầu danh mục testing trong cùng giai đoạn. Xem kết quả testing của State of JS 2024 để biết con số chính xác.
Tác động của hệ sinh thái rất thực tế: câu trả lời trên Stack Overflow, bài viết giải thích các dạng lỗi cụ thể, các tích hợp từ bên thứ ba (visual testing, accessibility scanning, AI test generation) ngày càng lấy Playwright làm ví dụ chính và Cypress là phụ. Xu hướng này sẽ chỉ rõ hơn trong hai năm tới.
Migration từ Cypress
Nếu bạn đang có Cypress suite, câu hỏi migration là bài toán chi phí và lợi ích.
Suite lớn (500+ test): migration mất vài tuần, không phải vài ngày. Model selector khá tương đồng (cả hai đều ưu tiên tên accessible và text), nhưng cy.intercept() tương ứng với page.route(), custom command cần chuyển thành fixture hoặc page object, và Cypress plugin không dùng được. Liệu tiết kiệm chi phí CI và cải thiện hiệu năng có đáng để đổi lại — đó là bài toán kinh doanh.
Suite nhỏ đến vừa (dưới 200 test): migration nhanh hơn, thường dưới một tuần với một kỹ sư tập trung. Playwright codegen giúp tạo lại các test flow từ đầu, thường nhanh hơn port từng selector một.
Câu trả lời thực tế: nếu bạn có Cypress suite đang hoạt động tốt và không có điểm đau nào cụ thể, không có lý do cấp bách để migration. Nếu bạn đang scale lên (nhiều test hơn, nhiều CI phút hơn, nhiều thành viên hơn), lập luận về chi phí CI và parallel execution sẽ có sức nặng hơn. Và nếu bạn bắt đầu từ đầu, hãy chọn Playwright.
Nếu bạn cũng đang cân nhắc JavaScript runtime, xem so sánh Bun vs Node.js — Bun có test runner tích hợp sẵn, nhưng Node vẫn an toàn hơn cho production.
Kết luận
Playwright cho hầu hết dự án mới. Hiệu năng, parallel hóa miễn phí, hỗ trợ đa trình duyệt và quỹ đạo hệ sinh thái làm nó trở thành lựa chọn mặc định trong năm 2026. Cộng đồng đã bỏ phiếu — lượt tải về của Playwright không có dấu hiệu đảo chiều.
Chọn Cypress nếu:
- Bạn cần component testing ở mức production ngay hôm nay (Playwright CT vẫn còn experimental)
- Workflow debug của team phụ thuộc vào time-travel debugging local và chưa sẵn sàng thay đổi
- Bạn cần test trên Safari/WebKit nhưng Cypress CT là use case chính và có thể sống thiếu WebKit e2e
Tiếp tục dùng Cypress nếu bạn đã có suite lớn và nó đang hoạt động tốt. Migration chỉ vì muốn migration không phải lựa chọn đúng đắn.
Lưu ý
Tất cả số liệu benchmark đều từ môi trường test của chúng tôi (M3 MacBook Pro, Next.js staging app, tháng 5 năm 2026). Số liệu của bạn sẽ thay đổi theo độ phức tạp của app, điều kiện mạng và thông số máy CI. Các con số 31% và 33% đáng tin về mặt định hướng — hãy coi chúng là ước lượng bậc độ lớn, không phải benchmark chính xác.
Tình hình component testing của Playwright thay đổi nhanh. Hãy kiểm tra trạng thái experimental flag chính thức trước khi đưa ra quyết định dựa trên khoảng cách CT — nó có thể đã thay đổi khi bạn đọc bài này.
Chúng tôi có quan hệ affiliate với Cypress Cloud, Semaphore và Buildkite. Kết luận về công cụ nào thắng không bị ảnh hưởng bởi các quan hệ đó — nếu Cypress Cloud thắng trong so sánh chi phí CI, chúng tôi sẽ nói như vậy.