持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
Selenium Grid允许通过将客户端发送的命令路由到远程浏览器实例来在远程机器上执行 WebDriver 脚本。
Grid 的目标:
- 提供一种在多台机器上并行运行测试的简单方法
- 允许在不同的浏览器版本上进行测试
- 启用跨平台测试
上章《Selenium Grid4 使用指南(一)》已经介绍了两种运行方式,standalone和hub/node,今天介绍Selenium Grid4提供的另外一种完全分布式的用法,即将所有的组件全部拆开来,可以将每个组件都可以部署在不同的机器上。
主要分为以下组件:
Event Bus主要用于Selenium Grid内部组件之前的通信
java -jar selenium-server-<version>.jar event-bus --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443 --port 5557
Session Queue保存创建Session请求的队列,供Distributor使用
java -jar selenium-server-<version>.jar sessionqueue --port 5559
Session Map保存Session ID和Node节点的映射
java -jar selenium-server-<version>.jar sessions --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443 --port 5556
Distributor从Session Queue中获取到创建Session请求,然后分发给满足要求的Node节点
java -jar selenium-server-<version>.jar distributor --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443 --sessions http://<sessions-ip>:5556 --sessionqueue http://<new-session-queue-ip>:5559 --port 5553 --bind-bus false
Router负责接收所有的请求,即脚本中全部将请求发送给Router,Router收到创建Session请求后发送到Session Queue。
java -jar selenium-server-<version>.jar router --sessions http://<sessions-ip>:5556 --distributor http://<distributor-ip>:5553 --sessionqueue http://<new-session-queue-ip>:5559 --port 4444
Node真正执行脚本的节点
java -jar selenium-server-<version>.jar node --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443
实战
- 启动
Event Bus,因为不需要修改默认的端口,就直接不带参数启动即可,如下:
- 启动
Session Queue,同样不带参数启动,使用默认端口,如下:
- 启动
Session Map,因为要使用Event Bus通信,所以要指定对应的IP,如下:
- 启动
Distributor,因为它要与其他组件进行通信,因此都要指定对应组件的IP,如下:
- 启动
Router,同样它要与其他组件进行通信,因此都要指定对应组件的IP,如下:
- 最后启动
Node节点,这里在一台电脑上通过不同的端口来模拟多个Node节点,如下:
- 跟上节一样,将下面的脚本执行两次
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444', options=chrome_options)
driver.get("http://www.baidu.com")
查看selenium grid界面,可以看到有两个Node,分别有一个Session在运行(今天用了Mac电脑演示,可以很清楚的看到对应节点的操作系统)