Selenium Grid的原理、配置與使用(轉)

Selenium Grid
Selenium Grid在前面介紹Selenium的時候說過它有三大組件,Selenium Grid就是其中之一而做用就是分佈式執行測試。講分佈式以前仍是要說說UI自動化的優點來突出Selenium Grid,最簡單的兩點解決重複執行測試、解決多瀏覽器兼容這是UI自動化的價值;那分佈式是什麼概念?簡單的說就是老大收到任務,分發給手下去幹;經過Selenium Grid的能夠控制多臺機器多個瀏覽器執行測試用例,分佈式上執行的環境在Selenium Grid中稱爲node節點。html

舉例說明一下,好比當自動化測試用例達到必定數量的時候,好比上萬,一臺機器執行所有測試用例耗時5個小時(只是舉例,真正的耗時是須要根據測試用例場景的複雜度決定的),而若是須要覆蓋主流瀏覽器好比Chrome、Firefox,加起來就是10個小時;這時候領導跟你說有什麼辦法能夠解決這個執行速度?固然最笨的辦法就是另外拿臺機器,而後部署環境,把測試用例分開去執行而後合併結果便可。而Selenium也想到了這點,因此有了Selenium Grid的出現,它就是解決分佈式執行測試的痛點。

java

Selenium Grid工做原理
Selenium Grid實際它是基於Selenium RC的,而所謂的分佈式結構就是由一個hub節點和若干個node代理節點組成。Hub用來管理各個代理節點的註冊信息和狀態信息,而且接受遠程客戶端代碼的請求調用,而後把請求的命令轉發給代理節點來執行。下面結合環境部署來理解Hub與node節點的關係。node

Selenium Grid環境部署web

下載selenium-server-standalone-2.53.1.jarchrome

下載地址:http://selenium-release.storage.googleapis.com/index.htmlwindows

進入selenium-server-standalone-2.53.1.jar包的位置,如E:\seleniumapi

 

 

啓動hub,命令以下(命令以截圖爲準,請參考截圖中的啓動命令):瀏覽器

java -jar selenium-server-standalone-2.53.1.jar -role hub -maxSession 10 -port 4444session

 

 

參數解析併發

l -role hub表示啓動運行hub;

l -port是設置端口號,hub的默認端口是4444,這裏使用的是默認的端口,固然能夠本身配置;

l -maxSession爲最大會話請求,這個參數主要要用併發執行測試用例,默認是1,建議設置10及以上。

瀏覽器打開地址:http://localhost:4444/grid/console,出現以下圖表示hub啓動成功。

 

 

啓動hub後,就須要運行節點啦,最少都要有一個node節點,否則hub就成空頭司令了;而node節點能夠與hub在同一臺機器上運行,演示一個node節點與hub同機,另外一個node節點啓動了一臺虛擬機。

hub機                                            ip:192.168.0.245

node1機                                        ip:192.168.0.245

node2機                                        ip:192.168.0.183

 

啓動node節點1

node1節點,配置firefox瀏覽器,運行下面命令(命令以截圖爲準,請參考截圖中的啓動命令):

沒有報錯則再次刷新一下http://localhost:4444/grid/console的訪問會發現node節點已經顯示,表示啓動成功;

參數解析:

l -role node:表示啓動的是node節點

l  -port 5555:指定node節點端口

l  -hub http://192.168.0.245:4444/grid/register:表示hub機地址

l -maxSession 5:node節點最大會話請求

l -browser browserName=firefox,seleniumProtocol=WebDriver,maxInstances=5,platform=WINDOWS,version=45.0.2

這個就是設置瀏覽器的參數啦,這個很重要;browserName表示瀏覽器名字,如chrome、firefox、ie;maxInstances表示最大實例,能夠理解爲最多可運行的瀏覽器數,這個值很關鍵,不能大於前面maxSession的值,不然可能會出錯;platform表示操做系統;version表示瀏覽器版本

啓動node節點2

node2節點,在目錄放了chromedriver.exe文件,這裏要提示一下,這個chromedriver.exe文件前面說過下載地址了,主要是版本須要與系統中安裝的chrome瀏覽器匹配

 

 運行下面命令(命令以截圖爲準,請參考截圖中的啓動命令):

沒有報錯則再次刷新一下http://localhost:4444/grid/console的訪問會發現node節點已經顯示,表示啓動成功。

參數解析:

l -Dwebdriver.chrome.driver=chromedriver.exe :瀏覽器插件,若是是其餘瀏覽器就寫對應的名字

如firefox: -Dwebdriver.firefox.driver=geckodriver.exe

注意多了這個參數注意是chromedriver.exe須要指定,而對於Webdriver2是支持geckodriver因此不須要指定geckodriver,但前提是firefox瀏覽器版本不能大於46,因此看到node節點1使用的是45版本的瀏覽器

 

Selenium Grid使用
當實例化Hub遠程時,會根據配置去匹配Hub上註冊的node代理節點,匹配成功後轉發給代理節點,這時候代理節點會生成sessionid啓動瀏覽器,而後響應給Hub說一切準備就緒,Hub也會把這個sessionid響應給客戶端,接下來的客戶端的代碼發來的請求都會被Hub轉發給這個代理節點來執行。這裏實際上整個流程與Selenium1.0的原理是同樣的,只是多了Hub這一層。

DesiredCapabilities capability = new DesiredCapabilities();

capability.setBrowserName("chrome");

capability.setPlatform(Platform.WINDOWS);

try {

WebDriver driver = new RemoteWebDriver(new URL("http://192.168.0.245:4444/wd/hub"), capability);

driver.get("http://www.baidu.com");

driver.quit();

} catch (MalformedURLException e) {

  e.printStackTrace();

}
要注意實例化driver對象時填寫的服務地址是node節點的地址,這樣就會直接去節點運行;還有一個注意的就是DesiredCapabilities配置,必定要設置該節點運行參數正確的瀏覽器、瀏覽器版本、系統,若是參數不對都會出現報錯。

 

Selenium Grid總結

經過上面的環境搭建,再回顧一下原理,就是hub接受到客戶端的請求而後轉發給node節點執行。那hub是怎麼轉發給node節點的呢?多節點的場景下hub是如何知道轉發給那個node節點?這就是運行node節點的參數以及客戶端代碼來決定的啦。

DesiredCapabilities capability = new DesiredCapabilities();

capability.setBrowserName("chrome");

capability.setPlatform(Platform.WINDOWS);

 

先來看上面3句話,DesiredCapabilities類能夠理解爲配置,設置瀏覽器名稱爲chrome,設置系統爲windows;而後再回到上面看node節點的運行參數,設置瀏覽器、系統爲chrome、windows的是否是node2節點,答案確定是的。而設置參數的方法不單單隻有這兩個,還有setVersion()方法設置瀏覽器版本。

而hub怎麼知道這些node節點的參數,就是在啓動node節點的-hub參數,這表示這個節點註冊地址,就理解爲綁定的hub地址,這樣就造成了hub與node的關係。而若是咱們在客戶端代碼使用的時候,hub去註冊的node節點匹配時,匹配失敗會報錯。

相關文章
相關標籤/搜索