Selenium Grid4 使用指南(二)

686 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

Selenium Grid允许通过将客户端发送的命令路由到远程浏览器实例来在远程机器上执行 WebDriver 脚本。

Grid 的目标:

  • 提供一种在多台机器上并行运行测试的简单方法
  • 允许在不同的浏览器版本上进行测试
  • 启用跨平台测试

上章《Selenium Grid4 使用指南(一)》已经介绍了两种运行方式,standalonehub/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
  • DistributorSession 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电脑演示,可以很清楚的看到对应节点的操作系统)