Selenium Grid 分布式 | 介绍与实战


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 节点去运行





作者:星安果


欢迎关注微信公众号 :Python测试社区