Hướng dẫn cài đặt Selenium Grid 3 trên Windows

Hướng dẫn cài đặt Selenium Grid 3 trên Windows

Xem nhanh

Selenium Grid 3 là một công cụ khá nổi tiếng của Selenium, được dùng để triển khai cho nhiều dự án Automation Test khác nhau. Trong bài này, chúng ta cùng tìm hiểu chi tiết về cách cài đặt Selenium Grid 3 trên windows, cũng như những lưu ý khi cấu hình nó.

Bài hướng dẫn này sẽ sử dụng Selenium Grid 3 và được triển khai trên nhiều máy Windows khác nhau, mỗi máy sẽ được cài đặt một trình duyệt phổ biến như Chrome và Firefox.

selenium grid 1

Hình 1.1: Hệ thống tổng thể Selenium Grid 3

Đặc tả hệ thống Selenium Grid

Đặc tả của hệ thống Selenium Grid chúng ta sẽ triển khai như sau:

  • 3 máy Windows 10 Enterprise và OS Build là 19041.867

  • 3 máy này đều chung 1 network với IP address:

    • Windows 01: 192.168.12.1
    • Windows 02: 192.168.12.2
    • Windows 03: 192.168.12.3

Hình bên dưới là hệ thống Selenium Grid chúng ta muốn triển khai:

grid system

Hình 1.2: Hình mô tả hệ thống Selenium Grid chúng ta sẽ triển khai

Theo như cấu hình trên, ta có danh sách Hub và các Nodes như sau:

Tên IP Address
Hub 192.168.12.1
Chrome Node 192.168.12.2
Firefox Node 192.168.12.3

Setup hệ thống Selenium Grid

Sau khi có được đặc tả về Hub và Nodes của hệ thống Selenium Grid, ở phần này chúng ta sẽ đi qua chi tiết các bước để triển khai hệ thống này.

Ở tất cả các máy (bao gồm cả Selenium Hub và Selenium Nodes) chúng ta tiến hành 2 việc sau:

  1. Download Selenium Standalone Server vào trong folder bất kỳ, trong bài này chúng ta đặt ở folder C:/GRID
  2. Download và install JDK (Java SE Development Kit) nếu chưa cài đặt

download selenium grid

Hình 1.3: Download Selenium Server (Grid) hay còn gọi là Selenium Standalone Server

download selenium standalone

Hình 1.4: Download Selenium Standalone Server

Tiếp theo, chúng ta sẽ tiến hành triển khai Selenium Hub, sau đó là các Selenium Nodes.

Khởi tạo Selenium Hub

Bước 1. Truy cập vào máy 192.168.12.1 sử dụng Remote Desktop để truy cập vào(đã chỉ định làm Selenium Hub)

Bước 2. Mở Command Prompt của Windows, cd tới folder C:/GRID, và run command sau để tiến hành khởi tạo selenium Hub

java -jar C:/GRID/selenium-server-standalone-3.141.59.jar -role hub

start hub

Hình 1.5: Mô tả dòng lệnh và kết quả khởi chạy thành công Selenium Hub

[Mẹo] Tạo file có thể thực thi .bat cho Selenium Hub

Để có thể thực thi câu lệnh khởi tạo selenium hub một cách nhanh chóng và tiện lợi, ở folder C:/GRID chúng ta có thể tạo tập tin có thể thực thi với phần mở rộng .bat bằng một Text Editor bất kỳ, ví dụ: selenium_hub_register.bat như Hình 1.6 bên dưới. Và khi cần khởi tạo chúng ta chỉ cần double click vào nó để khởi chạy thay vì gõ câu lệnh thông qua cmd windows.

start hub bat

Hình 1.6: Đóng gói câu lệnh khởi tạo Selenium Hub thành tệp có thể thực thi

Với cách này, các bạn sẽ không cần phải nhớ câu lệnh cho những lần chạy sau. Và ngoài ra, bạn có thể sử dụng mẹo này khi khởi chạy Chrome Node và Firefox Node.

Sau khi bạn đã tạo thành công file selenium_hub_register.bat, double click vào file để khởi tạo Selenium Hub

start hub bat result

Hình 1.7: Kết quả khởi tạo Selenium Hub thông qua tệp có thể thực thi

Bước 3. Xác thực selenium HUB khởi tạo thành công

Để xác định selenium Hub đã được khởi tạo thành công ngoài kết quả trả về như Hình 1.6, Hình 1.7, chúng ta còn có thể kiểm tra thông qua browser với url: http://192.168.1.1:4444/grid/console

view grid console

Hình 1.8: Kết quả trả về khi dùng browser kiểm tra selenium Hub

Lưu ý: Port mặc định của Selenium Grid là 4444

→ Tới bước này có nghĩa là bạn đã khởi tạo Hub thành công, và chúng ta sẽ tiếp tục triển khai các Nodes

Khởi tạo Selenium Nodes

Selenium Chrome Node (192.168.1.2)

Bước 1. Cài đặt Chrome browser

  • Truy cập vào máy 192.168.1.2
  • Tạo C:/GRID folder
  • Download và install Google Chrome browser

