什么是?Selenium?Grid?
Selenium?Grid?是 Selenium 的三大組件之一,允許用戶同時在不同的機器和系統上測試不同瀏覽器。
也就是說 Selenium Grid 支持分布式的測試執行。它可以讓你的測試用例在一個分布式的執行環境中運行。
由上圖可見,測試腳本會通過 selenium hub 節點分發給不同的 node 節點,而不同的 node 節點所在的操作系統和搭載的瀏覽器類型可以是不同的,接下來我們看下 hub 節點和 node 節點具體分別有什么作用:
hub 節點
中心節點,或總控節點
管理各個 node 節點的注冊信息和狀態信息
接收并轉發客戶端(測試腳本)請求到合適的 node 節點
node 節點
子節點,或代理節點
負責注冊配置信息到 hub 節點(平臺、瀏覽器、瀏覽器版本等)
負責接收來自 hub 節點的轉發的請求以執行測試腳本
也可單獨作為遠程節點執行測試腳本
環境準備
環境說明:
本地端系統為 win10,搭載 V68 版本的 Chrome 瀏覽器,IP 地址為 192.168.1.222
遠程端系統為?win7,搭載 V56 版本的 Firefox 瀏覽器,IP 地址為 192.168.140.130
兩臺主機能夠相互 ping 通
hub 節點和 node1 節點都是在本地端工作,node2 節點在遠程端工作
環境準備步驟:
測試機器安裝 JDK,配置環境變量
下載 selenium-server-standalone-x.x.x.jar
https://npm.taobao.org/mirrors/selenium
下載瀏覽器驅動
Chrome:https://npm.taobao.org/mirrors/chromedriver
Firefox:https://npm.taobao.org/mirrors/geckodriver/
IE:https://npm.taobao.org/mirrors/selenium 注:IE 驅動和 selenium 依賴在一起
配置運行
1、本地端啟動 hub
java -jar selenium-server-standalone-3.141.59.jar -role hub -port 8888 -maxSession 10
參數解釋:
Java -jar selenium-server-standalone-3.141.59.jar 運行 jar 包
-role hub 以 hub 的角色運行
-port 8888 指定 hub 運行的端口(默認為 4444)
-maxSession 10 最大的處理會話
2、查看 hub 的運行狀態
瀏覽器中輸入 http://localhost:8888/grid/console 進入到到 hub 的 console 控制臺
3、啟動 node1
node1 節點工作在本地端,配置的瀏覽器為 V68 的 Chrome
java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.4.4:8888/grid/register" -port 5558 -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
參數解釋:
-Dwebdriver.chrome.driver="chromedriver.exe" 指定 chromeDriver 驅動所在的路徑(本地)
-jar selenium-server-standalone-3.141.59.jar 運行 jar 包
-role node 以 node 角色執行
-hub "http://192.168.1.222:8888/grid/register" 指定要鏈接的 hub 地址,這樣 node 才能和 hub 通訊連接上
-port 5558 node 的執行端口
-browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
browserName=chrome 運行的瀏覽器名稱
maxInstances=2 最多支持兩個瀏覽器實例
version=68 瀏覽器版本號
platform=WINDOWS 平臺名稱
運行之后的效果:
瀏覽器再次刷新訪問 hub 的 console 端
4、啟動遠程端的 node2 節點
node2 節點工作在遠程端,配置的瀏覽器為 V56 的 Chrome
啟動配置為
java -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5558 -browser "browserName=firefox,maxInstances=2,version=56,platform=WINDOWS"
瀏覽器再次刷新訪問 hub 的 console 端,可以看到兩個 node 節點已經成功注冊到 hub 節點上
?執行腳本
// 期望能力對象DesiredCapabilities capabilities = new DesiredCapabilities();//配置測試的瀏覽器,配置Chrome則會啟動本地node1節點瀏覽器進行測試,配置Firefox則會啟動遠程端的Firefox進行測試capabilities.setBrowserName(BrowserType.CHROME);// hub節點String url = "http://192.168.1.222:8888/wd/hub";//和hub建立通訊,把相應配置傳給hub,hub會根據配置選擇注冊的node節點,打開相應的瀏覽器進行測試WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);driver.get("http://www.baidu.com");driver.findElement(By.id("kw")).sendKeys("檸檬班軟件測試");Thread.sleep(10000);driver.quit();
通過上述配置及腳本我們能夠啟動本地 node1 節點和 node2 節點分別進行測試,單 node 節點只能支持一款瀏覽器進行測試,如何讓 node 節點可以支持多款瀏覽器呢?
答案就是在配置 node 節點的時候傳入的參數配置兼容多款瀏覽器即可。
node 節點配置兼容不同瀏覽器
node 節點可以配置單一瀏覽器,如 Chrome、Firefox、IE 等等,也可以配置兼容多款瀏覽器
這樣只要符合 node 節點配置中的任何一個,hub 會將客戶端的執行請求發送過來
java -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5555 -browser "browserName=internet explorer,maxInstances=4,version=11,platform=WINDOWS" -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS" -browser "browserName=firefox,maxInstances=3,version=56,platform=WINDOWS"
現在 node1 節點和 node2 節點采用相同的啟動參數配置啟動
我們可以看到,grid 的 console 控制臺顯示兩個 node 節點都可以支持多瀏覽器測試
node 節點啟動方式二
之前啟動的方式是通過命令行或者 bat 腳本啟動 node 節點,官方提供了兩種方式,其二就是通過 JSON 配置文件啟動
java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node.json
node.json 配置文件如下:
{"capabilities":[{"browserName": "firefox","maxInstances": 5,"seleniumProtocol": "WebDriver","webdriver.firefox.driver":"firefox.exe",#"firefox_binary":"D:\\Program Files\\Mozilla Firefox\\firefox.exe","platform":"WINDOWS"},{"browserName": "chrome","maxInstances": 5,"seleniumProtocol": "WebDriver","webdriver.chrome.driver":"chromedriver.exe","platform":"WINDOWS"},{"browserName": "internet explorer","maxInstances": 5,"seleniumProtocol": "WebDriver","platform":"WINDOWS"}],"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy","maxSession": 5,"port": -1,"register": true,"registerCycle": 5000,"hub": "http://192.168.1.222:8888","nodeStatusCheckTimeout": 5000,"nodePolling": 5000,"role": "node","unregisterIfStillDownAfter": 60000,"downPollingLimit": 2,"debug": false,"servlets" : [],"withoutServlets": [],"custom": {}}
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
?
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!