1. Bối cảnh: reproducibility là nền móng của kiểm thử tự động
Một bộ kiểm thử tự động chỉ có giá trị khi nó tất định: cùng code, cùng dữ liệu thì phải cho cùng kết quả. Nhưng trình duyệt lại là một biến số ngầm. Chrome bản người dùng tự cập nhật nền âm thầm, có thể đổi hành vi render hay layout giữa hai lần chạy CI, khiến bài test 'hôm qua xanh hôm nay đỏ' mà code không đổi. Đây là loại flaky khó chịu nhất vì nguyên nhân nằm ngoài repo của bạn. Playwright 1.57 giải quyết gốc rễ bằng cách chuyển sang các bản Chrome for Testing.
Bài viết này giải thích Chrome for Testing là gì, vì sao nó ổn định hơn, và cách tổ chức cross-browser đúng chuẩn: projects cho chromium/firefox/webkit, mobile emulation, cấu hình channel, và những hệ quả trong CI. Chúng ta xem qua một góc nhìn SaaS: một ứng dụng web nhiều khách hàng cần bằng chứng rằng nó chạy đúng trên mọi engine và mọi kích thước màn hình mà khách dùng, không phải chỉ trên máy của lập trình viên.
2. Chrome for Testing là gì?
Chrome for Testing (CfT) là một dòng bản Chrome do Google phát hành riêng cho mục đích tự động hóa. Khác với Chrome người dùng, CfT không có cơ chế tự cập nhật, được đánh phiên bản rõ ràng và có thể tải về theo đúng số hiệu qua một điểm phân phối ổn định (JSON endpoints liệt kê mọi phiên bản kèm ChromeDriver tương ứng). Nói ngắn gọn: CfT tồn tại để bạn ghim (pin) một phiên bản và tin rằng nó không đổi dưới chân mình. Playwright 1.57 dùng các bản CfT cho cả chế độ headed và headless.
Trước đây, Playwright dùng một bản build Chromium nội bộ. CfT gần với Chrome thật hơn về mặt tính năng thương mại (ví dụ các API media, codec), nên bài test phản ánh sát hành vi mà người dùng cuối gặp, đồng thời vẫn giữ được tính ghim phiên bản. Đây là sự cân bằng giữa 'giống Chrome thật' và 'không bị trôi' — điều mà cả Chromium thuần lẫn Chrome người dùng đều không đạt được trọn vẹn.
3. Vì sao ghim phiên bản lại chống flaky
Flaky do trình duyệt thường đến từ những thay đổi tinh vi: một pixel khác trong render font làm hỏng so sánh ảnh, một thay đổi timing trong scheduler làm đổi thứ tự sự kiện, hay một API bị đánh dấu deprecated. Khi trình duyệt tự cập nhật, những thay đổi này ập tới bất ngờ. Ghim phiên bản biến trình duyệt từ biến số thành hằng số: bạn cập nhật nó một cách có chủ đích, qua một commit, và chạy lại toàn bộ suite để xác nhận trước khi chấp nhận. Việc nâng cấp trở thành một sự kiện được kiểm soát, không phải một tai nạn.
# Cài đúng phiên bản trình duyệt Playwright quản lý (đã ghim theo release).
npx playwright install chromium firefox webkit
# Xem phiên bản chính xác đang dùng -> ghi vào tài liệu/CI để tái lập.
npx playwright --version
# Trong CI, cache theo đúng số hiệu để mọi runner dùng cùng một binary.
# key: playwright-${{ hashFiles('package-lock.json') }}4. Ba engine: chromium, firefox, webkit
Cross-browser thật sự nghĩa là kiểm trên ba engine render khác nhau, không phải ba thương hiệu. chromium (dùng CfT) đại diện Chrome và Edge; firefox dùng engine Gecko; webkit dùng engine của Safari. Vì Safari trên iOS bắt buộc dùng WebKit, project webkit là cách duy nhất trên nhiều nền tảng để bắt lỗi đặc thù Safari mà không cần máy Mac thật cho mọi lập trình viên. Ba engine phủ gần như toàn bộ thị phần trình duyệt của một sản phẩm SaaS phổ thông.
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!