หากเราได้เขียนเทส automate ด้วย selenium กันมาซักระยะแล้ว เราก็อาจจะเจอปัญหาว่า เราจำเป็นต้องทดสอบหลายๆ browser เช่น Chrome, ie, firefox, edge หรือ safari และอาจจะรวมถึง หลากหลาย platform ด้วย เช่นบางครั้งเราอาจจะเคยต้องเทสบน Safari แต่ทั้งบริษัทมีเครื่อง mac เครื่องเดียวเอง แล้วแบบนี้จะทำไงล่ะ แค่เบิกค่าโอทียังยาก แล้วจะให้ซื้อ mac นี่อย่าหวังเลย และนี่เองเป็นเหตุผลที่เรานำ Selenium Grid เข้ามาใช้งานกัน

Selenium Grid ช่วยแก้ปัญหาอะไรให้กับเรา

Selenium Grid เป็น tool ที่จะช่วยให้เราสามารถสั่งรันเทส web browser ผ่านเครื่องที่มาลงทะเบียนไว้กับเราได้ ทำให้เราสามารถกระจายเทสไปรันในเครื่องลูกข่ายต่างๆของเราได้ ที่นี้เราก็แค่ใช้เครื่อง mac เปรียบเสมือนเครื่องลูกข่ายเพื่อจะส่งคำสั่งไปรันบน Safari Browser ครับ คราวนี้ก็ไม่ต้องแย่งกันใช้เครื่องแล้ว

Selenium Grid ประกอบด้วย 2 Components หลักๆ

  1. Hub เปรียบเสมือนเครื่องแม่ของเครือข่าย Selenium Grid ของเรา ทำหน้าที่คอยแจกจ่ายเทสไปรันในเครื่องที่มาลงทะเบียน กับเครื่อง Hub ของเรา
  2. Node เครื่องที่เราจะไว้ใช้รันเทส ซึ่งจะต้องลงทะเบียนกับ Hub ของเรา และติดตั้ง web browser ที่เราต้องการจะใช้รันเทสไว้ด้วยครับ

มาลองติดตั้งกันดูครับ

โดยตัวอย่างนี้จะใช้วิธีรัน Hub และ Node บนเครื่องเดียวกันครับ

  1. ดาวน์โหลด Selenium Standalone Server ที่เป็น .jar file จากลิ้งค์นี้ครับดาว์นโหลด คลิก
  2. รัน Selenium Hub
    1. เปิด Command Prompt ขึ้นมาแล้วเปิดไปที่ folder ที่มี Selenium Standalone Server.jar วางอยู่
    2. รันคำสั่ง

      java -jar selenium-server-standalone-3.5.0.jar -role hub
    3. ถ้าถูกต้องก็จะมีข้อความประมาณนี้ครับ
      17:54:30.593 INFO - Nodes should register to http://192.168.1.232:4444/grid/register/
      17:54:30.593 INFO - Selenium Grid hub is up and running
  3. รัน Selenium Node
    1. เปิด Command Prompt อีกอันขึ้นมาแล้วเปิดไปที่ folder ที่มี Selenium Standalone Server.jar วางอยู่
    2. รันคำสั่ง
      java -jar selenium-server-standalone-3.5.0.jar -role node -hub http://localhost:4444/grid/register
    3. ลองเปิด http://localhost:4444/grid/console# ดูเพื่อเช็คว่ามี Node รันอยู่กี่เครื่อง

ถ้าใช้งานจริงที่เรามี เครื่อง Node หลายเครื่องก็ทำ Step 1 และ 3 บนเครื่อง Node ซ้ำครับ และเปลี่ยน http://localhost:4444/grid/register เป็น Ip ของเครื่อง Hub แทนครับ

แล้วใช้งานยังไงยากไหมเนี่ย

บอกเลยแก้นิดเดียวเองครับ ถ้าเราใช้ Robotframework ตรง step ที่เราทำการเปิด browser ก็ให้เราเรียกใช้ Remote test browser แทนครับ

โค้ดเดิม

Open Browser	https://www.google.co.th	googlechrome

โด้ดที่รันผ่าน selenium grid

Open Browser	https://www.google.co.th	googlechrome	None	http://127.0.0.1:4444/wd/hub

บางครั้งทุกอย่างก็ไม่ได้พร้อมไปซะหมด แต่เราก็มีหน้าที่หาวิธีใช้สิ่งที่เรามี ให้เกิดผลลัพธ์ดีที่สุด ดีกว่าเสียเวลาบ่นถึงสิ่งที่เราไม่มี

References: