Selenium执行速度太慢?赶快试试Grid分布式

Selenium Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构是由 一个中心节点 (hub)和 若干个代理节点 (node)组成。hub 用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。


使用Selenium Grid 远程执行测试的代码与直接调用 Selenium Server 是一样的,只是环境启动的方式不一样,Selenium Grid 需要同时启动一个 hub 和至少一个 node (在你使用的node节点机器上执行命令,也可以在中心节点hub机器上执行,即把中心节点hub当成node节点)

// 启动node节点hubjava -jar selenium-server-standalone-3.141.59.jar -role hub// 启动node节点java -jar selenium-server-standalone-3.141.59.jar -role nod

上面两条分别是启动hub节点和node节点的命令。

注意, 要开启两个windows命令行窗口去分别执行,且要先执行hub命令,具体启动内容如下两张图(这里是在同一台机器上分别启动hub和node节点的)



启动hub节点.png



启动node节点.png


  • hub 默认监听端口号为 4444 ,默认IP是localhost;如果要修改,只需要加-port 参数和-Hubhost:
java -jar selenium-server-standalone-3.141.59.jar -role hub -port 1234 -Hubhost 192.168.1.30

如果要在两台不同的机器上运行hub节点和node节点,只需要将localhost替换成中心节点所在机器的IP或hostname即可


  • node 默认端口号为 5555。 若是同一台主机上要启动多个 node 则需要指定端口号,可以通过下面的方式来启动多个 node 点节(同样的,要在多个命令行窗口分别执行)
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555java -jar selenium-server-standalone-3.141.59.jar -rolenode -port 5556java -jar selenium-server-standalone-3.141.59.jar -role node -port 5557

调用 Selenium-Grid 的基本结构图, 如下图:



Selenium Grid结构图.png


图中标识 中的翻译如下,这一部分都是指的 应用程序的测试用例

  • 不需要改变
  • 完全按照传统的设置来写即可
  • 充分利用网格的优势让他们并行运行


标识 中的翻译如下,这一部分指的是 Selenium Grid的部署

  • selenium测试的唯一入口点
  • 负载平衡selenese请求“真正的”远程控制
  • 通过添加更多的远程控制透明的扩展
  • 每台机器运行多个远程控制(通常情况)


上面是使用 Selenium Grid 的一种普通方式,仅仅使用了其支持的分布式执行的功能,即当你同时需要测试的用例比较多时,可以并行的执行这些用例进而缩短测试总耗时。除此之外,Selenium Grid 还支持一种更友好的功能,即可以根据你用例中启动测试的类型来相应地把用例转发给符合匹配要求的测试代理。


例如你的用例中指定了要在 Linux 上 FireFox 50 版本进行测试,那么 Selenium Grid会自动匹配注册信息为Linux且安装了FireFox50 的代理节点,如果匹配成功则转发测试请求,如果失败则拒绝请求。使用 Selenium Grid 的远程兼容性测试的代码同上。


其调用的基本结构如下图:



Selenium Grid远程调用基本结构图.png


通过Selenium Grid执行远程操作时,并不需要远程机器上有测试脚本,但是 远程机器上必须安装了对应的webdriver程序 (可以直接放在环境变量的目录里即可),当然了,还得 需要正确的启动了代理程序


发布于 2022-04-18 16:13