1. Vì sao cần chạy song song và Grid
Một bộ test end-to-end đầy đủ cho sàn thương mại điện tử có thể lên tới hàng trăm kịch bản: đăng nhập, tìm kiếm, giỏ hàng, thanh toán, khuyến mãi, hoàn tiền, trên nhiều trình duyệt. Chạy tuần tự trên một máy có thể mất bốn mươi phút tới cả tiếng, quá lâu để gắn vào mỗi pull request. Chạy song song và phân tán qua Selenium Grid giải quyết đúng bài toán này: nhiều test chạy đồng thời trên nhiều node, mỗi node có thể là một trình duyệt khác nhau, giúp cắt thời gian tổng xuống còn vài phút. Bài này đi sâu vào kiến trúc Grid 4, cách dựng bằng Docker, cách viết test song song với TestNG và pytest-xdist, và cách tích hợp toàn bộ vào CI.
- Cắt thời gian bộ test từ hàng chục phút xuống vài phút
- Cross-browser thật: Chrome, Firefox, Edge cùng lúc
- Tách máy chạy test khỏi máy CI để mở rộng độc lập
- Nền tảng để scale kiểm thử theo quy mô doanh nghiệp
2. Kiến trúc Selenium Grid 4
Grid 4 được viết lại hoàn toàn so với Grid 3. Ở chế độ phân tán đầy đủ, nó gồm nhiều thành phần tách rời: Router nhận mọi request từ ngoài và định tuyến; Distributor chịu trách nhiệm chọn node phù hợp và tạo phiên; Session Queue giữ hàng đợi các yêu cầu phiên chưa được xử lý; Session Map ghi nhớ phiên nào đang chạy trên node nào; và Event Bus để các thành phần giao tiếp bất đồng bộ. Ở quy mô nhỏ bạn không cần tách rời, mà chạy chế độ standalone gộp tất cả vào một tiến trình, hoặc chế độ hub-and-node cổ điển với một hub trung tâm và nhiều node đăng ký lên. Node là nơi thật sự chạy trình duyệt; mỗi node khai báo các slot ứng với capabilities như trình duyệt và số phiên tối đa.
3. Dựng Grid bằng Docker Compose
Cách nhanh và sạch nhất để dựng Grid là dùng bộ ảnh docker-selenium chính thức. Bạn chạy một service hub và vài service node cho từng trình duyệt, mỗi node tự đăng ký lên hub qua Event Bus. Docker cô lập môi trường nên kết quả nhất quán giữa máy local và CI, đồng thời dễ mở rộng bằng cách tăng số bản sao node. Biến SE_NODE_MAX_SESSIONS kiểm soát số phiên chạy song song trên mỗi node; đặt nó cân bằng với số CPU và RAM để tránh trình duyệt bị đói tài nguyên gây flaky. Cổng 4444 là nơi hub lắng nghe, và bạn có thể mở giao diện Grid tại /ui để xem các node và phiên đang chạy theo thời gian thực.
# docker-compose.yml — Grid 4 hub + node Chrome/Firefox
services:
selenium-hub:
image: selenium/hub:4.25
ports: ["4442:4442", "4443:4443", "4444:4444"]
chrome:
image: selenium/node-chrome:4.25
depends_on: [selenium-hub]
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_SESSIONS=4
shm_size: 2g # tránh Chrome crash vì thiếu /dev/shm
firefox:
image: selenium/node-firefox:4.25
depends_on: [selenium-hub]
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_SESSIONS=2docker compose up -d --scale chrome=3 # 3 node Chrome chạy song song
# Mở http://localhost:4444/ui để xem trạng thái Grid
docker compose logs -f selenium-hub
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!