selenium-Grid的定义
Selenium-Grid允许您在不同的机器上并行地针对不同的浏览器运行测试。也就是说,针对运行不同浏览器和操作系统的不同计算机同时运行多个测试。从本质上讲,Selenium-Grid支持分布式测试执行,它采用Hub和Node模式。它允许在分布式测试执行环境中运行测试。
selenium Hub用来管理各个selenium Node的注册信息和状态信息,并且接收远程客户端代码的测试调用请求,并把请求命令发送给符合要求的selenium Node执行。
Selenium Grid工作原理
Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。下面结合环境部署来理解Hub与node节点的关系。
Selenium Grid 配置与安装
1.安装java
为了更好的讲解并演示、我将我自己的jdk卸载了重新安装一遍、首先我进入公司的共享资源
文档中拿到了我想要的jdk、拷贝到自己的电脑上、我也给大家准备了现在路径。
https://www.jdkdownload.com/
官网需要科学上网可能大家都无法进入所以给大家分享一个这个下载地址
进入后按照自己的版本进行下载建议jdk8以上、进行下载exe或者zip、目前是在windows系统上进行搭建环境、之后也会出linux版本及docker版本。
现在完后进行安装jdk
1.1 安装jdk
更改安装目录
开始安装了、很简单
再次修改安装目录、不能是相同目录 这次是安装sdk可以无需安装
1.2 配置环境变量
JAVA_HOME = jdk安装的目录指定到bin目录
JRE_HOME = 与上面一样指定到jre目录下
进行确定保存后在path系统变量中添加
%JAVA_HOME%
%JRE_HOME%\bin
保存后进行验证java是否安装成功且变量配置成功
java -version
出现上面内容上面安装成功
2.下载 selenium-server-standalone-2.53.1.jar
下载地址:http://selenium-release.storage.googleapis.com/index.html
进行选择需要下载的版本
下载后进行进入下载目录、为了更好的使用命令行我们可以将.jar的文件名称修改为selenium-server也可以不进行修改
我们简单的使用一下
3.启动selenium-server hub
进行打开dos命令窗口需要在.jar文件目录下进行输入一下命令
java -jar selenium-server.jar -role hub -maxSession 10 -port 4444
复制
参数简单介绍
-jar 进行让java指定本次启动的是一个jar包
-role 为指定当前的机器的角色(hub/node)
-maxSession 为最大会话请求,这个参数主要要用并发执行测试用例,默认是1,建议设置10及以上。
-port 设置端口
运行起来了我们可以在浏览器中使用命令窗口显示的url地址
http://192.168.5.113:4444/grid
能打开就是正常启动了
下面我们进行加入node机器
一样的在需要的node机器上安装java与selenium-server
下面我们来启动一下node机、hub机器与node机器可以是同一台机器
java -jar selenium-server.jar -role node -port 5555 -hub http://192.168.0.245:4444/grid/register -maxSession 5 -browser browserName=firefox,seleniumProtocol=WebDriver,maxInstances=5 ,platform=WINDOWS,version=45.0.2
复制
复制
运行成功
可以看到连接的数量 http://192.168.5.113:4444/grid/register
这样我们的selenium grid 环境就基本搭建完成了、比较简单;
Selenium Grid使用
我们现在需要代码实现了
实例1
from selenium import webdriver
import os
#
chrome_driver = os.path.abspath(r"D:\node\chromedriver.exe")
os.environ["webdriver.chrome.driver"] = chrome_driver
chrome_capabilities = {
"browserName": "chrome", # 浏览器名称
"version": "", # 操作系统版本
"platform": "ANY", # 平台,这里可以是windows、linux、andriod等等
"javascriptEnabled": True, # 是否启用js
"webdriver.chrome.driver": chrome_driver
}
driver = webdriver.Remote("http://192.168.5.113:8888/wd/hub", desired_capabilities=chrome_capabilities)
# driver.set_window_size(1280,720)\
# driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
print(driver.title)
driver.quit()
复制
运行后就可以正常启动浏览器执行分布式浏览器执行了;
selenium grid 进阶
什么时候用Selenium Grid
同时在不同的浏览器、操作系统和机器上运行测试。最大程度用于兼容性测试
减少运行时间
怎样启动Selenium Grid?
启动Selenium Grid
的三种方式,一种直接用命令行,另一种用JSON
配置文件,最后一种docker
启动。
json 文件配置详解
hub机配置
{
"host": null,
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 300000,
"browserTimeout": 0,
"maxSession": 5
}
复制
复制
hub 全部参数详解
参数 | 描述 | 实例 |
port | 宿主机端口 | hub端口 |
newSessionWaitTimeout | 即没有超时;指定一个新的测试session等待执行的间隔时间。即一个代理节点上前后2个测试中间的延时时间,单位为毫秒 | 默认-1 |
servlets | 在hub上注册一个新的serlet | 访问地址为/grid/admin/XXXserlet |
throwOnCapabilityNotPresent | 如果为true则hub只有在当前有测试代理注册的情况下才会接受测试请求;如果为false则如果当前没有代理注册也会接受请求保存到队列直到有代理注册为止。 | 默认为true |
capabilityMatcher | 一个实现了CapabilityMatcher接口的类,默认指向org.openqa.grid.internal.utils.DefaultCapabilityMatcher;该类用于实现grid在分布测试任务到对应代理时所使用的匹配规则,如果想要更精确的测试分配规则,那么就注册一个自己定义的匹配类。 | 默认无需修改 |
prioritizer | 一个实现了Prioritizer接口的类。设置grid执行test任务的优先逻辑 | 默认为null,先来先执行 |
host | 指定hub机的ip或者host值 | |
browserTimeout | 浏览器无响应的超时时间 | |
timeout | 所有浏览器运行超时时间,运行超过此时间则会自动回收session,关闭浏览器 | |
cleanupCycle | 代理节点检查超时的周期 |
node注册
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 10,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 10,
"version": "82.0.3684.1",
"wedriver.chrome.driver":"chromedriver.exe",
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 10,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://192.168.1.107:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
复制
复制
node json及全部参数详解
参数 | 描述 | 实例 |
port | 节点机端口 | node端口 |
browserName | 节点机启动浏览器的名称 | 这个就是设置浏览器的参数啦,这个很重要;browserName表示浏览器名字,如chrome、firefox、ie;,这个值很关键,不能大于前面的值,否则可能会出错; |
version | 表示浏览器版本 | |
platform | 表示操作系统 | ANY为默认、这里可以是windows、linux、andriod等等 |
role | 机器角色 | |
maxSession | 为最大会话请求,这个参数主要要用并发执行测试用例,默认是1,建议设置10及以上。 | 默认-1 |
servlets | 在hub上注册一个新的serlet | 访问地址为/grid/admin/XXXserlet |
maxInstances | 表示最大实例,可以理解为最多可运行的浏览器数 | |
nodeTimeout | 客户端的无心跳超时时间 | |
hub | hub机地址ip | |
nodePolling | hub检查代理节点的周期 | |
unregisterIfStillDownAfter | 单位毫秒,设定代理节点在无响应多长时间后hub才会注销代理节点注册信息 | 默认1分钟 |
registerCycel | 代理节点自动重新注册的周期,单位毫秒;适应于重启了hub时不需要重启所有的代理节点。 |
命令行
java -jar selenium-server.jar -role hub -hubConfig hubconfig.json
java -jar selenium-server.jar -role node -hubConfig nodeconfig.json
复制
复制
下一章进行全面实战演示
1.分布式实战
2.linux搭建分布式环境