Factory04

如何架設 Selenium Grid (包含 hub 與 node)

什麼是 Selenium?

Sellenium 是為瀏覽器自動化(Browser Automation)需求所設計的一套工具集合,讓程式可以直接驅動瀏覽器進行各種網站操作。也就是你的可以透過 Selenium 模擬瀏覽器的各種操作動作,藉此來進行網站的測試。

官方網站 http://www.seleniumhq.org/

下載 Selenium Grid

http://selenium-release.storage.googleapis.com/2.52/selenium-server-standalone-2.52.0.jar

怎麼使用 Selenium?

Selenium Grid 的結構分成 Hub 和 Node,每一次使用 Selenium Grid 進行測試任務,都是連線到 Hub,再由 Hub 分派測試任務,指定測試任務給符合要求的 Node。這個要求可以依照「作業系統」、「瀏覽器」的不同而有不同的區分。

所以 Hub 的定位比較像是 Load Balancer。但是因為 Hub 的分派功能應該只有實作基本的分派功能。所以 StackOverflow 也有一些討論串是在討論如何加強他的分派功能

在使用 Selenium Grid 之前,Server 上必須安裝最新的 java 版本,我使用的 Server 是 Ubutu 12.04 LTS

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

在 Command Line 輸入以下命令,可以啟動 Selenium Grid 中的 Hub

java -jar selenium-server-standalone-2.30.0.jar -role hub

啟動一個測試節點 Node 命令

java -jar selenium-server-standalone-2.52.0.jar -role node -hub http://111.222.33.4444:5555/grid/register -maxSession 20 -port 6666 -browser browserName=firefox,maxInstances=5

-role 表示要啟用的 Selenium 類型,是 hub or node
-hub 如果你啟用的是 hub 就必須將他註冊到一個 hub 底下,網址 http://111.222.33.4444:5555/grid/register 是 hub 提供給 node 註冊用的接口, hub 架在 IP 111.222.33.4444 底下,PORT 如果沒有修改通常是 5555

-maxSession 一個 node,可以開的 session 數量
-browser 指定 browser 的細節
browserName 指定瀏覽器的種類,firefox、chrome、safari、當然不止這三種。
maxInstances 指定一個瀏覽器可以開啟得數量
像上面的命令指的是 firefox 只能開 5 個。超過 5 個就必須等其他瀏覽器工作結束,才能再開啟。

-maxSession 與 -maxInstances 的關係是 maxSession 應該要是所有 maxInstances 的總和,因為 maxInstances 可以指定很多個,對應不同種類的瀏覽器,所以你可能會有 -browser browserName=safari,maxInstances=1 -browser browserName=chrome,maxInstances=2 -browser browserName=firefox,maxInstances=3,所以總共 6 個 instances,那麼 maxSession就應該要是 6 ,少了你瀏覽器就會有一個 instance 永遠不會被叫到。

基本的 Selenium 必須運行在有桌面的環境,所以如果是 Ubuntu 就必須安裝像是 ubuntu desktop之類的套件。否則執行的時候會提示找不到瀏覽器。

如果要在沒有桌面環境的狀況下執行,你可能有以下幾種選擇
1. 搭配使用 phantomJS
2. 或是用 HTMLUnitDriver
3. 使用虛擬桌面 xvfb 之類的

Selenium Web Console

開啟頁面 http://111.222.33.44:5555/grid/console
可以看到 selenium web console,透過此畫面可以簡單了解目前你的 selenium 的狀況。下圖是我註冊了 30 firefox instance。當有 instance 在執行時候,對應的瀏覽器 icon 會反白,表示正在被使用中。
selenium_web_console

目前遇到的問題

目前我是用同一台機器,同時當 hub 與 node,node 上面開 30 個 firefox instance,maxSession 30
基本運作正常,但是不管我開多少 instance 會執行的永遠都是第一個,所以當我一次同時進行多個測試的時候,就會發現被「卡住了」,一定要等到前一個執行完,才能執行下一個,目前還沒試過多台機器同時註冊的狀況,

[參考資料]
1. http://learngeb-ebook.readbook.tw/intro/selenium.html
2. https://gist.github.com/aczietlow/7c4834f79a7afd920d8f
3. https://www.youtube.com/watch?v=9b5lGfBKzj0
4. https://www.youtube.com/watch?v=8XJs5COhQ_s
5. http://www.guru99.com/introduction-to-selenium-grid.html
6. http://elementalselenium.com/tips/52-grid
7. http://stackoverflow.com/questions/13723349/selenium-grid-maxsessions-vs-maxinstances

標籤: , , ,

很愛畫虎爛的我,開始了用文章唬爛社會大眾的志業!