[Selenium] Grid 介绍
Selenium Grid 支持分布式测试,使测试人员可在分布式环境中进行测试
一般而言,在面临以下情况时可考虑使用Selenium Grid :
1.测试多个浏览器或单个浏览器多个版本,或测试不同操作系统上各种浏览器
2.减少测试套件运行时间
Selenium Grid 包含一个Hub 和至少一个 Node,两者都可由 selenium-server-standalone.jar 文件启动
Selenium Grid 的部署
1.安装Selenium Grid :从Selenium 官网下载 selenium-server-standalone.jar 文件即可。Java 可执行文件的路径必须正确,这样才能从命令行运行文件,如果运行出错,检查系统的路径变量看其是否依据包括Java 可执行文件的路径
2.启动Selenium Grid :一般而言,运行Selenium Grid 需要先启动Hub,因为 Node 的调用依赖于 Hub
1、Grid Hub
1)默认启动 Hub
用下面的命令可启动默认设置的Hub
$java -jar selenium-server-standalone-2.37.0.jar -role hub
所有可支持操作系统都能调用该命令。需要注意的是根据selenium-server-standalone 版本的不同,jar 文件名里的版本号需要有相应改动。Hub 启动的默认端口号为4444,用户可通过 -port 参数来定义其启动端口
可通过浏览器中输入如下地址来检查 Hub 是否启动成功:
http://localhost:4444/grid/console
单击view config 可查看Selenium Grid 的配置信息,默认情况下,单个Hub 支持的最大会话数为5个
2)配置 Hub 端口
Hub 默认端口是4444,当自动化测试用例连接到 Selenium Grid Hub 时,监听端口就是TCP/IP 端口,如果机器上已经有另一个程序在使用这个端口,或 selenium-server-standalone 已经被启动,日志会提示端口已经被占用而无法启动Selenium Grid Hub 。
解决方案之一是关闭正在使用4444端口的程序,解决方案二是让 Selenium Grid Hub 使用另一个端口。在命令行中用 -port 更换 Hub 使用的端口:
$java -jar selenium-server-standalone-2.37.0.jar -role hub -port 8888
该方法即使在已有Hub 在机器上运行时也能奏效,只要这两个 Hub 所使用的端口不一样。
如果想知道机器上所有正在运行的程序使用哪些端口,可用下面命令:
$netstat -a
3)JASON 配置文件
除了在启动命令中指定参数来定制 Hub 的配置,还可以通过预定义好的配置文件来启动 Hub。这些配置信息可写在一个 JASON 格式的配置文件中,示例:
{
"host":null,
"port":4444,
"timeout":300000,
"maxSession":5,
...
}
然后通过在启动命令中添加 -hubConfig 参数来加载该 JASON 配置文件
$java -jar selenium-server-standalone-2.37.0.jar -role hub -hubConfig
hub-json-cfg.json
2、Grid Node
1)默认启动 Node
通过如下命令;
$java -jar selenium-server-standalone-2.37.0.jar -role node -hub
htttp://localhost:4444/grid/register
这里假设默认设置的 Hub 已经被启动。Hub 用来监听新请求的默认端口是4444,所以定位 Hub 的URL 中使用了4444这个端口。使用本地主机是假定 Node 和 Hub 在同一台机器上运行。
如果在不同机器上运行 Node 和 Hub,则需要将本地主机名替换成运行Hub 的机器的主机名。在这种情况下,Node 会将本机操作系统所能支持的浏览器信息全部注册到 Hub 上。
如果将参数-roal node 替换成 -role webdriver,则表示该 Node只兼容WebDriver 的执行模式。相应的,如果替换成 -role rc,则表示该Node 只兼容 Remote Control 的执行模式
2)注册 Mac OS X&Opera
2种方式将Node 注册到 Hub上,第一种是通过命令行的方式添加,只需要加上相应的参数:
$java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=opera,version=15,maxInstances=1,platform=MAC" -hubHost localhost
可通过浏览器中输入如下地址来检查 Hub 是否注册成功:
http://localhost:4444/grid/console
第二种方式是创建一个 JASON 格式的配置文件,并在启动 Node 时加载该JSON 配置文件
{
"class":"org.openqa.grid.common.RegistrationRequest",
"capabilities":[
{
"seleniumProtocol":"WebDriver",
"browserName":"opera",
...
}
],
"configuration":{
"maxSession":5,
...
}
}
然后通过在启动命令中添加 -nodeConfig 参数来加载该 JASON 配置文件
$java -jar selenium-server-standalone-2.37.0.jar -role node -nodeConfig
hub-json-mac-opera.cfg.json
3)注册 Linux & Firefox
如果系统中存在多个浏览器版本,则需要指定浏览器的可执行程序路径。本示例设定的配置项如下:
执行模式为WebDriver,以Firefox 最新版本的路径firefox_binary 为例,maxInstances 设置为2,表示最大支持2个浏览器实例的执行
$java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=firefox,version=25,firefox_binary=/home/selenium2/firefox25/firefox maxInstances=2,platform=LINUX" -hubHost 192.168.0.104
4)注册 windos & Internet Explorer
C:\Selenium2> java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=Selenium, browserName=iexplore,version=10,maxInstances=4,platform=WINDOWS" -hubHost 192.168.0.104
5)注册 Android & Chrome
首先要设置转发端口,命令如下,其作用是确保主机与Android 模拟器或真机可以进行通信
$./adb -s<serialId> forward tcp:8080 tcp:8080
如果是在 LInux 环境下操作,可通过如下命令安装 socat 并设置端口转发。其作用是确保在另外一台机器上也可以访问当前机器上的Android WebDriver Server
$sudo apt-get install socat
$socat TCP-LISTEN:8889,fork TCP:localhost:8080
通过上面的设置,就可以在网络上任意一个地方通过如下地址来访问 Android WebDriver Server 了;
http://hostname:8889/wb/hub
接下来注册Android 和自带 Chrome 浏览器组合的 Node 到Hub,命令如下,其中端口为8889
$ java -jar selenium-server-standalone-2.37.0.jar -role node -browser "seleniumProtocol=WebDriver, browserName=android,version=4,maxInstances=1,platform=ANDROID" -port 8889 -hubHost 192.168.0.104
6)注册 Appium-iOS & Safari
针对 iOS 平台,这里重点关注如何通过 Appium 这个框架注册 Node 到 Hub 上。可编写一个 JSON 的配置文件,包括相关的操作系统信息、浏览器类型和版本信息等,然后通过 Appium 的命令行方式将该 JSON 配置文件加载进去。JSON 配置文件范例;
{
"capabilities":[
{
"browserName":"safari",
"platform":"MAC",
...
}
],
"configuration":{
"maxSession":1,
...
}
}
JSON 配置文件包括2部分:
1.capabilities:用于配置操作系统、浏览器名称和版本、运行实例等信息。由于org.openqa.selenium.platform 中目前没有官方直接支持 iOS 类型,所以 platform 使用 MAC 即可
2.configuration: 用于配置与 Hub 交互时的信息
接下来通过如下命令和参数 --nodecofig 加载写好的 JSON 配置文件;
$ appium --nodeconfig node-json-appium-ios.cfg.json
加载成功会看到如下打印信息:
...
info:Responding to client with success...
7)注册多个不同类型的浏览器
如果需要在一个 Node 上同时运行多个不同类型的浏览器实例,可通过在JSON 配置文件中将所有能支持的浏览器信息定义进去,然后通过命令行方式一次性加载并将相关信息注册到 Hub 上。JSON 示例:
{
"capabilities":[
{
"browserName":"firefox",
"version":23,
"maxInstances":5,
"seleniumProtocol":"WebDriver",
},
{
"browserName":"firefox",
"version":3.6,
"maxInstances":5,
"seleniumProtocol":"WebDriver",
},
{
"browserName":"chrome",
"version":28,
"maxInstances":5,
"seleniumProtocol":"WebDriver",
},
...
],
"configuration":{
"maxSession":5,
...
}
}
通过如下命令加载JSON 配置文件,并同时注册到 Hub 上
$ java -jar selenium-server-standalone-2.37.0.jar -role node -nodeConfig node-json-multiple-browsers.cfg.json
3.编写Grid 的测试用例
1)对于执行模式为WebDriver 的Node,要使用 RemoteWebDriver 和 DesiredCapatilities 示例代码:
DesiredCapabilities firefoxCap=DesiredCapabilities.firefox();
firefoxCap.setBrowserName("firefox");
firefoxCap.setVersion("25");
firefoxCap.setPlatform("LINUX");
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), firefoxCap);
如上述代码所示,需通过 DesiredCapabilities 来设置测试用例使用的浏览器名称、浏览器版本和操作系统平台。这样就可以确保该测试用例被Hub 分配到同时满足以上三个条件的 Node 上执行
2)对应执行模式为 Remote Control 的 Node,则需要使用 DefaultSelenium,示例代码
Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.baidu.com");
[Selenium] Grid 介绍的更多相关文章
- Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- 自动化测试-Selenium家谱介绍
一.自动化测试定义 自动化测试是通工具录制或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证. 二.什么样的项目适合做自动化测试 1.需求明确,不会 ...
- 配置selenium grid
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- selenium+grid做分布式测试
一.grid介绍 1.本文用的是selenium-server-standalone-3.8.1.jar 2.Firefox用的55版本和对应的驱动 二.grid使用流程说明比如有个A机器,作用是hu ...
- .NET自动化测试工具:Selenium Grid
在生产环境,QA会同时跑几十个上百个的test case.如果用单机串行的话,是一件非常耗时的事情,估计比手点快不了多少.使用并行方案的话,有两种方法,一个是自己写并行框架,一个是用现成的Seleni ...
- python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍
1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...
- Selenium Grid的原理、配置与使用(转)
Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...
- 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_195 "世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的-",这是电影<卡萨布拉卡> ...
随机推荐
- Linux设置文件与Shell操作环境
Shell设置文件读取流程 /etc/shells记录了Linux系统中支持的所有shell,默认使用bash.用户登入Linux系统时会获取到一个shell,具体获取到哪个shell与登录账号有关, ...
- android 活动
一.Activity 声明周期 1 创建 把页面上的个元素加载到内存 onCreate 2 开始 把页面显示到屏幕 onStart 3 恢复 让页面在屏幕活动 onResume 4 暂停 停止页面动作 ...
- Hihocoder 1561 观光旅行(启发式合并+贪心)
题目链接 Hihocoder 1561 首先对原图求$MST$ 我们发现某条边成为某两个点的关键路径的必要条件是这条边是最小生成树的树边. 所以我们求$MST$的同时进行启发式合并. 把$size$小 ...
- Jetson TK1 二:usb无线网卡的使用
一.总体是按照群里的文档“TK1连接无线网络”的步骤操作的,但也遇到了一些问题,如下: 1.自动配置设备并下载内核源代码到指定的目录下时(估计是解压时),出现时间超前之类的问题,原因是当前本地时间是几 ...
- Wannafly练习赛14
B(倍增) 题意: 分析: 先可以用two point预处理出以每个位置为起点的连续段<=k的下一个终点 然后对于每个询问,倍增跳就行了 时间复杂度O(nlogn) C(扫描线处理区间询问) ...
- HDC与CDC相互转换
转自loop_k原文 HDC与CDC相互转换 概念 首先说一下什么是DC(设备描述表):Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC) ...
- poj 2135 Farm Tour 最小费最大流
inf开太小错了好久--下次还是要用0x7fffffff #include<stdio.h> #include<string.h> #include<vector> ...
- OC - 读歌词
类的头文件: #import <Foundation/Foundation.h> //FILE_PATH是文件名称. #define FILE_PATH @"/Users/qia ...
- Linux学习系列之Iptables
iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分.可以直接配置,也可以通过许多前端和图形界面配置. 语法 iptables(选项)(参数) 选项 -t<表&g ...
- ubuntu 14.04安装nodejs
http://stackoverflow.com/questions/32902699/cannot-install-ember-on-ubuntu-1404/33495134