Selenium WebDriver+Grid2的环境搭建和实现
Selenium WebDriver + Grid2可以解决浏览器端性能测试中的自动化和并发性问题。本文介绍了这种新测试框架的环境搭建和脚本的开发过程。Grid2的机制:启动一个中央节点(Hub),然后启动多个远程控制节点(Node),启动Node时告知Hub的位置,这样Node就可以注册到Hub上,测试程序与Hub通讯,当测试被并发地发给Hub时,Hub会根据所要运行的浏览器自动将这些测试命令分发给已经注册的Node,Node接到命令后执行测试。
一.启动Hub
e.g. java -jar
C:\Work\Selenium\Build\selenium-server-standalone-<version>.jar -role hub
-role hub:指出当前启动的是Hub
二.启动Node
e.g. java -jar
D:\Selenium\driver\selenium-server-standalone-2.35.0.jar -role node -hub
http://localhost:4444/grid/register -port 5557 -browser browserName=firefox,version=22,platform=WINDOWS
-role node:指出当前启动的是Node
-hub:默认为http://ip_for_hub:4444/grid/register,为当前的Node所要注册的Hub的URL(根据用户实际情况替换ip地址和端口)
-port:Node的启动端口,当同一台机器上启动多个Node的时候,注意替换端口避免冲突
-browser:指定这个Node支持了哪些浏览器、平台、可以启动几个浏览器实例等。它是可以重复指定的。
三.验证Hub和Node的启动状态
可以在http://ip_for_hub:4444/grid/console查看所有子节点的状态
四.代码Sample
1. TestNG Class Code部分:
对于WebDriver nodes来说,你将用到RemoteWebDriver和DesiredCapabilities对象来定义你要运行哪个浏览器,以及其版本和平台。
packagetest.sample;
importjava.net.MalformedURLException;
importjava.net.URL;
importorg.openqa.selenium.By;
importorg.openqa.selenium.Platform;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.WebElement;
importorg.openqa.selenium.firefox.FirefoxDriver;
importorg.openqa.selenium.remote.DesiredCapabilities;
importorg.openqa.selenium.remote.RemoteWebDriver;
importorg.openqa.selenium.support.events.EventFiringWebDriver;
importorg.testng.annotations.BeforeMethod;
importorg.testng.annotations.Parameters;
importorg.testng.annotations.Test;
publicclassSample {
StringbasicTestURL;
@Parameters({"initBrowserName","initBrowserVersion","initBrowserPlatform","testURL"})
@BeforeMethod
publicvoidsetup(String initBrowserName, String initBrowserVersion, String
initBrowserPlatform, String testURL) {
basicTestURL= testURL;
DesiredCapabilities capabilities =
DesiredCapabilities.firefox();
capabilities.setBrowserName(initBrowserName);
capabilities.setVersion(initBrowserVersion);
capabilities.setPlatform(Platform.valueOf(initBrowserPlatform));
try{
WebDriverwebDriver=newRemoteWebDriver(newURL("http://localhost:4444/wd/hub"), capabilities);
}catch(MalformedURLException e) {
//TODOAuto-generated catch block
e.printStackTrace();
}
}
@Test
publicvoidsimpleTest() {
WebDriver driver =newFirefoxDriver();
driver.get(basicTestURL);
WebElement keyword = driver.findElement(By.id("kw"));
keyword.sendKeys("Selenium");
WebElement searchBtn =
driver.findElement(By.id("su"));
searchBtn.click();
}
}
2. 对应的TestNG.xml修改,增加相关需要的参数,供TestNG的Class使用
<?xmlversion="1.0"encoding="UTF-8"?>
<suitename="Suite"parallel="false">
<testname="Test">
<parametername="initBrowserName"value="firefox"/>
<parametername="initBrowserVersion"value="22"/>
<parametername="initBrowserPlatform"value="WINDOWS"/>
<parametername="testURL"value="http://www.baidu.com"/>
<classes>
<classname="test.sample.Sample"/>
</classes>
</test><!-- Test -->
</suite><!-- Suite -->
3. 新建对应的ant文件来执行对应的TestNG的XML。直接执行此ant文件即可完成测试。
<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
<projectbasedir="."default="run"name="Meeting">
<propertyname="src"value="${basedir}\src"/>
<propertyname="bin"value="${basedir}\bin"/>
<propertyname="lib"value="${basedir}\libs"/>
<propertyname="report"value="${basedir}\test-output"/>
<propertyname="suite"value="${basedir}\suite"/>
<propertyname="debuglevel"value="source,lines,vars"/>
<tstamp>
<formatproperty="nowstamp"pattern="yyyyMMdd-HHmmss"locale="en"/>
</tstamp>
<pathid="classpath">
<pathelementlocation="."/>
<pathelementlocation="${bin}"/>
<filesetdir="${lib}/">