1、 简介
- Selenium Grid是Selenium的三大组件( Selenium Webdriver, Selenium IDE )之一,作用是分布式执行测试;
- 它的分布式分布式结构:由一个hub节点和若干个node代理节点组成,即是所谓的master-slave(hub-node)模式。
- 其中,Hub 用来管理 Node 代理节点的注册、状态信息,接受客户端代码的调用,将命令分发给 Node 来执行。
2、 配置
2.1 下载Selenium Server的Jar包:selenium-server-standalone-3.141.59.jar
注意:3.141.0版本有Bug,在同一台机器上开hub和node会报错
2.2 在作为hub的机器上放一份Jar包,然后命令行开启hub:
C:\Python>java -jar selenium-server-standalone-3.141.59.jar -role hub
Hub启动参数说明
参数名称 | 参数含义 |
-role hub | 启动hub服务,等待node注册 |
-hubConfig [jsonfile] | 设置一个符合grid规则的json格式的hub配置文件,详细配置见: https://github.com/SeleniumHQ/selenium/blob/master/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json |
-port | 指定hub端口 |
-host | 指定bub机的ip或者host值,一般不需要设置 |
-newSessionWaitTimeout | 执行一个新的session等待执行的间隔时间,即一个代理节点上前后两个测试间的时间间隔,单位毫秒,默认为-1,即没有超时 |
-browserTimeout | 浏览器无响应的超时时间 |
2.3 在作为node的机器上放同样的Jar包,命令行开启node:
D:\Toolkit>java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.25.107:4444/grid/register/
或在Hub机器上同时开户node:
C:\Python>java -jar selenium-server-standalone-3.141.59.jar -role node -port 5566
Node启动参数说明
参数名称 | 参数含义 |
-role [node|wd|rc] | 为node时,表示注册的RC可以支持所有版本的selenium 为wb时,不支持selenium1,也可以写成webdriver 为rc时,仅支持selenium1 |
-hub hub_url | 注册到hub,hub_url表示hub的访问地址,默认值为:http://hubip:4444/grid/register |
-port | 节点计算机提供远程连接的端口号,也是hub的监听端口 |
-timeout | Node连接hub的超时时间 |
-maxSession | 在一个node节点中,允许最多打开多少个浏览窗口 |
-browser | 设定node计算机允许使用的浏览器信息,如: browserName=firefox,version=60.0,firefox_binary=d:/firefox60/firefox,maxInstances=3,platform=WINDOWS maxInstances:最多允许同事启动的浏览器窗口数 |
-browserTimeout | 浏览器无响应的超时时间 |
-registerCycle | Node间隔多少毫秒去连接hub,以便hub重启时,不需要重启node |
-nodeTimeout | 客户端超时时间 |
-nodeConfig [jsonfile] | 符合grid规则的json格式的node配置文件,详见: https://github.com/SeleniumHQ/selenium/blob/master/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.json |
3、 调整程序来应用分布式运行:
重写封装Driver:
def browser(browser="chrome"):
"""
打开浏览器函数:Firefox、chrome、ie、phantomjs
"""
# 定义多终端浏览器
nodes = [
'http://192.168.25.107:52238/wd/hub',
'http://192.168.25.49:3775/wd/hub',
'http://192.168.25.107:5566/wd/hub'
]
x = random.randint(0,2)
try:
if browser == "firefox":
driver = webdriver.Firefox()
return driver
elif browser == "chrome":
# Chrome有界面模式
sys.stderr.write(nodes[x])
driver = Remote(command_executor=nodes[x],
desired_capabilities={'platform': 'ANY', 'browserName': 'chrome', 'version': '',
'javascriptEnabled': True})
# driver = webdriver.Chrome()
return driver
4、 运行多线程脚本跑用例(runTestcases.py)