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了。
posted on 2012-09-11 11:58 tim_sheng 阅读(5068) 评论(2) 编辑 收藏 举报