Selenium Grid 分享

Selenium 家族簡單介紹:

 

Selenium 1.0

  Selenium 1.0 包括了 Selenium IDE, Selenium Grid和Selenium RC(Selenium Remote Control)。
  Selenium IDE 是一個Firefox 瀏覽器的一個插件,可以實現對瀏覽器的簡單操作的錄製與回放功能。一般用於測試人員在測試過程中發現bug,通過Selenium IDE 將重測試驟錄製下來,快速創建了bug 重現腳本,從而供開發人員容易重現bug。IDE 除了錄製回放外還可以導出錄製的腳本,並導出成多種語言,不同版本的Selenium 腳本,供測試人員快速開發腳本。
  Selenium Grid 是一個分佈式執行 Selenium 腳本工具,現在大版本也到Selenium Grid 2。通過Selenium Grid 可以快速的在多臺機器過個瀏覽器中並行執行多個測試用例,其大大提高了執行測試的效率,並通過一個hub節點管理多個不同系統不同了瀏覽器的node節點,使腳本在不同的環境下被執行,可以測試兼容性,同樣也便於添加變動的測試機器。
  Selenium RC 是Selenium 1.0 的核心,Selenium RC 分Clent Libraies 和 Selenium Server。
  Selenium Libraies 用於編寫測試腳本,支持多種不同的主流開發語言,用來控制Selenium Server.
  Selenium Server 則負責控制瀏覽器的行爲,而Selenium Server 又由三部分組成:

  • Selenium Core:被Selenium Server 嵌入到瀏覽器頁面中,是一堆的JavaScript 函數的集合,通過這些JavaScript函數來實現對瀏覽器的操作。
  • Launcher:用於啓動瀏覽器,把Selenium Core加載到瀏覽器頁面當中,並把瀏覽器的代理設置Selenium Server 的Http Proxy。
  • Http Proxy:Selenium Server的http代理。

重要參數說明Selenium Grid 是什麼?

  Selenium Grid 是一個可以方便的讓你腳本運行在不同的平臺以及不同的瀏覽器上的一個框架。Selenium Grid 分1和2兩個版本,其中Selenium Grid 2的發佈還晚於Selenium 2.0,也就是說Selenium Grid 2 並不是和Selenium 2.0 一起發佈的,但是Selenium Grid 2基本上支持Selenium 2.0的所有功能。

Selenium Grid 基本結構


如上圖,Selenium Grid 由一個Hub節點和若干個Node節點組成。 其中Hub節點主要用於管理各個Node節點的註冊及其狀態,並接收Selenium Scripts腳本,然後轉發給各個Node節點去執行,所以Hub本身節點是不執行腳本的,Hub是做腳本分發,真正執行腳本都是放於Node節點上。既然Hub 會分發腳本,那麼免去了一個一個Node機器上去拷貝你腳本的麻煩啦。

 

何時需要 Selenium Grid

        在瞭解了什麼是 Selenium Grid 和其基本結構後,那麼我們開始關心我們何時需要它呢?下面列出兩點:

 

  1. 當你的腳本需要在不同的系統和瀏覽器運行時,也就是測試需要考慮各種瀏覽器兼容性時。
  2. 當你想併發執行測試腳本,而且需要用到多臺機器資源時。

怎麼使用

注意:Selenium Grid 是用java開發的框架,所以想運行這個框架,機器需要有java環境。

下載jar包

       下載地址:http://selenium-release.storage.googleapis.com/index.html ,選取最新版本,例如寫這個文章時最新版本是2.53,那麼進入2.53文件夾下載 selenium-server-standalone-2.53.1.jar 文件便可。

 

啓動Hub 節點:

在控制檯(終端)輸入:java -jar selenium-server-standalone-2.53.1.jar -role hub
出現類似如下圖信息便表示Hub啓動成功:

這時你可以瀏覽器打開 http://localhost:4444/grid/console ,可以看到Hub管理頁面。


 

點擊 view config,可以查看到當前hub節點的一些配置默認配置信息,例如:
port : 4444 這個是hub 默認的端口號;

throwOnCapabilityNotPresent : true 默認爲 true,表示當前hub只有在有node存在時,纔會接受測試請求。爲false 則反之;

capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher 這是一個實現了CapabilityMatcher接口的類,默認指向org.openqa.grid.internal.utils.DefaultCapabilityMatcher該類用於實現grid在分佈測試任務到對應node時所使用的匹配規則,如果想要更精確的測試分配規則,那麼就註冊一個自己定義的匹配類;

prioritizer : null 這是一個實現了Prioritizer接口的類。設置grid執行test任務的優先邏輯;默認爲null,那個腳本先到那個先執行;

newSessionWaitTimeout : -1 默認-1,即沒有超時;指定一個新的測試session等待執行的間隔時間。即一個代理節點上前後2個測試中間的延時時間,單位爲毫秒;

browserTimeout : 0 瀏覽器無響應的超時時間,默認爲0表示沒有超時時間


修改 hub 的配置

想要修改 hub 的配置有兩種方法。

 

通過命令修改

 

例如假設我的 4444端口被別的程序佔用了,我想修改默認的端口爲4445,則如下:
java -jar selenium-server-standalone-2.53.1.jar -role hub -port 4445