Bước 2. Xác định major version của Google Chrome đã được install ở Bước 1

Mở Google Chrome, truy cập chrome://settings/help, lúc này thông tin major version của Google Chrome sẽ hiển thị như Hình 1.9 => major version của Chrome sẽ là: 89

chrome version

Hình 1.9: Kết quả trả về khi dùng browser kiểm tra major version của Chrome

Hầu hết các Browser driver chỉ hỗ trợ cho 1 số version nhất định của browser. Do đó, việc xác định Chrome version sẽ giúp chúng ta sử dụng chính xác Browser driver.

Bước 3. Download chrome driver tương ứng với major version Chrome đã xác định ở Bước 2

Truy cập vào website https://chromedriver.chromium.org/downloads, dựa vào Chrome version đã lấy được ở Bước 2 là 89 và hệ điều hành Windows, chúng ta sẽ download Chrome Driver version tương ứng như Hình 2.0 và Hình 2.1 bên dưới

chrome driver 01

Hình 2.0: Lựa chọn Chrome driver tương ứng với major version Chrome

chrome driver 02

Hình 2.1: Lựa chọn Chrome driver tương ứng với OS

Sau khi download thành công file chromedriver_win32.zip bạn hãy extract file zip vào folder C:/GRID. Lúc này trong C:/GRID sẽ có file chromedriver.exe

Bước 4. Cấu hình Selenium Chrome Node

Tạo file json chứa các tham số khởi tạo cho Selenium chrome node

Ở folder C:/GRID, chúng ta dùng editor bất kỳ tạo để tạo ra file nodeconfig_chrome.json , file này sẽ chứa các thông tin cấu hình cho Selenium Chrome Node.

File nodeconfig_chrome.json bao gồm thông tin cấu hình như sau:

{
  "capabilities": [
    {
      "browserName": "chrome",
      "maxInstances": 10,
	  "seleniumProtocol": "WebDriver",
      "platform": "WIN10"
    }
  ],
    "url": "http://192.168.1.2:5555/wd/hub",
    "port": "5555",
    "host": "192.168.1.2",
    "cleanUpCycle": 2000,
    "timeout": 30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "register": true,
    "registerCycle": 5000
}

Lưu ý: IP Address của 2 tham số urlhost chính là IP Address của máy Node. Trong ví dụ trên, IP Address của máy Chrome Node là 192.168.1.2

Rất nhiều thông tin có thể chúng ta chưa hiểu khi mới đọc qua. Không sao cả, hiện tại chúng ta chú ý tham số maxInstances, giá trị của tham số này là 10, điều này có nghĩa là số lượng Chrome instances tối đa có thể khởi chạy cùng 1 lúc là 10 instances. Dễ hiểu hơn, đó chính là cửa sổ Chrome tối đa có thể được mở cùng lúc trên Chrome Node này là 10.

chrome instances

Hình 2.2: Số lượng chrome browser của selenium Chrome node đang chạy

Thực hiện lệnh để khởi chạy và đăng ký Selenium Chrome node

Mở Command Prompt của Windows, cd vào C:/GRID và thực hiện lệnh để khởi chạy Selenium Chrome node

java -Dwebdriver.chrome.driver="C:/GRID/chromedriver.exe" -jar C:/GRID/selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.1:4444/grid/register -nodeConfig "C:/GRID/nodeconfig_chrome.json"

Trong câu lệnh trên, bạn hãy chú ý một số tham số quan trọng như:

-Dwebdriver.chrome.driver="C:/GRID/chromedriver.exe" sẽ chỉ tới Chrome Driver

-hub http://192.168.1.1:4444/grid/register Đây là đường dẫn của máy Selenium Hub, với port mặc định là 4444

-nodeConfig "C:/GRID/nodeconfig_chrome.json" chỉ tới file nodeconfig_chrome.json mà chúng ta đã khởi tạo ở trên

Nếu kết nối thành công, bạn sẽ nhận được message là “The node is registered to the hub and ready to use“

chrome node bat result

Hình 2.4: Kết quả thực thi file thành công và log message trả về

Để kiểm Selenium Chrome Node liên kết với Selenium Hub thành công hay chưa, chúng ta truy cập lại đường dẫn http://192.168.1.1:4444/grid/console (Selenium hub machine)

view grid console 02

Hình 2.5: Selenium Grid sau khi đăng ký selenium chrome node thành công

→ Với kết quả như trên, bạn đã khởi tạo và liên kết thành công Chrome Node

Selenium Firefox Node (192.168.1.3)

Đối với Selenium Firefox Node, chúng ta tiến hành một số bước tương tự như Selenium Chrome Node. Cụ thể như sau

Bước 1. Download và install Firefox browser

Truy cập vào máy 192.168.1.3 và cài đặt Firefox browser

Bước 2. Download version mới nhất của Firefox Driver (tên gọi khác là geckco driver)

download gecko

Hình 2.6: Download firefox driver tương ứng với Firefox installed

