Selenium Grid คือสิ่งที่ช่วยทำให้สามารถ run ชุดการทดสอบแบบอัตโนมัติ
บน OS และ browser ต่าง ๆ แบบ distributed และ ขนาน (parallel) ได้ง่ายขึ้น
ซึ่งช่วยลดเวลาของการทดสอบระบบลงไปเยอะมาก ๆ

ดังนั้นมาดูการติดตั้งกันนิดหน่อย
ซึ่งบอกเลยว่า มันไม่ได้ยากเลย
แต่ที่เหลือยากหมดเลย !!

เริ่มต้นด้วยโครงสร้างของ Selenium Grid กันหน่อย

ประกอบไปด้วย 2 ส่วนคือ
1. Hub ทำหน้าที่รับ request การทดสอบ และ จัดการส่งไปยัง node ต่าง ๆ
2. Node ทำหน้าที่ทดสอบตาม request ต่าง ๆ ซึ่งแต่ละ node มีความสามารถแตกต่างกันไป ตามความต้องการ

แสดงดังรูป

ก่อนติดตั้งให้ทำการ Download Selenium Standalone Server มาก่อน
ซึ่งในตัวอย่างจะใช้ selenium-server-standalone-3.9.1.jar

ทำการติดตั้งกันดีกว่า

มาดูขั้นตอนการติดตั้งกัน
เริ่มจากทำการสร้าง Hub ก่อน ด้วยคำสั่ง

$java -jar selenium-server-standalone-3.9.1.jar -role hub

ต่อมาจึงทำการสร้างและ register node ไปยัง Hub ด้วยคำสั่ง
ในตัวอย่าง Hub และ Node อยู่ในเครื่องเดียวกันคือ localhost

$java -jar selenium-server-standalone-3.9.1.jar -role node -hub http://localhost:4444/grid/register

แต่สิ่งที่ห้ามลืมสำหรับ Node คือกำหนด Web Driver สำหรับ browser แต่ละชนิดด้วย
มิเช่นนั้น Node จะไม่สามารถทดสอบตามที่ต้องการได้
ยกตัวอย่างเช่น ให้ Node ทำการทดสอบผ่าน Google Chrome

java -jar selenium-server-standalone-3.9.1.jar -role node 
-hub http://localhost:4444/grid/register
-Dwebdriver.chrome.driver=<path to file chromedriver>

เมื่อทุกอย่างเรียบร้อย
สามารถตรวจสอบผ่าน Selenium Grid Web Console ได้ดังนี้

การติดตั้งในรูปแบบนี้นั้น ดูแลรักษาไม่ง่ายเลย
ทั้งการ download และติดตั้ง dependency ต่าง ๆ ของแต่ละ node
ทั้ง process ของ java ที่อาจใช้ memory จนเกิดปัญหา out of memory ได้
ทั้งการจัดการ node ต่าง ๆ แบบ manual เช่น restart node เมื่อเกิดปัญหา
ทั้งปัญหาในการดูแลรักษา
ทั้งปัญหาเรื่องของการขยายระบบ

ดังนั้นมาลองติดตั้งด้วย Docker กันบ้าง

โดยที่ Selenium ได้เตรียม Docker image ไว้ให้เรียบร้อย
ทั้ง Hub และ Node ชนิดต่าง ๆ เช่น Selenium Chrome และ Selenium Firefox
ทำให้ไม่ต้องไปติดตั้งสิ่งต่าง ๆ เองเลย
สามารถติดตั้งง่าย ๆ ดังนี้

// Start Hub
docker container run -d -p 4444:4444 --name selenium-hub selenium/hub

// Start Nodes
docker container run -d --link selenium-hub:hub selenium/node-chrome
docker container run -d --link selenium-hub:hub selenium/node-firefox

ดูง่ายขึ้นไหมละ ?
แต่ปัญหาเรื่องการเพิ่มและลด Node ยังยาก
รวมไปถึงการ start/stop/restart Node ก็ยังลำบาก

ดังนั้นมาลองใช้งาน Docker compose กันดีกว่า

โดยทั้ง hub และ node สามารถกำหนดใน services ของ Docker compose ได้เลย ดังนี้

จากนั้นทำการติดตั้งด้วยคำสั่ง

$docker-compose up

ถ้าต้องการ scale Node ที่ run Google Chrome ให้เป็น 4 node ทำได้ดังนี้

$docker-compose scale chrome=4

แสดงผลการทำงานดังนี้

เพียงเท่านี้ก็สามารถติดตั้งและใช้งาน Selenium Grid แบบง่าย ๆ ได้แล้ว
ดังนั้นอย่าลืมนำ Selenium Grid ไปใช้งานกันนะครับ

Reference Website
https://github.com/SeleniumHQ/selenium/wiki/Grid2
https://github.com/SeleniumHQ/docker-selenium/wiki/Getting-Started-with-Docker-Compose