selenium Grid2环境搭建和基本使用
Selenium Grid簡介
利用Selenium Grid可以使主節點(hub)的測試用例在不同主機即分支點(node)運行。可以使一份測試用例在不同環境下(操作系統、瀏覽器)執行自動化測試。Selenium Grid 使用Hub和Node模式,一臺計算機作為Hub(管理中心)管理其他多個Node(節點)計算機,Hub負責將測試用例分發給多臺Node計算機執行,并收集Node計算機執行結果的報告,匯總后提交一份總的測試報告。
Hub:
1.在分布式測試模式中,只能有一臺作為Hub的計算機。
2.Hub負責關機測試用例,并負責發送腳本給其他Node節點。
3.所有的Node節點計算機會在Hub計算機中先進行注冊,祖冊成功后再和Hub計算機通信,Node節點計算機會告之Hub自己的相關信息,例如,Node計算機的操作系統和瀏覽器版本。
4.Hub計算機可以為自己分配執行測試用例的任務。
5.Hub計算機分發的測試用例任務會在各個Node計算機節點執行。
Node:
1.在分布測試中可以有一個或多個Node節點。
2.Node節點會打開本地的瀏覽器完成測試任務并返回測試結果給Hub。
3.Node節點的操作系統和瀏覽器版本無需和Hub保持一致。
4.在Node節點上可以同時打開多個瀏覽器并行執行測試任務。
?
selenium Grid環境搭建
grid下載地址:http://selenium-release.storage.googleapis.com/index.html
找一個版本和自己使用的selenium版本相同的下載,這里下載的時2.53.1
啟動Hub:
下載完成后,打開cmd,進入jar問件所在目錄,執行命令 java -jar selenium-server-standalone-2.53.1.jar -role hub
打開瀏覽器輸入本機的IP+端口號(下圖所示)
點擊console
點擊view config
?
?
修改Hub參數
方式一:
(例:修改端口號為 5566)
在cmd中按Ctrl+C退出關閉當前的Hub,執行命令?java -jar selenium-server-standalone-2.53.1.jar -role hub -port 5566
方式二:
在存放grid的目錄下新建一個hub.json文件,將Hub所有參數放進去
{ "browserTimeout": 0, "capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "cleanUpCycle": 5000, "host": null, "jettyMaxThreads": -1, "maxSession":10, "newSessionWaitTimeout": -1, "nodePolling": 5000, "port": 5555, "prioritizer": null, "role": hub, "servlets": [], "throwOnCapabilityNotPresent": true, "timeout":200000 }根據自己實際情況修改后在cmd中執行命令:?java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hub.json
打開瀏覽器輸入IP+端口即可
?
Node使用
node節點計算機要求
1. Node 節點必須要有 java 環境
2. Node節點跟Hub節點機器間可以互相 ping 通。
3. Node 節點負責執行Selenium 腳本,所以必須有Selenium 環境(腳本語言對應的環境如java, 各個瀏覽器及其對應的driver)
?
啟動Node節點注冊到Hub
在cmd中執行命令:java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://192.168.1.8:4444/grid/register(192.168.1.8:4444是我打開的Hub地址,可以根據自己實際情況而定)
Hub中看到的效果如下
?
?
修改參數(和Hub的一樣)
方式一:
以修改端口為例
在cmd中執行命令:java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://192.168.1.8:4444/grid/register -port 5556
?
方式二:
在grid文件下創建一個node.json文件,json內容如下(其中的hub值根據實際情況做修改):
{
"capabilities": [
{
"browserName": "chrome",
"maxInstances": 10,
"platform": "WINDOWS",
"version": "51",
"webdriver.chrome.driver":"chromedriver.exe"
},
{
"browserName": "firefox",
"maxInstances": 10,
"platform": "WINDOWS",
"version": "46"
},
{
"browserName": "internet explorer",
"maxInstances": 3,
"platform": "WINDOWS",
"version": "11",
"webdriver.ie.driver":"IEDriverServer.exe"
}
],
"configuration": {
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 6060,
"register": true,
"registerCycle": 5000,
"hub": "http://192.168.1.8:4444"
}
}
在cmd中執行命令:java -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node.json
這種方式修改的配置參數只能執行webdriver腳本。也能通過命令的方式指定執行webdriver腳本,執行命令:java -jar selenium-server-standalone-2.53.1.jar -role wd -port 6767 -hub http://192.168.1.8:4444/grid/register
(此方法基本不使用)只能執行rc腳本的命令:java -jar selenium-server-standalone-2.53.1.jar -role rc-port 6768 -hub http://192.168.1.8:4444/grid/register
?
?
指定Node節點計算機執行測試用例
啟動一個Hub:java -jar selenium-server-standalone-2.53.1.jar -role hub -port 5050
啟動一個Node并注冊大Hub:java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://192.168.1.8:5050/grid/register
Java代碼
package com.selenium;import java.net.MalformedURLException; import java.net.URL;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test;public class Grid {WebDriver driver;@BeforeTestpublic void BeforeTest() throws MalformedURLException{//創建一個DesiredCapabilities類型 DesiredCapabilities ChromeGrid=DesiredCapabilities.chrome();//實例化一個driverdriver=new RemoteWebDriver(new URL("http://192.168.1.8:5050/wd/hub"),ChromeGrid); driver.get("https://www.baidu.com/");}@Testpublic void gridTest() throws InterruptedException{driver.findElement(By.xpath("//*[@id='kw']")).sendKeys("selenium");driver.findElement(By.xpath("//*[@id='su']")).click(); Thread.sleep(3000); //獲取頁面上的資源String sourcetext=driver.getPageSource();//校驗搜索結果是否包含 seleniumAssert.assertTrue(sourcetext.contains("selenium"));Thread.sleep(3000); }@AfterMethodpublic void aftermethod(){driver.quit();}}?通過TestNG數據驅動的方式指定Node節點計算機上指定瀏覽器執行測試用例
Java代碼:
package com.selenium;import java.net.MalformedURLException; import java.net.URL;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.*;public class GridBingFa {WebDriver driver; @DataProvider(name="data")public Object[][] Data(){return new Object[][]{{"chrome","http://192.168.1.8:6060/wd/hub"},{"ie","http://192.168.1.8:6070/wd/hub"},};}@Test(dataProvider="data")public void test(String browser,String Url) throws InterruptedException, MalformedURLException{DesiredCapabilities BrowserGrid = null;if(browser.contentEquals("chrome")){BrowserGrid =DesiredCapabilities.chrome();}else{BrowserGrid =DesiredCapabilities.internetExplorer(); }WebDriver driver=new RemoteWebDriver(new URL(Url),BrowserGrid);driver.get("https://www.baidu.com/");driver.findElement(By.xpath("//*[@id='kw']")).sendKeys("selenium");driver.findElement(By.xpath("//*[@id='su']")).click(); Thread.sleep(3000); //獲取頁面上的資源String sourcetext=driver.getPageSource();//校驗搜索結果是否包含 seleniumAssert.assertTrue(sourcetext.contains("selenium"));Thread.sleep(3000); driver.quit();}}?
?
?
轉載于:https://www.cnblogs.com/puhongjun/p/10335550.html
總結
以上是生活随笔為你收集整理的selenium Grid2环境搭建和基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享下我看过的书吧
- 下一篇: IP2726中文数据手册