一、Selenium Grid解決什么問題
可以分布式運行自動化測試用例,提高執行效率和解決兼容性測試的要求。
二、運行機制
selenium Grid使用Hub和Node模式,一臺計算機作為Hub(管理中心)管理其他多個Node(節點)計算機。Hub負責將測試用例分發給多臺Node計算機執行,并收集多臺Node計算機執行結果的報告,匯總后提交一份總的測試報告。
Hub:
在分布式測試模式中,只能有一臺作為Hub的計算機。
Hub負責管理測試腳本, 并負責發送腳本給其他Node節點。
所有的Node節點計算機會在Hub計算機中先進行注冊,注冊成功后再和Hub計算機通信,Node節點計算機會告之Hub自己的相關信息。例如,Node節點的瀏覽器相關信息、最多并發數等。
Hub計算機可以給自己分配執行測試用例的任務。
Hub計算機分發的測試用例任務會在各個Node節點計算機執行。
Node:
在分布式測試模式中,可以有一個或者多個Node節點。
Node節點會打開本地的瀏覽器完成測試任務并返回測試結果給Hub。
Node節點的操作系統和瀏覽器版本無需和Hub保持一致。
在Node節點上可以同時打開多個瀏覽器并行執行測試任務。
三、使用方法
1、準備兩臺計算機,一臺作為Hub,命名為A;另一臺作為Node,命名為B。
2、打開http://selenium-release.storage.googleapis.com/index.html?path=2.51/地址,
下載selenium-server-standalone- 2.53.1.jar,保存在兩臺計算機的硬盤C:/grid文件夾中。
3、在A計算機上打開cmd窗口,輸入并執行以下語句:
java -jar selenium-server-standalone- 2.53.1.jar -role hub 或者
java -jar selenium-server-standalone- 2.53.1.jar -role hub -hubConfig hub.json
參數:
role參數:hub表示作為管理中心
port參數:hub服務器的端口號
hubConfig:hub各種配置的json文件路徑。hub.json與jar包在同一個文件夾中
此語句表示使用java命令把jar文件作為程序執行,并且把參數role和hubConfig傳遞給jar文件的函數,用來啟動Hub管理中心,如下圖所示:
圖中“http://172.16.231.45:4446/grid/”為Hub的地址。在計算機上打開http://172.16.231.45:4446/grid/console,驗證此網址是否顯示出“view config”的鏈接。
4、在B計算機中打開cmd窗口,輸入下面命令:
java -jar selenium-server-standalone- 2.53.1.jar -role webdriver -nodeConfig node.json
參數:
role參數:webdriver表示Node節點的名字
nodeConfig :node各種配置的json文件路徑。node.json與jar包在同一個文件夾中
執行后,如下圖所示:
5、在訪問Hub地址,http://172.16.231.45:4446/grid/console,驗證Node節點是否已經注冊成功,如下圖所示:
6、編寫分布式測試腳本
第一種方式:指定Node節點
DesiredCapabilities dc = DesiredCapabilities.chrome();
driver=newRemoteWebDriver(newURL("http://172.16.231.45:8888/wd/hub"),dc);
第二種方式:指定Hub地址,由Hub分發
DesiredCapabilities dc = DesiredCapabilities.chrome();
driver=newRemoteWebDriver(newURL("http://172.16.231.45:4446/wd/hub"),dc);
注意事項:
new UR中的地址,必須加上"/wd/hub"
第一種方式,測試用例只用在相應的Node節點計算機上執行
第二種方式,有Hub根據每個Node節點瀏覽器版本及最大并發量分配測試用例