Episode ini membahas konfigurasi Selenium Grid lokal, menjalankan test paralel di banyak browser, memakai Docker-based grid dan remote WebDriver, serta mengelola node dan session load agar grid stabil di bawah beban kerja.

Suite test yang berjalan satu per satu di satu mesin butuh waktu berjam-jam. Episode 10 memperkenalkan Selenium Grid — solusi menjalankan test secara paralel di banyak browser, bahkan di banyak mesin. Setelah episode ini, kalian bisa memangkas durasi suite secara drastis dan menguji beberapa browser sekaligus.
Grid memperkenalkan dua konsep: hub/router yang menerima permintaan sesi dan node yang menjalankan browser. Selenium 4 merombak Grid dengan arsitektur baru yang lebih modular. Kalian akan melihat cara menjalankannya secara lokal, dengan Docker, dan bagaimana mengelola beban sesi.
Selenium 4 Grid terdiri dari beberapa komponen yang terpisah: router sebagai pintu masuk, distributor yang menugaskan sesi ke node, session map yang melacak sesi aktif, dan node yang benar-benar menjalankan browser. Berita baiknya, untuk penggunaan umum kalian tidak perlu memahami detail semua komponen — cukup tahu bahwa semua ini bisa dijalankan dengan satu perintah.
Grid punya dua mode populer: standalone untuk satu mesin (paling sederhana) dan hub-node untuk skala lebih besar. Standalone cukup untuk parallel test di mesin developer; hub-node untuk tim yang memakai banyak node browser.
Mulai dari file jar Selenium Server:
curl -sSL https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.29.0/selenium-server-4.29.0.jar -o selenium-server.jar
java -jar selenium-server.jar standalone --port 4444Perintah java -jar selenium-server.jar standalone memulai router, distributor, dan node dalam satu proses di port 4444. Untuk memakai endpoint, pastikan curl http://localhost:4444/status merespons dengan JSON status grid.
Untuk skala lebih besar, jalankan router terpisah lalu daftarkan node:
java -jar selenium-server.jar hub --port 4444
java -jar selenium-server.jar node --port 5555java -jar selenium-server.jar hub memulai router di 4444, dan node --port 5555 mendaftarkan satu node yang menjalankan browser. Node bisa ditambahkan sebanyak yang dibutuhkan, di mesin yang sama atau berbeda.
Docker membuat grid konsisten dan mudah di-reproduksi. Simpan konfigurasi ini sebagai docker-compose.yml:
services:
chrome:
image: selenium/node-chrome:latest
shm_size: 2gb
depends_on:
- hub
environment:
- SE_EVENT_BUS_HOST=hub
hub:
image: selenium/hub:latest
ports:
- "4444:4444"docker-compose.yml di atas mendefinisikan image selenium/hub:latest sebagai pusat dan selenium/node-chrome:latest sebagai node Chrome dengan shared memory 2GB. Jalankan dengan:
docker compose up -dPerintah docker compose up -d menyalakan hub dan node sekaligus. Kombinasi Docker dan Grid adalah standar industri untuk parallel testing di CI.
Untuk menghubungkan test ke grid, ganti konstruktor driver lokal dengan Remote:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opsi = Options()
driver = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub",
options=opsi,
)
driver.get("https://example.com")
print(driver.title)
driver.quit()webdriver.Remote(command_executor="http://localhost:4444/wd/hub", options=opsi) meminta sesi ke grid. Grid memilih node yang punya kapasitas, lalu test berjalan seperti biasa — kode kalian tidak berubah untuk parallel.
gabungkan grid dengan pytest-xdist:
pip install pytest-xdist
pytest tests -n 4pytest tests -n 4 menjalankan empat test secara paralel. Setiap worker membuka sesi ke grid, dan beban tersebar ke node yang tersedia.
Beban node bisa dipantau melalui endpoint status:
curl http://localhost:4444/status | python3 -m json.toolcurl http://localhost:4444/status menampilkan jumlah node, browser yang didukung, dan sesi aktif. Biasakan memeriksa endpoint ini saat grid mulai lambat — biasanya penyebabnya node kehabisan kapasitas.
Kapasitas node harus disetel realistis: satu node Chrome dengan RAM 4GB nyaman menangani dua hingga tiga sesi bersamaan. Terlalu banyak sesi per node justru membuat test lambat dan flaky. Mulailah kecil, amati status, lalu naikkan kapasitas secara bertahap.
Warning
Jangan menjalankan 50 sesi di satu node kecil. Test paralel bukan tentang menumpuk sebanyak mungkin, tetapi tentang mencocokkan kapasitas node dengan beban agar masing-masing sesi tetap cepat.
Episode 10 membuka dimensi baru eksekusi test: grid lokal dalam mode standalone dan hub-node, grid berbasis Docker yang konsisten dan mudah direplikasi, koneksi test lewat webdriver.Remote, dan pengelolaan kapasitas node agar grid tetap stabil.
Inti yang harus dibawa pulang:
java -jar selenium-server.jar standalone cukup untuk parallel test lokal.Di episode 11 selanjutnya kita akan membahas integrasi CI/CD — menjalankan test Selenium di GitHub Actions, GitLab CI, Jenkins, dan Azure Pipelines, eksekusi headless di pipeline, test reporting, artifacts, dan failure feedback, serta strategi menangani flaky test di CI.