selenium Grid(一)
selenium grid Quick Start
selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。
1、启动Selenium-Server
1)下载 selenium-server-standalone-*.jar,地址:http://selenium-release.storage.googleapis.com/index.html?path=2.41/
2)启动selenium server并注册hub (假设hub服务器机器selenium-server版本为2.41,本机IP为192.32.50.26)
到selenium-server-standalone-*.jar 包放置目录下执行:java -jar selenium-server-standalone-2.41.0.jar -role hub -port 4441 (未指定port时,hub默认4444)
3)本地或者远程机器, 都可以启动多个node
a.本地启动:
默认: java -jar selenium-server-standalone-2.41.0.jar -role node (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)
指定hub: java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://localhost:4441/grid/register
b.远程启动:
远程同样需要下载selenium-Server jar包,启动如下: (假设远程版本为2.29)
java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4441/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666
2、具体应用
public class RemoteWebDriverDesiredCapTest {
@Test
public void myTest() throws MalformedURLException{
/**
* 1、本地机器启动了主节点hub (假設本台机器IP:192.32.50.26,http://localhost:4444/grid/console 查看节点连接情况)
* java -jar selenium-server-standalone-2.41.0.jar -role hub (默认端口4444)
* 2、本地也启动了一个该hub 次节点A
* java -jar selenium-server-standalone-2.41.0.jar -role node
* (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)
* (具体设置:java -jar selenium-server-standalone-2.41.0.jar -role node -port 5556 -hub http://localhost:4441/grid/register)
* 3、本机器装有firefox, chrome,所以通过该次节点A, 可以用firefox来运行脚本, 也可以用chrome
* FF驱动默认在webDriver中了, 而chrome驱动需要自己指定, chromeDriver.exe ,运行chromeDriver(默认使用端口9515)
*/
//node:java -jar selenium-server-standalone-2.41.0.jar -role node
DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setPlatform(Platform.VISTA);
WebDriver driver = new RemoteWebDriver(new URL("http://192.32.50.26:5555/wd/hub"), capability);
driver.get("http://www.baidu.com");
System.out.println(driver.getCurrentUrl());
driver.quit(); // node: 直接运行chromedriver.exe时, 通过http://xxx.xxx.xxx.xxx:9515 就可以取得chrome; 或者像 下面指定-Dwebdriver.chrome.driver -port,形式
DesiredCapabilities aDesiredcap =new DesiredCapabilities("chrome","",Platform.VISTA);
WebDriver wd = new RemoteWebDriver(new URL("http://localhost:9515"), aDesiredcap);
wd.get("https://code.google.com/p/selenium/wiki/Grid2");
System.out.println(wd.getCurrentUrl());
wd.quit(); //node:java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776
DesiredCapabilities iDesiredcap =new DesiredCapabilities("iexplore","",Platform.VISTA);
WebDriver wdE = new RemoteWebDriver(new URL("http://192.32.50.26:7776/wd/hub"), iDesiredcap);
wdE.get("https://code.google.com/p/selenium/wiki/Grid2");
System.out.println(wdE.getCurrentUrl());
wdE.quit(); //用另一台机器作为次节点连接 , (假設IP為: 192.32.52.51 )
//java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666
DesiredCapabilities chrome =new DesiredCapabilities("chrome","",Platform.XP);
WebDriver driverChrome = new RemoteWebDriver(new URL("http://192.32.52.51:6666/wd/hub"), chrome);
driverChrome.get("http://www.cnblogs.com/");
driverChrome.quit();
}
}
3、做成多线程方式
Selenium Grid只是提供多系统、多浏览器的执行环境,而不是说任务一个test case丢给它就能并行运行。并行的运行我这里就交给testng了
如下代码和配置:
1)testcase 代码:
package com.jennifer.test; 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 desireCap; @Parameters({ "browser", "nodeUrl"})
@BeforeMethod
public void setUp(String browser, String nodeUrl) {
if (browser.equals("ie")){
desireCap = DesiredCapabilities.internetExplorer();
}
else if (browser.equals("ff"))
desireCap = DesiredCapabilities.firefox();
else if (browser.equals("chrome"))
desireCap = DesiredCapabilities.chrome();
else
System.out.println("browser parameter wrong , can only be :ie、 ff、chrome"); String url = nodeUrl + "/wd/hub";
URL urlInstance = null;
try {
urlInstance = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
dr = new RemoteWebDriver(urlInstance, desireCap);
} @Test
public void test() {
dr.get("http://www.baidu.com/");
dr.findElement(By.id("kw1")).sendKeys("selenium");
dr.findElement(By.id("su1")).click();
System.out.println("title:" + dr.getTitle());
}
@AfterMethod
public void quit() {
dr.close();
}
}
2)testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/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.32.50.26:5555"/>
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test> <test name="test2">
<!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666 -->
<parameter name="browser" value="chrome" />
<parameter name="nodeUrl" value="http://192.32.50.26:6666" />
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test> <test name="test3">
<!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776 -->
<parameter name="browser" value="ie" />
<parameter name="nodeUrl" value="http://192.32.50.26:7776" />
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test>
</suite>
selenium Grid(一)的更多相关文章
- 搭建selenium grid简单配置
1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...
- Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...
- Selenium Grid 学习笔记
Selenium Grid 学习笔记http://www.docin.com/p-765680298.html
- Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities
Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...
- selenium Grid
Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...
- selenium grid java 资料
Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml
- Selenium Grid跨浏览器-兼容性测试
Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...
- selenium grid的使用与配置
一.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测 ...
- 转:Selenium Grid深入学习
应网友要求写一个用Selenium Grid控制多系统多浏览器并行执行test case的例子. 因为我这里有两台机子,我打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub ...
随机推荐
- PHP linux spl_autoload_register区分大小写
一个PHP脚本用到spl_autoload_register,在WINDOWS下运行正常,但在LINUX就include不了,后来发现WINDOWS大小写不敏感,而在LINUX下区分大小写,WINDO ...
- [置顶] Quartz的DateBuilder详解
DateBuilder类有两个方法: nextGivenMinuteDate和nextGivenSecondDate: Method: (a) public static Date nextG ...
- 在 SUSE 11 sp2 上安装 freeradius
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- ADO.NET 快速入门(九):使用关系型数据
DataSet 可以包含非关联表,也可以包含关联表.你可以把 DataSet 想象成一个文档数据.事实上,除了 DataSet 是基于层级模型的,其它和 XML 数据文档是一样的.由于数据通常存储在关 ...
- cocos2d-x 多线程以及线程同步
转自:http://blog.csdn.net/zhy_cheng/article/details/9116479 cocos2d-x引擎在内部实现了一个庞大的主循环,每帧之间更新界面,如果耗时的操作 ...
- 【HMTL】3D标签球
这是一个3D TAG 在网站展示中是个不错的东东,能让人眼前一亮,值得收藏. 这个是效果: 源码下载: 点 击 下 载
- MyBatis之七:使用generator工具
可以将mybatis理解成一种半自动化orm框架,通过注解或者配置xml映射文件来手写相关sql语句,不能像我之前介绍orm的文章那样全对象化操作数据库增删改查.其实你会发现,手写配置xml映射文件是 ...
- [MODX] 2. Chunks $
Chunk in Modx can cut your template into samll pieces to make code reuseable. [[$chunk_name]] For ex ...
- [ES6] 18. Map
ES6 provides Map, it is a set of k-v pair. Key can be number, string, object, function and even unde ...
- Opacity多浏览器透明度兼容处理(转)
用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...