Selenium 系列篇(七):分布式
1. 介绍
Selenium 包含 3 大组件,分别是:Selenium IDE、Selenium WebDriver、Selenium Grid
其中,Selenium IDE 负责录制、回放脚本,模拟用户对页面的真实操作
Selenium WebDriver 提供 API 来操作浏览器,比如:Chrome、FireFox、IE 等
Selenium Grid 用于分布式自动化测试,通过控制多台机器、多个浏览器并行执行测试用例,在测试用例比较多的情况下比较实用。
2.安装
要使用 Selenium Grid 完成分布式,首先需要安装 Selenium Server 的 Jar 文件
下载地址如下:
https://www.selenium.dev/downloads/
接着,配置 JDK 运行环境
最后,通过命令行启动 Selenium Grid Server
# 运行Selenium Grid
# 注意:确保先安装JDK环境
java -jar selenium-server-standalone-3.141.59.jar
3. 主节点和代理节点
Selenium Grid 分布式测试是由一个主节点( Hub )、多个代理节点( Node )组成
其中,Hub 用来管理 Node 代理节点的注册、状态信息,接受客户端代码的调用,将命令分发给 Node 来执行
通过 -role 参数,指定 hub 或 node,来启动主节点和代理节点,默认 Hub 的端口号是 4444,node 的端口号是 5555
需要注意的是,如果在一台 PC 上启动多个 Node,需要利用 -port 参数显式指定不同的端口号
# 启动一个主节点Hub
# 参数:-role hub
java -jar selenium-server-standalone-3.141.59.jar -role hub
# 启动多个代理节点
# 注意:如果在同一台机器上,需要利用 -port 定义不同的端口号
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555
java -jar selenium-server-standalone-3.141.59.jar -role node -port 6666
java -jar selenium-server-standalone-3.141.59.jar -role node -port 7777
最后,在浏览器中输入下面的地址,即可以进行控制台
http://127.0.0.1:4444/grid/console
界面和命令行可以看到 3 个 Node 已经注册到 Hub 成功
需要注意的是,如果 Node 代理节点不在本地,需要在对应 PC 上配置 JDK 环境,运行 Selenium Server 及浏览器驱动。
比如:本地 Hub 主节点的 IP 地址为 192.168.1.101,Node 代理节点的 IP 地址为 192.168.1.102
那么 Node 启动必须使用 -hub 参数显式指定 Hub 进行注册:
# 启动一个主节点Hub
# IP地址:192.168.1.101
java -jar selenium-server-standalone-3.141.59.jar -role hub
# 启动远程Node代理节点并进行注册
# IP地址:192.168.1.102
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub http://192.168.1.101:4444/grid/register/
4. 实战
实际项目中,使用 Selnium Grid 完成分布式的操作步骤如下:
第 1 步,在本机启动一个 Hub 主节点,可以显式指定端口号,或者保持默认的:4444
# 启动一个hub
java -jar selenium-server-standalone-3.141.59.jar -role hub
第 2 步,在本地或远程启动多个 Node 代理节点
需要注意的是,同一 IP 地址,端口号不能相同
# 启动一个代理节点Node
# 注意:同一IP地址,端口号不能相同
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub http://192.168.1.101:4444/grid/register/
第 3 步,编写测试用例,以打开 Google 为例
利用 Selenium WebDriver 的 Remote() 方法,通过 desired_capabilities 参数指定浏览器驱动
from time import sleep
from selenium.webdriver import Remote,DesiredCapabilities
# 指定Hub主机及浏览器驱动
driver = Remote(
command_executor='http://192.168.183.1:4444/wd/hub',
desired_capabilities=desired_capabilities=DesiredCapabilities.CHROME.copy())
driver.get('http://google.com')
sleep(10)
driver.quit()
第 4 步,运行测试脚本
运行上面的测试脚本,Hub 主节点会自动分配到满足条件的 Node 节点去运行