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 ...
随机推荐
- Java JDBC调用存储过程:无参、输入带参、输出及输出带参
Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...
- 10: Celery
目录: 1.1 Celery介绍 1.2 celery简单使用 1.3 在项目中如何使用celery 1.4 celery与Django项目最佳实践 1.5 基于步骤1.4:在django中使用计划任 ...
- python识别图片生成字符模式
此python文件来自D7哥, 放在这里备份. 用法 python3 PIL\&argparse.py 1.jpg -o test.txt --width 300 --height 300 p ...
- HihoCoder 1236 Scores - bitset - 分块
Kyle is a student of Programming Monkey Elementary School. Just as others, he is deeply concerned wi ...
- Spring 学习——Spring常用注解——@Component、@Scope、@Repository、@Service、@Controller、@Required、@Autowired、@Qualifier、@Configuration、@ImportResource、@Value
Bean管理注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean 类的注解@Component.@Service等作用是将这个实例自动装配到Bean容器中管理 而类似于@Autowi ...
- 集训DAYn——拉格朗日插值法
看zzq大佬的博客,看到了这个看似很深奥的东西,实际很简单(反正比FFT简单,我是一个要被FFT整疯了的孩子) 拉格朗日插值法 是什么 可以找到一个多项式,其恰好在各个观测点取到观测到的值.这样的多项 ...
- 如何在gvim中安装autoproto自动显示函数原型
cankao: http://www.vim.org/scripts/script.php?script_id=1553 注意, 在gvim中执行的命令, :foo和:!foo 的区别, 跟vim一样 ...
- 集合00_Java集合框架
集合类概述 1.继承树 2.集合和数组 区别如下: 数组可以存储基本数据类型,也可以存储引用类型:而集合只能存储引用类型(比如存储int,它会自动装箱成Integer) 数组长度固定,集合长度可变 3 ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)
随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...
- 论文笔记:Tracking by Natural Language Specification
Tracking by Natural Language Specification 2018-04-27 15:16:13 Paper: http://openaccess.thecvf.com/ ...