Selenium Grid是一個分布式
測試平臺,它可以通過一個
server端的hub服務來控制多個用于提供Selenium腳本運行環境的client端,起到并發在多臺機器上運行的作用。整個結構是由一個hub節點和若干個代理節點組成的。hub用于管理各個代理節點的注冊和狀態信息,并接受遠程客戶端代碼的請求調用,然后把請求的命令再轉給代理節點來執行,同時需要一個hub和至少一個代理節點。除此之外,grid還支持一種更友好的功能,其可以根據用例中啟動測試的類型來相應的把用例轉給符合匹配要求的測試代理。
下面說下本人如何搭建環境的:
1. 準備三臺機器(一臺為主機[提供hub服務],另兩臺為從機[client端])
2. 三臺機器都安裝好JDK環境(可參見本人的“Selenium2.0測試工程的搭建”)
3. 三臺機器上都確保有selenium server的jar包
本人在主機上創建主節點,并在主機和兩臺從機上各創建一個子節點。最終的現象是在這三臺機器上并發運行。
(1) 啟動主節點
在主機上打開命令行,cd至selenium server jar包所在的路徑下,用命令啟動主節點hub服務:
java -jar selenium-server-standalone-2.39.0.jar -role hub 啟動的默認端口是4444,如果要改變這個端口號,則命令后加上-port XXXX,如端口號改為6666,命令為java -jar selenium-server-standalone-2.39.0.jar -role hub -port 6666
(2) 啟動子節點
在從機上打開命令行,cd至selenium server jar包所在的路徑下,用命令啟動子節點的服務:java -jar selenium-server-standalone-2.39.0.jar -role node -hub http://10.1.3.59/grid/register 啟動的默認端口是5555。其中,10.1.3.45為hub所在主機的IP地址。由于本人在主機上創建了主節點和一個子節點,所以這兩個節點的port應不同。
啟動完成后,可以在主機上打開瀏覽器http://localhost:4444/grid/console,來查看各節點的狀態。
最后,編輯代碼(主節點的port為4444,各子節點的port為5555,主機IP為10.1.3.59,兩臺從機IP分別為10.1.3.197和10.1.3.200):
public string[] strServer = new string[3]; public const string strWeb = "http://www.baidu.com"; public void TestGrid() { strServer[0] = "http://10.1.3.197:5555/wd/hub"; strServer[1] = "http://10.1.3.200:5555/wd/hub"; strServer[2] = "http://10.1.3.59:5555/wd/hub"; int nThreadCount = 3; Thread[] threads = new Thread[nThreadCount]; for (int i = 0; i < nThreadCount; i++) { threads[i] = new Thread(new ThreadStart(OpenWeb)); threads[i].Name = i.ToString(); } foreach(Thread t in threads) { t.Start(); } Thread.Sleep(60000); } public void OpenWeb() { DesiredCapabilities dc = DesiredCapabilities.InternetExplorer(); int nId = Convert.ToInt32(Thread.CurrentThread.Name); Uri seleniumServer = new Uri(strServer[nId]); Uri addr = new Uri(strWeb); RemoteWebDriver driver = new RemoteWebDriver(seleniumServer, dc); driver.Navigate().GoToUrl(addr); } |