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 ... 
随机推荐
- 【题解】Luogu P2572 [SCOI2010]序列操作
			原题传送门:P2572 [SCOI2010]序列操作 这题好弱智啊 裸的珂朵莉树 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 操作1:把区间内所有数推平成0,珂朵莉树基本操作 ... 
- Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定
			Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ... 
- Java利用JNI调用C/C++写成的DLL
			前言 由于学期作业的要求,笔者需要开发一个语音识别系统.出于对Java的热爱,笔者非常想用Java来写上层程序(前台+数据库的三层),又要用到Microsoft Speech SDK,所以在这些条件下 ... 
- Java1的内容(学期总结)
- sublime3 快速创建html模板
			1 安装 Package Control1.1 ctrl + ` 呼出控制台1.2 复制(不要带最外层的双引号,该代码仅适用于sublime text 3)“import urllib.request ... 
- python --- 03       整型       bool      字符串     for循环
			一.整型(int) 基本操作: 1.+ - * / % // ** 2. .bit_length() 计算整数在内存中占⽤的⼆进制码的⻓度 如: 二.布尔值(bool) True False 1. ... 
- Bootstrap3基础 form-group 输入框之间出现间隔
			内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ... 
- Django框架 (一) 虚拟环境配置及简单使用
			虚拟环境 什么是虚拟环境 对真实的python解释器的一个拷贝版本 是事实有效的,可以独立存在运行解释python代码 可以在计算机上拷贝多个虚拟环境 为什么要使用虚拟环境 保证真实环境的纯净性 框架 ... 
- 再谈 iptables 防火墙的 指令配置
			手机上使用localhost为什么不能访问? 电脑上使用localhost 访问主页的原理是 电脑上有网站资源和服务器相关程序apache等的支持, 同时在 电脑的hosts文件中 有 127.0.0 ... 
- P3128 [USACO15DEC]最大流Max Flow
			思路 这个题哪里有那么费脑筋 我们可以树链剖分嘛LCT昨天学的时候睡着了,不是太会 两遍dfs+一个5行的BIT 其实树链剖分学好了对倍增和LCT理解上都有好处 一条路径上的修改 由于一条剖出来的链是 ... 