Sau đó extract file geckodriver-v0.29.0-win64.zip vào C:/GRID và lúc này file geckodriver.exe sẽ tạo ra ở C:/GRID

Bước 3. Cấu hình Selenium Firefox Node thông qua Json file

Tại folder C:/GRID, tạo file nodeconfig_firefox.json, với nội dung như sau:

{
    "capabilities": [
    {
        "browserName": "firefox",
        "maxInstances": 10,
        "seleniumProtocol": "WebDriver",
        "platform": "WIN10"
    }
],
    "url": "http://192.168.1.3:5555/wd/hub",
    "port": "5555",
    "host": "192.168.1.3",
    "cleanUpCycle": 2000,
    "timeout": 30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "register": true,
    "registerCycle": 5000
}

Lưu ý: IP Address của 2 tham số urlhost chính là IP Address của máy Node. Trong ví dụ trên, IP Address của máy Firefox Node là 192.168.1.3

Bước 4. Khởi chạy Selenium Firefox node để đăng ký vào Selenium Hub

Mở Command Prompt, cd vào C:/GRID và thực hiện lệnh để khởi chạy Selenium Firefox node

java -Dwebdriver.gecko.driver="C:/GRID/geckodriver.exe" -jar C:/GRID/selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.1:4444/grid/register -nodeConfig "C:/GRID/nodeconfig_firefox.json"

firefox node start

Hình 2.6.2: Cmd thực thi và kết quả đăng ký Selenium Firefox node

Bước 5. Kiểm tra Selenium Hub đã đăng ký Selenium Firefox node

Chúng ta truy cập lại đường dẫn http://192.168.1.1:4444/grid/console (Selenium hub machine). Nếu thành công, lúc này Selenium Grid chúng ta sẽ như Hình 2.7

view grid console 03

Hình 2.7: Selenium Grid sau khi đăng ký selenium Firefox node

Sử dụng Selenium Grid đã set up

Tới thời điểm này, hệ thống Selenium Grid đã sẵn sàng. Bạn có thể kiểm tra tình trạng hoạt động của Selenium Grid với automation testing framework mà bạn đang sử dụng, hoặc bạn có thể sử dụng cách sau:

  1. Install NodeJS trên máy có cùng network với Selenium Grid (có thể sử dụng chính máy HUB 192.168.1.1)

  2. Tạo folder mới, vd: C:/test, trong folder này tạo 1 file hello_selenium_chrome.js, với nội dung như sau

    Copy
    const { Builder, Capabilities } = require("selenium-webdriver");
    var capabilities = Capabilities.chrome();
    (async function helloSelenium() {
        let driver = new Builder()
            .usingServer("http://192.168.1.1:4444/wd/hub")   
            .withCapabilities(capabilities)
            .build();
        try {
            await driver.get('http://www.google.com');
            
            // Below command is used to check the result on Node machine only
            await new Promise(resolve => setTimeout(resolve, 5000));
        } finally {
            await driver.quit();
        }
    })(); 

    Lưu ý: Tại command usingServer, bạn hãy thay đổi IP Address với IP Address của máy Hub mà bạn đang triển khai.

  3. Mở một Command Prompt mới và cd tới folder C:/test

  4. Install required package selenium-webdriver bằng câu lệnh sau

    npm init -y && npm install selenium-webdriver

  5. Đảm bảo rằng hệ thống Selenium Grid vẫn đang được khởi chạy. Sau đó tiến hành thực thi file hello_selenium_chrome.js với câu lệnh sau

    node hello_selenium_chrome.js

    Ngay lúc này, tại máy 192.168.1.2 bạn sẽ thấy 1 cửa sổ Chrome sẽ được mở lên và truy cập vào URL http://www.google.com
    ==> như vậy chứng tỏ là hệ thống Selenium Grid của chúng ta đã hoạt động như mong đợi.

Một số lưu ý khi triển khai Selenium Grid

  • Quá trình maintain Selenium Grid sẽ tốn nhiều thời gian hơn vì version của driver phụ thuộc vào version của browser. Do đó, một khi version của browser được update, bạn cũng phải update driver tương ứng
  • Vì Selenium Grid được triển khai trên nhiều máy, do đó phải đảm bảo các máy Nodes luôn được mở và có thể truy cập được từ máy Hub.
  • Đối với các legacy browser như IE, thì việc bất ổn định khi thực thi test case thường xuyên xảy ra.

Kết bài

Qua bài hướng dẫn này, chúng ta vừa đi qua chi tiết các bước để triển khai hệ thống Selenium Grid. Công việc cài đặt và sử dụng Selenium Grid trải qua khá nhiều bước còn nhiều thông số chưa giải thích nên cần nhiều thời gian để hiểu rõ và maintain hệ thống này.

Triển khai Selenium Grid không khó nhưng việc maintain Selenium Grid tốn nhiều thời gian và công sức. Do đó bạn cần xác định rõ mục tiêu và sự cần thiết của dự án trước khi quyết định sử dụng Selenium Grid. Chúc bạn có những trải nghiệm thú vị, đáng nhớ!

Các bài viết cùng chủ đề