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 ...
随机推荐
- 浅谈IT员工管理
本人尽管还不是管理人员,但也管理过学弟们(不是同校.仅仅是工作中同事,为了好称呼叫学弟).也被管理着,工作也好多年了.今天又感而发.想来谈谈假设管理好员工(在此声明,我仅仅是发表个人意见哦.不要喷.哈 ...
- HDU 4293 Groups (线性dp)
OJ题目:click here~~ 题目分析:n个人分为若干组 , 每一个人描写叙述其所在的组前面的人数和后面的人数.求这n个描写叙述中,最多正确的个数. 设dp[ i ] 为前i个人的描写叙述中最多 ...
- 04.URL路径访问与模块控制器之间的关系
<?php //初使化,进行加载. //通过这个英文名来了解,他是定义的与thinkphp有关的核心框架文件目录路径 //他可以通过这一个常量,在以后运行的时候都去找这个路径,确保在运行过程当, ...
- FZU 2169 shadow (用了一次邻接表存边,树形DP)
Accept: 28 Submit: 97 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description YL是shadow国的国 ...
- ios开发——实用技术篇Swift篇&多点触摸与手势识别
多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...
- centosx64位寄存器
[root@monitor ~]# uname -aLinux monitor 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 20 ...
- Type mytableview does not confirm to portocol UITableViewDataResource
继承UITableViewDataSource报上面这个总是,是重写协议时写错了 override func numberOfRowsInSection(section: Int) -> Int ...
- mysql 批量插入数据过多的解决方法
使用场景: 测试时需要插入100w的数据,跑sql脚本插入非常慢. 存储过程如下: //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; cr ...
- c语言字符串实例
例子:涉及字符串.字符.指针.++等 例一:字符串与字符 #include <stdio.h> void reverse(char *str) { char *end=str; print ...
- Spreadsheet Tracking
Spreadsheet Tracking Data in spreadsheets are stored in cells, which are organized in rows (r) and ...