CYBERSOFT
Đăng nhập

Selenium Grid 4 và chạy song song: Docker, TestNG, pytest-xdist, CI

Chuyên công nghệSeleniumCI/CDThực tế
🗓 1 tháng trước19 phút đọc·👁 1,620 lượt xem👤 316 người đọc

Kiến trúc Grid 4 hub/node, dựng bằng Docker, chạy cross-browser song song với TestNG ThreadLocal và pytest-xdist, và tích hợp CI để cắt thời gian bộ test từ hàng chục phút xuống vài phút.

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.

Selenium Grid 4 — Hub & Node phân tán Test runner TestNG · pytest-xdist RemoteWebDriver HUB / Router Distributor · Session Queue Session Map · Event Bus khớp capabilities → node Node 1 · Chrome max 5 session Node 2 · Firefox max 3 session Node 3 · Edge Docker container Test gửi capabilities lên Hub → Distributor xếp phiên vào Node phù hợp → chạy song song, cross-browser
Grid 4: Hub/Router phân phối phiên tới các Node
Test không đổi khi chuyển sang Grid: bạn chỉ thay ChromeDriver cục bộ bằng RemoteWebDriver trỏ tới URL của hub. Toàn bộ locator, wait, POM giữ nguyên.

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.

yaml
# 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=2
bash
docker 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
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 24% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!