Selenium Grid深入學習


應網友要求寫一個用Selenium Grid控制多系統多瀏覽器並行執行test case的例子。

因為我這里有兩台機子,我打算這樣演示:

一台機子啟動一個作為主點節的hub 和 一個作為次節點的hub(系統windows 瀏覽器為ie) ip為:192.168.40.24

另一台機子啟動兩個次節點hub,一個次節點瀏覽器為firefox,另一個瀏覽器為chrome (系統為windows),ip為:192.168.40.67

啟動各節點hub

啟動主節點hub命令:

java -jar selenium-server-standalone-2.24.1.jar -role hub

啟動與主節點同一機子的次節點hub命令:

java -jar selenium-server-standalone-2.24.1.jar -role node  -hub http://localhost:4444/grid/register -browser browserName=”internet explorer”

啟動另外一台機子的兩個節點hub命令分別為:

  • 啟動firefox的

java -jar selenium-server-standalone-2.24.1.jar   -Dwebdriver.firefox.bin=”D:/Program Files/Mozilla Firefox/firefox.exe” -role webdriver  -hub http://192.168.40.24:4444/grid/register -browser browserName=firefox

其中-Dwebdriver.firefox.bin=”D:/Program Files/Mozilla Firefox/firefox.exe”這個是傳我的firefox瀏覽器安裝地址,不然找不到。

  • 啟動chrome的

java -jar selenium-server-standalone-2.24.1.jar   -Dwebdriver.chrome.driver=”D:/chromedriver.exe” -role webdriver  -hub http://192.168.40.24:4444/grid/register -port 6666 -browser browserName=chrome

其中-Dwebdriver.chrome.driver=”D:/chromedriver.exe”,這個是傳入我chromedriver.exe的放置地址。端口設為6666,防止和上面firefox的重復。

鏈接好后,可以在http://localhost:4444/grid/console可以查看到三個子節點的狀態。啟動詳細方法可以參考前面的文章。

Selenium Grid只是提供多系統、多瀏覽器的執行環境,而不是說任務一個test case丟給它就能並行運行。並行的運行我這里就交給testng了。看下面代碼和配制,應該很容易理解。

 

testcase 代碼 和 testng.xml

testcase代碼:

package driver;

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.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class GridParallelTests {
		private WebDriver dr;
		DesiredCapabilities test;
		String baseUrl;

		@Parameters({"browser","nodeUrl","webSite"})
		@BeforeMethod
		public void setUp(String browser,String nodeUrl,String webSite){
			baseUrl = webSite;

			if(browser.equals("ie")) test = DesiredCapabilities.internetExplorer();
			else if(browser.equals("ff")) test = DesiredCapabilities.firefox();
			else if(browser.equals("chrome")) test = DesiredCapabilities.chrome();
			else System.out.println("browser參數有誤,只能為ie、 ff、chrome");

			String url = nodeUrl + "/wd/hub";
			URL urlInstance = null;
			try {
				urlInstance = new URL(url);
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("實例化url出錯,檢查一下url格式是否正確,格式為:http://192.168.40.67:5555");
			}
			dr = new RemoteWebDriver(urlInstance,test);
			dr.get(webSite);
		}

		@Test
		public void test(){
			dr.get(baseUrl);
			dr.findElement(By.id("kw")).sendKeys("selenium");
			dr.findElement(By.id("su")).click();
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("title:"+dr.getTitle());
		}

		@AfterMethod
		public void quit(){
			dr.close();
		}

}

 testng.xml:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >

<suite name="Suite1"  parallel="tests" thread-count="5">

<test name="test1">
 	<parameter name="browser" value="ff"/>
 	<parameter name="nodeUrl" value="http://192.168.40.67:5555"/>
 	<parameter name="webSite" value="http://www.baidu.com"/>
	<classes>
		<class name="driver.GridParallelTests"></class>
	</classes>
</test>

<test name="test2">
 	<parameter name="browser" value="chrome"/>
 	<parameter name="nodeUrl" value="http://192.168.40.67:6666"/>
 	<parameter name="webSite" value="http://www.baidu.com"/>
	<classes>
		<class name="driver.GridParallelTests"></class>
	</classes>
</test>

<test name="test3">
 	<parameter name="browser" value="ie"/>
 	<parameter name="nodeUrl" value="http://192.168.40.24:5555"/>
 	<parameter name="webSite" value="http://www.baidu.com"/>
	<classes>
		<class name="driver.GridParallelTests"></class>
	</classes>
</test>
</suite>

 

運行testng.xml就可以了。

如果你是用ant把上面的參數傳進去也是可以的。我這里就直接簡單地放在testng.xml了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM