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 ...
随机推荐
- oracle 12c AUTO_SAMPLE_SIZE动态采用工作机制
The ESTIMATE_PERCENT parameter in DBMS_STATS.GATHER_*_STATS procedures controls the percentage of ro ...
- spring boot @Scheduled未生效原因以及相关坑、及相对其他定时任务架构的优势
在spring boot中,支持多种定时执行模式(cron, fixRate, fixDelay),在Application或者其他Autoconfig上增加@EnableScheduling注解开启 ...
- Android之单元测试及数据库操作
一.安卓下的单元测试1.创建一个单元类,继承超类AndroidTestCase2.在AndroidManifest.xml配置清单中配置以下两点首先在manifest节点下添加节点instrument ...
- jq svg 修改image的xmlns:xlink及图片的显隐
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- kali linux web程序集简述
Burp Suite Burp Suite是一个用于执行Web应用程序安全性测试的集成平台. 它的各种工具可以无缝地协同工作,支持整个测试过程,从应用程序攻击面的初始映射和分析,到查找和利用安全漏洞. ...
- topcoder srm 460 div1
problem1 link 设$f[i][j]$表示已经分配了answers中的前$i$个,分配给的问题的状态为 $j$的方案数. 其中状态可以用$n$位的三进制表示,0表示还未分配,1表示已分配是 ...
- php编程疑难解决-1
全局变量和超全局变量 如果是php脚本script 或php代码, 一定要放在 php标签内<?php ?> 内. 这样apache才会把他当做php脚本内容来解析, 才会去调用php模块 ...
- vba编程基础1
在主要的编程语言中, 结构体是用大括号来表示 代码段的 范围 界定的. 但是在一些比较"老的"语言中,由于历史原因, 还是使用的 是: 关键字来进行界定代码 的 结构段, 如vba ...
- SpringBoot 使用Hikaricp连接池
1.添加pom.xml依赖 如果是SpringBoot2.0,那么默认的连接池就是Hikaricp,不需要配置 其他的,如果继承 <parent> <groupId>org.s ...
- 关于msf反弹后门的免杀Tips
msf是一个很强大的工具,我经常会在渗透用它来反弹shell,不过它生成的反弹后门会被不少杀软kill,这篇文章只是讲讲我在msf中一个简单的免杀小技巧 思路 我以前接触过一款python的远控,其实 ...