Sự ra đời của quy trình tự động hoá thử nghiệm
Hãy cùng nhìn lại những năm 1990 khi trình duyệt web ra đời. Tính năng tự động hoá thử nghiệm mới trở thành hiện thực cho đến những năm 2000, với sự xuất hiện của các dự án Selenium và WebDriver nhằm giải quyết những thách thức kiểm thử trên nhiều trình duyệt và nhiều thiết bị.
Hai dự án này đã hợp tác vào năm 2011 với tên gọi Selenium WebDriver và trở thành tiêu chuẩn W3C vào năm 2018. Chúng tôi thường gọi trình điều khiển này là WebDriver hoặc WebDriver “Classic”.
Việc thử nghiệm tự động hoá trước WebDriver “Classic” là khá phức tạp. Khả năng tự động hoá việc kiểm thử trình duyệt đã giúp cải thiện đáng kể chất lượng cuộc sống của nhà phát triển và người kiểm thử.
Sự gia tăng của JavaScript
Trong quá trình phát triển web phải dựa vào JavaScript nhiều hơn, các giải pháp tự động hoá mới như WebdriverIO, Appium, Nightwatch, Protractor (không dùng nữa), TestCypress, Puppeteer và Playwright đã xuất hiện.
Các phương pháp tự động hoá
Nói rộng ra, những công cụ này có thể được tổ chức thành hai nhóm chính dựa trên cách chúng tự động hoá trình duyệt:
- Cấp cao: Các công cụ thực thi JavaScript trong trình duyệt. Ví dụ: Cypress và TestCafe tận dụng API web và Node.js để chạy kiểm thử trực tiếp trong trình duyệt. Sự thật thú vị là phiên bản đầu tiên của Selenium cũng sử dụng phương pháp tương tự.
- Cấp thấp: Công cụ thực thi lệnh từ xa bên ngoài trình duyệt. Khi các công cụ yêu cầu kiểm soát nhiều hơn, chẳng hạn như mở nhiều thẻ hoặc mô phỏng chế độ thiết bị, đó là khi các công cụ cần thực thi lệnh từ xa để điều khiển trình duyệt thông qua các giao thức. Hai giao thức tự động hoá chính là WebDriver “Classic” và Giao thức Chrome Công cụ cho nhà phát triển (CDP).
Trong phần tiếp theo, chúng ta sẽ tìm hiểu về hai giao thức này để hiểu rõ những điểm mạnh và hạn chế của chúng.
WebDriver "Cổ điển" so với Giao thức Công cụ của Chrome cho nhà phát triển (CDP)
WebDriver "Classic" là một tiêu chuẩn web được tất cả các trình duyệt chính hỗ trợ. Tập lệnh tự động hoá sẽ đưa ra lệnh qua các yêu cầu HTTP tới máy chủ trình điều khiển, sau đó máy chủ này sẽ giao tiếp với trình duyệt thông qua các giao thức nội bộ dành riêng cho trình duyệt.
Mặc dù có khả năng hỗ trợ tuyệt vời cho nhiều trình duyệt và các API của API này được thiết kế để thử nghiệm, nhưng phiên bản này có thể chậm và không hỗ trợ một số chế độ kiểm soát cấp thấp.
Ví dụ: Giả sử bạn có một tập lệnh kiểm thử nhấp vào một phần tử await coffee.click();
. Lệnh này được chuyển thành một loạt các yêu cầu HTTP.
# WebDriver: Click on a coffee element
curl -X POST http://127.0.0.1:4444/session/:element_id/element/click
-H 'Content-Type: application/json'
-d '{}'
Mặt khác, Giao thức Công cụ của Chrome cho nhà phát triển (CDP) ban đầu được thiết kế cho Công cụ của Chrome cho nhà phát triển và gỡ lỗi, nhưng sau đó Puppeteer đã áp dụng để tự động hoá. CDP giao tiếp trực tiếp với các trình duyệt dựa trên Chromium thông qua kết nối WebSocket, mang lại hiệu suất nhanh hơn và khả năng kiểm soát cấp thấp.
Tuy nhiên, công cụ này chỉ hoạt động với các trình duyệt dựa trên Chromium và không phải là chuẩn mở. Ngoài ra, API CDP tương đối phức tạp. Trong một số trường hợp, việc làm việc với CDP không thuận tiện cho việc sử dụng. Ví dụ: bạn sẽ mất nhiều công sức khi làm việc với các iframe ngoài quy trình.
Ví dụ: thao tác nhấp vào một phần tử await coffee.click();
sẽ được chuyển đổi thành một loạt lệnh CDP.
// CDP: Click on a coffee element
// Mouse pressed
{
command: 'Input.dispatchMouseEvent',
parameters: {
type: 'mousePressed', x: 10.34, y: 27.1, clickCount: 1 }
}
// Mouse released
{
command: 'Input.dispatchMouseEvent',
parameters: {
type: 'mouseReleased', x: 10.34, y: 27.1, clickCount: 1 }
}
Các chế độ kiểm soát cấp thấp là gì?
Những ngày trong những ngày mà WebDriver “Classic” được phát triển, chúng ta không cần kiểm soát cấp thấp. Nhưng thời đại đã thay đổi, web giờ đây có nhiều khả năng hơn nhiều và việc thử nghiệm ngày nay đòi hỏi những hành động chi tiết hơn.
Vì CDP được thiết kế để đáp ứng tất cả các nhu cầu gỡ lỗi, nên CDP hỗ trợ nhiều biện pháp kiểm soát cấp thấp hơn so với WebDriver “Classic”. Thư viện này có thể xử lý các tính năng như:
- Đang ghi lại thông báo trên bảng điều khiển
- Chặn yêu cầu mạng
- Mô phỏng chế độ thiết bị
- Mô phỏng vị trí địa lý
- Và nhiều tính năng khác!
Những tính năng này không thực hiện được trong WebDriver “Classic” do kiến trúc khác nhau — WebDriver “Classic” dựa trên HTTP, khiến việc đăng ký và nghe các sự kiện trên trình duyệt trở nên khó khăn. Mặt khác, CDP dựa trên WebSocket và hỗ trợ nhắn tin hai chiều theo mặc định.
Tính năng tiếp theo: WebDriver BiDi
Dưới đây là bản tóm tắt những điểm mạnh của cả WebDriver “Classic” và CDP:
WebDriver “Cũ” | Giao thức Công cụ của Chrome cho nhà phát triển (CDP) |
---|---|
Hỗ trợ tốt nhất trên nhiều trình duyệt | Nhắn tin hai chiều nhanh chóng |
Tiêu chuẩn W3C | Cung cấp quyền kiểm soát cấp thấp |
Dành cho mục đích thử nghiệm |
WebDriver BiDi nhằm mục đích kết hợp những khía cạnh tốt nhất của WebDriver "Classic" và CDP. Đây là giao thức tự động hóa trình duyệt chuẩn mới hiện đang được phát triển.
Tìm hiểu thêm về dự án WebDriver BiDi—cách dự án hoạt động, tầm nhìn và quy trình chuẩn hóa.