通過Json文件修改配置:

 

  1. 新建個json格式的文件,內容如下(這裏僅僅修改了maxSession的配置,默認是5),並放於跟Grid jar包同一目錄:
    { "host": null, "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "prioritizer": null, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "nodePolling": 5000, "cleanUpCycle": 5000, "timeout": 300000, "browserTimeout": 0, "maxSession": 10 }
  2. 執行命令:java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hub.json

 

這時再到 Grid Console 頁面查看,maxSession 參數已經修改成 10.

node 節點Selenium 環境要求

在添加node節點前,我們先關注下,node 節點對環境要求:

 

  1. node 節點必須要有 java 環境
  2. node 節點跟hub 節點機器間可以互相 ping 通。(不通時關閉防火牆和安全軟件再試試)
  3. node 節點負責執行Selenium 腳本,所以必須有Selenium 環境(腳本語言對應的環境如java, 各個瀏覽器及其對應的driver)

添加 node 節點

如果你是跟hub同一臺機器中添加可以直接在控制檯(終端)輸入如下命令:
java -jar selenium-server-standalone-2.53.1.jar -role node

如果你想在別的機器上添加node節點則控制檯(終端)輸入如下命令:
java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://hubip:端口/grid/register

添加完節點後,可以在 Grid Console 頁面上查看到已經註冊進來的node節點信息和配置。如下圖:

補充:使用 -role node 註冊表示這個node節點既可以支持Selenium Remote Control 也支持Webdriver
java -jar selenium-server-standalone-2.53.1.jar -role rc //註冊的節點僅支持Selenium Remote Control
java -jar selenium-server-standalone-2.53.1.jar -role wd //註冊的節點僅支持WebDriver


 

修改 node 配置

 

同樣node的配置有兩種方式

 

通過命令修改

 

java -jar selenium-server-standalone-2.53.1.jar -role rc -port 6666

 

通過json文件修改

 

例如新建一個node.json文件,如下內存,並放於Grid 同級目錄下
{ "capabilities": [ { "browserName": "chrome", "maxInstances": 5, "platform": "WINDOWS", "version":"51" }, { "browserName": "firefox", "maxInstances": 6, "platform": "WINDOWS", "version":"46.0.1" }, { "browserName": "internet explorer", "maxInstances": 2, "platform": "WINDOWS", "webdriver.ie.driver": "IEDriverServer.exe" } ], "configuration": { "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 5, "port": 5555, "register": true, "registerCycle": 5000, "hub": "http://hubIP:4444" }}
重要參數說明:
"browserName": “chrome" 這個很重要,表示你註冊的瀏覽器

 

"maxInstances": 5 這個參數表示最多啓動該瀏覽器的個數

 

"webdriver.ie.driver": “IEDriverServer.exe” 每個瀏覽器driver放置的位置,建議放跟Grid 同級目錄下

 

執行命令:
java -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node.json -hubhttp://192.168.84.209:4444/grid/register
最後查看Grid Console 頁面,顯示如下node節點信息:

到此爲止,我們已經配置好Hub 和需要的多個Node 節點,下去我們需要開始編寫測試代碼:

 

測試代碼:

 

編寫腳本

 

例如我想在遠程的node 節點(192.168.84.19:5555)機器上啓動Chrome/IE/firefox瀏覽器,並打開百度頁面,這裏我們需要藉助DesiredCapabilities類來指定採用哪個瀏覽器,用RemoteWebDriver 來實現遠程運行,具體代碼如下:

// 啓動192.168.84.209:5555 node節點的Chrome
    @Test
    public void testChrome() throws MalformedURLException, InterruptedException {
        DesiredCapabilities chromeDC = DesiredCapabilities.chrome();
        WebDriver driver = new RemoteWebDriver(new URL("http://hubip:端口/wd/hub"), chromeDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }

    // 啓動192.168.84.19:5555 node節點的firefox
    @Test
    public void testFF() throws MalformedURLException, InterruptedException {
        DesiredCapabilities firefoxDC = DesiredCapabilities.firefox();
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), firefoxDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }

    // 啓動192.168.84.19:5555 node節點的IE
    @Test
    public void testIE() throws MalformedURLException, InterruptedException {
        DesiredCapabilities ieDC = DesiredCapabilities.internetExplorer();
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), ieDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }
補充 DesiredCapabilities類,除了可以指定瀏覽器的名稱還可以指定平臺和瀏覽器版本以及瀏覽器支持的其他功能

Selenium Grid 的GUI管理工具

推薦兩個Grid的GUI 管理工具:

  1. Jenkins  selenium Plugin 插件

 

安裝完成後會在導航中添加Grid的入口。

2. VisGrid

下載地址:http://www.codoid.com/products/view/2/30


SOD1 和 SOD2 Grid 情況

SOD1 Grid Console 地址: http://sjqatst02:4445/grid/console ,Hub 配置存放於 /data/home/qateam/Selenium_Server 路徑底下,通過執行start_grid.sh文件來啓動

SOD1 中總共有6臺Node 節點,其中兩臺RC 節點:http://10.7.77.56:5555, http://10.7.77.54:5555  http://10.7.77.51:5555

三臺WebDriver 節點:http://10.7.77.55:5555  http://10.7.77.57:5555

5臺機器的Node 配置均放在:C:\Selenium_Server\Selenium_2.47.1_Reg\ 文件夾下,使用node_5555作爲啓動文件,使用的是nodeConfiguration.json 配置文件。

同時在每臺機器的 啓動中加入了 啓動的批處理文件。


SOD2 Grid Console 地址: http://sjqatst12:4444/grid/console ,Hub 配置存放於  /data/home/qateam/Selenium_Server 路徑下,通過執行start_grid.sh文件來啓動:

SOD2 種NODE 節點:http://10.7.77.59:5555  http://10.7.77.58:5555  http://10.7.77.59


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章