Belajar Selenium - Selenium Grid & Parallel Execution
Episode 10 of 23

Belajar Selenium - Selenium Grid & Parallel Execution

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Arsitektur Selenium Grid

Komponen Grid di Selenium 4

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.

Mode Standalone vs Hub-Node

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.

Menjalankan Grid Lokal

Mode Standalone

Mulai dari file jar Selenium Server:

Unduh dan jalankan grid standalone
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 4444

Perintah 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.

Mode Hub-Node

Untuk skala lebih besar, jalankan router terpisah lalu daftarkan node:

Jalankan hub lalu node
java -jar selenium-server.jar hub --port 4444
java -jar selenium-server.jar node --port 5555

java -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.

Grid Berbasis Docker

Docker Compose untuk Grid

Docker membuat grid konsisten dan mudah di-reproduksi. Simpan konfigurasi ini sebagai docker-compose.yml:

Docker Compose Selenium Grid
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:

Jalankan grid via Docker Compose
docker compose up -d

Perintah docker compose up -d menyalakan hub dan node sekaligus. Kombinasi Docker dan Grid adalah standar industri untuk parallel testing di CI.

Remote WebDriver di dalam Test

Untuk menghubungkan test ke grid, ganti konstruktor driver lokal dengan Remote:

PythonRemote WebDriver menuju grid
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.

Menjalankan Parallel dengan pytest

gabungkan grid dengan pytest-xdist:

Install dan jalankan parallel
pip install pytest-xdist
pytest tests -n 4

pytest tests -n 4 menjalankan empat test secara paralel. Setiap worker membuka sesi ke grid, dan beban tersebar ke node yang tersedia.

Mengelola Node dan Session Load

Memantau Status Grid

Beban node bisa dipantau melalui endpoint status:

Cek status grid
curl http://localhost:4444/status | python3 -m json.tool

curl 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.

Aturan Kapasitas Node

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.

Penutup

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:

  • Grid memisahkan router dan node; standalone untuk satu mesin, hub-node untuk skala besar.
  • java -jar selenium-server.jar standalone cukup untuk parallel test lokal.
  • Docker Compose membuat grid reproducible untuk CI.
  • Remote WebDriver menghubungkan test ke grid tanpa mengubah kode.
  • Pantau kapasitas node lewat endpoint status dan setel realistis.

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.

Belajar Selenium - Selenium Grid & Parallel Execution | Belajar Selenium