selenium Grid2 分布式自动化测试环境搭建
一、Selenium Server 环境配置
1、selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测试方案就是使用 selenium grid,hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。
其结构组成:

2、下载 Selenium Server
下载地址:http://www.seleniumhq.org/download/
根据环境中selenium版本号,选择对应版本的selenium-server-standalone-xxx.jar。
由于运行jar需要有对应的java环境,所以前提是要有java环境,在此略过java环境的大家。
3、运行selenium server
通过命令行,切换到selenium server目录下,执行 java -jar selenium-server-standalone-xxx.jar。即可执行该jar包。

二、Selenium Grid 工作原理
Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构有一个hub主节点和若干个node代理节点组成。hub用来管理各个子节点的注册和状态信息,并接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试的代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node。
#启动主节点
java -jar selenium-server-standalone-xxx.jar -role hub
#启动代理节点
java -jar selenium-server-standalone-xxx.jar -role node
上面的代码分别启动了一个hub 和 一个node ,hub默认端口:4444,node默认端口为5555,若是同一台主机上启动多个node,则需要注意指定端口号,可以通过下面的方式来启动多个node节点。
#启动多个代理节点
java -jar selenium-server-standalone-xxx.jar -role node - port 5555 java -jar selenium-server-standalone-xxx.jar -role node - port 5556 java -jar selenium-server-standalone-xxx.jar -role node - port 5557
使用场景:当测试用例需要验证的环境比较多时,可以并行执行这些测试用例,从而缩短测试总耗时。并行的能力需要借助编程语言的多线程技术,后续会介绍Python的多线程技术,Grid 可以根据用例中指定的平台配置信息把用例转发给符合匹配要求的测试代理。
例如,用例中指定了要在Windows7上用firefox浏览器进行测试,那么Grid会自动匹配注册信息为Windows7且安装了firefox的代理节点,如果匹配成功,则转发测试请求,如果匹配失败则拒绝请求。调用基本结构图如下所示。

一台计算机上可以启动一个hub或多个node节点。
如下图一个主机上启动了一个hub和两个node分支节点。

可以通过浏览器访问Grid的控制台:http://127.0.0.1:4444/grid/console 。
通过控制条查看启动的节点信息。

三、Remote应用
1、Remote实例
1.1、首先启动 Selenium Server
java -jar selenium-server-standalone-2.48.2.jar
1.2、编写自动化测试脚本。
#-*-coding:utf-8-*-
#Time:2017/8/24 23:33
#Author:YangYangJun from selenium import selenium
from selenium.webdriver import Remote
import time driver = Remote(command_executor='http://localhost:4444/wd/hub',
desired_capabilities={'platform':'ANY',
'browserName':'firefox',
'version':'',
'javascriptEnabled':True}) driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('remote')
driver.find_element_by_id('su').click()
time.sleep(5)
driver.quit()
从上面的代码可以看出,Remote()方法配置来看,相当于直接使用了webdriver.Firefox(),但是Remote()却大大增加了配置的灵活性。
DesiredCapabilities 品台及浏览器的参数如下:
FireFox = {'platform':'ANY', 'browserName':'firefox', 'version':'', 'javascriptEnabled':True, 'marionette':False }
Chrome = {'platform':'ANY', 'browserName':'chrome', 'version':'', 'javascriptEnabled':True }
Opera= {'platform':'ANY', 'browserName':'opera', 'version':'', 'javascriptEnabled':True }
Iphone= {'platform':'MAC', 'browserName':'iPhone', 'version':'', 'javascriptEnabled':True }
Android = {'platform':'ANDROID', 'browserName':'android', 'version':'', 'javascriptEnabled':True }
.
.
.
.
.
四、参数化平台及浏览器
1、启动本地node
实例如下:先创建list 字典,定义不同的主机ip,端口号及浏览器。然后,通过for循环读取lists字典中的数据作为Remote()的配置信息,从而使脚本在不同的节点及浏览器下执行。
#-*-coding:utf-8-*-
# Time:2017/9/18 23:37
# Author:YangYangJun from selenium import selenium
from selenium.webdriver import Remote
import time lists = {'http://localhost:4444/wd/hub':'chrome',
'http://localhost:5555/wd/hub':'firefox'} for host,browser in lists.items():
print (host,browser)
driver = Remote(command_executor=host,
desired_capabilities={'platform': 'ANY',
'browserName': browser,
'version': '',
'javascriptEnabled': True}) driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('remote')
driver.find_element_by_id('su').click()
time.sleep(5)
driver.quit()
2、启动远程node
2.1、前置条件:
2.1.1、本地hub主机与远程node主机之间可以用ping命令连通。
2.1.2、远程主机必须安装用例执行的浏览器驱动,并且驱动要放到环境变量path的目录下。
2.1.3、远程主机必须安装java环境,因为需要运行Selenium Server。
2.2、操作步骤:
2.2.1、启动本地hub主机,查看主机ip
java -jar selenium-server-standalone-2.48.2.jar -role hub
2.2.2、启动远程主机,查看ip
java -jar selenium-server-standalone-2.48.2.jar -role node -port 5555 -hub http://hup主机ip:4444/grid/register
lists = {'http://localhost:4444/wd/hub':'chrome',
'http://node主机ip:5555/wd/hub':'firefox'}
五、知识拓展
1、创建startup.bat文件
在启动Selenium Server时,每次都要输入一长串命令,非常麻烦,可以启动命令生成批处理文件,方法很简单。首先创建一个startup.bat文件。
如下图:

