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 ก่อน ด้วยคำสั่ง
[code]
$java -jar selenium-server-standalone-3.9.1.jar -role hub
[/code]
ต่อมาจึงทำการสร้างและ register node ไปยัง Hub ด้วยคำสั่ง
ในตัวอย่าง Hub และ Node อยู่ในเครื่องเดียวกันคือ localhost
[code]
$java -jar selenium-server-standalone-3.9.1.jar -role node -hub http://localhost:4444/grid/register
[/code]
แต่สิ่งที่ห้ามลืมสำหรับ Node คือกำหนด Web Driver สำหรับ browser แต่ละชนิดด้วย
มิเช่นนั้น Node จะไม่สามารถทดสอบตามที่ต้องการได้
ยกตัวอย่างเช่น ให้ Node ทำการทดสอบผ่าน Google Chrome
[code]
java -jar selenium-server-standalone-3.9.1.jar -role node
-hub http://localhost:4444/grid/register
-Dwebdriver.chrome.driver=<path to file chromedriver>
[/code]
เมื่อทุกอย่างเรียบร้อย
สามารถตรวจสอบผ่าน 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
ทำให้ไม่ต้องไปติดตั้งสิ่งต่าง ๆ เองเลย
สามารถติดตั้งง่าย ๆ ดังนี้
[code]
// 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
[/code]
ดูง่ายขึ้นไหมละ ?
แต่ปัญหาเรื่องการเพิ่มและลด Node ยังยาก
รวมไปถึงการ start/stop/restart Node ก็ยังลำบาก
ดังนั้นมาลองใช้งาน Docker compose กันดีกว่า
โดยทั้ง hub และ node สามารถกำหนดใน services ของ Docker compose ได้เลย ดังนี้
[gist id="0aa82fadbf8f70c157f2ede8e1235e9c" file="docker-compose.yml"]
จากนั้นทำการติดตั้งด้วยคำสั่ง
[code]
$docker-compose up
[/code]
ถ้าต้องการ scale Node ที่ run Google Chrome ให้เป็น 4 node ทำได้ดังนี้
[code]
$docker-compose scale chrome=4
[/code]
แสดงผลการทำงานดังนี้
เพียงเท่านี้ก็สามารถติดตั้งและใช้งาน 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