「Selenium Grid 3」- 在远程主机中执行测试任务 @20210412

Selenium Grid

Selenium 用于自动化测试,但是只能运行在本地环境中,即启动本地浏览器进行测试任务。而通过 Selenium Grid 集群,可以在多台远程主机中同步执行自动化测试任务。

如图所示,Client 连接 Hub 并发送任务,然后 Hub 将测试任务下发到 Node 进行执行(摘自 Selenium Grid 3 文档):

在该笔记中,我们将介绍如何搭建 Selenium Grid 3 环境,并编写最简单的演示程序。

注意事项,官方不再支持 Grid 3 版本,官方建议使用 Grid 4 版本。但是目前(08/30/2020)Grid 4 的文档并不完善,并且 Grid 3 的实践经验较多,因此我们使用 Selenium Grid 3 版本。

第一步、搭建 Seleium Grid 集群

Hub: 172.31.253.49, CentOS Linux release 7.5.1804 (Core)
Node: 172.31.253.103, Ubuntu 20.04 LTS

运行 Hub 节点

yum install -y java-1.8.0-openjdk
mkdir -pv /srv/selenium-hub && cd /srv/selenium-hub
wget https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar

# 配置 systemd 服务
cat > /etc/systemd/system/selenium-hub.service < 
   

当服务运行成功后,在日志中将看到类似如下信息:

Started Selenium Grid Hub.
Starting Selenium Grid Hub...
23:02:46.538 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
23:02:46.739 INFO [GridLauncherV3.lambda$buildLaunchers$5] - Launching Selenium Grid hub on port 4444
2020-08-29 23:02:47.289:INFO::main: Logging initialized @1155ms to org.seleniumhq.jetty9.util.log.StdErrLog
23:02:47.596 INFO [Hub.start] - Selenium Grid hub is up and running
23:02:47.597 INFO [Hub.start] - Nodes should register to http://172.31.253.49:4444/grid/register/
23:02:47.598 INFO [Hub.start] - Clients should connect to http://172.31.253.49:4444/wd/hub

运行 Node 节点

远程主机需要运行桌面环境。如果无法运行桌面环境,可以使用 xvfb 服务。为了简化问题与演示,我们使用桌面环境。

进入桌面环境,输入用户名密码进行登录(这里不再赘述详细过程)。

apt-get install chromium chromium-chromedriver

# 运行 node 服务
apt-get install openjdk-8-jdk
mkdir -pv /srv/selenium-node && cd /srv/selenium-node
wget https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar
java -jar /srv/selenium-node/selenium-server-standalone-3.141.59.jar -role node -hub http://172.31.253.49:4444

# 这里没有介绍开机启动的方法
# 可以使用 xdg autostart 进行(详细过程不再赘述,通常是在 ~/.config/autostart 添加 .desktop 文件)

访问 http://172.31.253.49:4444/grid/console 查看注册到 Selenium Hub 的 Selenium Node 节点

附加说明:如果无法运行桌面环境,可以研究 xvfb xvnc 等等工具。

第二步、编写测试任务,并执行

from selenium import webdriver

driver = webdriver.Remote(
   command_executor='http://172.31.253.49:4444/wd/hub',
   desired_capabilities={'browserName': 'chrome', 'javascriptEnabled': True})

driver.get("https://example.com")

在正常情况下,我们测试程序连接 172.31.253.49(Hub),将控制远程主机 172.31.253.103(Node)启动 Chromium 浏览器,并打开 example.com 页面。

附加说明

在启动 Hub 与 Node 服务时,除了在命令行指定配置参数,还可以使用 JSON 配置文件,更多细节请参考官方 Setting up your own :: Documentation for Selenium 文档(我们的笔记只记录最简单的操作)

另外,本地运行 Selenium 的自动化测试场景不多,多数场景需要在 Selenuim Grid 中执行自动化测试,因此我们的实例代码也以能在 Selenium Grid 中运行为准,但是运行在 Selenium 中的代码与运行在 Selenium Grid 中的代码差别并不大。

相关文章

「Selenium」- 搭建本地环境(Linux)

参考文献

Grid :: Documentation for Selenium
A simple tutorial of using selenium grid in python unittests

你可能感兴趣的:(「Selenium Grid 3」- 在远程主机中执行测试任务 @20210412)