2、另外我们还可以通过VisGrid工具来启动和管理节点,如下图:

3、开机自启动startup.bat
对于分布式测试远程主机,如果每次测试前都要人为启动startup.bat,还是太复杂了。所以想到了开机自启动,首相想到的是做成service,结果没有实现成功。
后选择了开机自启动。
操作步骤如下。
3.1、添加启动快捷方式,通过程序->启动,单击右键,打开所有用户

将快捷方式粘贴到该路径下。

3.2、通过运行执行msconfig,打开系统配置

然后勾选所要启动的程序,点击全部启动即可。至此,每次开机后,系统会自动执行startup.bat。缺点是每次都会弹出一个命令行窗口。

六、使用过程常遇到的问题
1、驱动没有添加到环境变量中。
2、配置了环境变量,但是仍然报错。如下图
产生原因:参照了网上 java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register -Dwebdriver.firefox.driver=firefox.exe -browser browserName=firefox 这种写法。其实这种写法对于firefox有些多余。
直接这样写就行: java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register

3、chrome 浏览器启动报错。

同样是这种写法:java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe -browser browserName=chrome
是因为没有在该路径下添加 chromedriver驱动。

解决办法
(1)、在该路径下添加chromedriver即可。
(2)、使用另一种写法:java -jar selenium.jar -role node -port 6666 -hub http://192.168.1.132:4444/grid/register
selenium Grid2 分布式自动化测试环境搭建的更多相关文章
- Selenium Grid分布式测试环境搭建
Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...
- selenium+java+chrome 自动化测试环境搭建
安装jdk (jdk 配置环境变量) eclipse(可用免安装的) 安装谷歌浏览器 下载chorme driver (chorme driver 也要配置环境变量,将chormedriv ...
- Python+selenium+eclipse+pydev自动化测试环境搭建
一. 安装python 1.下载安装python 可访问python的官方网站:http://www.Python.prg找到下载页面下载需要的版本,可下载python2.x或者pyth ...
- selenium java maven自动化测试环境搭建
版本说明: JDK 版本:1.8.0_112: Eclipse IDE: 4.6.1: Maven 版本:apache-maven-3.3.9: Selenium 版本: 3.0.1: Firefox ...
- selenium +python web自动化测试环境搭建
基础框架搭建 1.安装python 2.安装selenium cmd输入pip install selenium 问题:在python中输入from selenium import webdriver ...
- Selenium + Python + Chrome 自动化测试 环境搭建
一.下载Python 相关的教程很多,此处不详细记录了,下面是官网下载地址: https://www.python.org/downloads/ 我使用的python版本为 Python 3.6.1 ...
- selenium + python网页自动化测试环境搭建
1.python的安装 ,这个不解释,exe文件运行安装即可,既然你选择python,相信你是熟悉python的,我安装目录C:\Python27 2.setuptools 的安装也非常简单,同样是e ...
- selenium + python 自动化测试环境搭建
selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...
- Selenium终极自动化测试环境搭建(二):Selenium+Eclipse+Python
前面举例了Selenium+Eclipse+Junit+TestNG自动化测试环境的搭建,在前一篇的基础上,下面再举例Selenium+Eclipse+Python测试环境搭建. 第一步:安装Pyth ...
随机推荐
- Linux 流量监控工具 iftop
Linux 流量监控工具 iftop Iftop工具主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同哪台机器间的流量大小,非常适合于代理服务器和iptables服务器使用,这样可以方便的查 ...
- oracle exadata一体机虚拟机
14年参加partner培训的时候,拿了份oracle exadata一体机虚拟机,有兴趣的可以试试,不过比较大,压缩后10GB,解压后50GB,启动后直接可用,2RAC节点+1存储节点,环境最好内存 ...
- com.mchange.v2.c3p0.impl.NewPooledConnection@be1839d closed by a client的正确解答
关于c3p0在debug模式下控制台抛出的如下异常: java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE at com.mchange. ...
- linux下部署git服务器
我这里用的是redhat7.4, 直接开始吧. 环境 服务端: Redhat7.4 + git(version 1.8.3.1) IP:192.168.137.168 客户端: win7 + git ...
- jQuery中清空元素.empty()和.html(''),两种方法的对比
jQuery 中有 .empty() 和 .html() 两种方式,都能够清空所选父元素中的所有子元素.但是这两者清空元素的方式上,有着很大的区别: 1.empty() jQuery对象.empty( ...
- topcoder srm 445 div1
problem1 link 这个的结论是只需要考虑坐标是整数或者是整数.5,比如(2.5,3),(4,3.5),(1.5,4.5)这样的时候.这个详细证明起来应该挺麻烦的.这里有一些讨论. probl ...
- P4097 [HEOI2013]Segment(李超树)
链接 https://www.luogu.org/problemnew/show/P4097 https://www.lydsy.com/JudgeOnline/problem.php?id=3165 ...
- jvm:分析工具
bin/jvisualvm.exe 可查看类实例数 bin/jconsole.exe 监控线程,堆,等 http://blog.csdn.net/yaowj2/article/details/7107 ...
- [mybatis错误] - sql出错 org.apache.ibatis.ognl.ParseException: Encountered "!" at line 1, column 15. Was expecting one of:
完整异常:Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'developerTy ...
- 【C#】C#学习笔记_1
C#的程序入口为某一个类里面的static void Main(string[] args){}方法,如果一个工程有多个Main方法,那么需要在工程配置中选择一个作为程序入口. C#的输入.输出操作在 ...