Selenium Grid保姆级搭建及解析
  rBYdaoQFuE7Q 2023年11月02日 31 0

一、Grid介绍

要在多台计算机上并行运行测试吗? 那么, Grid正是为你准备的.

Selenium Grid允许通过路由命令在远程机器上执行WebDriver脚本,这些命令由客户机发送到远程浏览器实例,如下图所示:

Selenium Grid保姆级搭建及解析_Selenium

WebDriver: 驱动程序是特定于浏览器的,例如 ChromeDriver 对应于谷歌的 Chrome/ChromiumGeckoDriver 对应于 MozillaFirefox 的,等等。驱动程序在与浏览器相同的系统上运行。这可能与执行测试本身的系统相同,也可能不同。

Selenium Grid保姆级搭建及解析_UI自动化_02Selenium Grid保姆级搭建及解析_软件测试_03Selenium Server Selenium Grid远程通信也可以使用 Selenium Server Selenium Grid

进行,这两者依次与主机系统上的驱动程序进行通

Selenium Grid保姆级搭建及解析_服务器_04Test FRAMEWORK(应用框架) WebDriver 有且只有一个任务: 通过上面的任何方法与浏览器通信。WebDriver 对测试一窍不通:它不知道如何比较事物、 断言通过或失败,当然它也不知道报告或 Given/When/Then 语法。这就是各种框架发挥作用的地方。至少你需要一个与绑定语言相匹配的测试框架,比如PythonPytest,. NET NUnit, Java JUnit, Ruby RSpec 等等。测试框架负责运行和执行 WebDriver 以及测试中相关步骤。

Grid的目标是

Selenium Grid保姆级搭建及解析_服务器_05Selenium Grid保姆级搭建及解析_Selenium_06提供在多台机器上并行运行测试的简单方法允许在不同的浏览器版本上进行测试

Selenium Grid保姆级搭建及解析_服务器_07启用跨平台测


二、Selenium Grid快速入门

Quick start

先决条件


Selenium Grid保姆级搭建及解析_Selenium_08安装Java 11或更高版本

Selenium Grid保姆级搭建及解析_服务器_09


Selenium Grid保姆级搭建及解析_软件测试_10安装浏览

Selenium Grid保姆级搭建及解析_Selenium_11已安装的浏览器驱动程序并配置好环境变

Selenium Grid保姆级搭建及解析_Selenium_12官网 Selenium Server jar文件(selenium-server-4.8.2.jar)

启动Grid

首先进入jar包所在目录

Selenium Grid保姆级搭建及解析_软件测试_13


Selenium Grid保姆级搭建及解析_UI自动化_14



启动后,可打开浏览器访问http://127.0.0.1:4444


Selenium Grid保姆级搭建及解析_服务器_15



将WebDriver测试指向http://localhost:4444

您可以如本地一样, 使用远程WebDriver. 主要区别在于需要配置远程WebDriver, 以便可以在不同的计算机上运行测试.

远程WebDriver由两部分组成:客户端和服务端. 客户端是您的WebDriver测试,而服务端仅仅是可以被托管于任何现代Java EE应用服务器的Java Servlet.

要运行远程WebDriver客户端, 我们首先需要连接到RemoteWebDriver. 为此, 我们将URL指向运行测试的服务器的地址. 为了自定义我们的配置, 我们设置了既定的功能. 下面是一个实例化样例, 其指向我们的远程Web服务器 http://localhost:4444的远程WebDriver对象, 并在Chrome上运行测试.


Selenium Grid保姆级搭建及解析_服务器_16


通过打开浏览器http://localhost:4444检查正在运行的测试和可用的功能


要了解关于不同配置选项的更多信息,请参见下面的部

Selenium Grid保姆级搭建及解析_UI自动化_17




Grid模式详解

Grid由六个不同的组件组成,这为您提供了以不同方式部署它的选项。

根据您的需要,您可以单独启动它们中的任一个(分布式的Distributed),并将它们分组到中心(Hub)和节点(Node)中,或在一台机器上集所有于一体(独立的Standalone)


Grid由六个不同的组件组成,这为您提供了以不同方式部署它的选项

根据您的需要,您可以单独启动它们中的任一个(分布式的Distributed),并将它们分组到中心Hub和节点(Node)中,或在一台机器上集所有于一体(独立的Standalone)

Standalone(独立模式)

Standalone将所有Grid组件无缝地组合为一个。以独立模式运行Grid可以在单个进程中使用单个命令获得功能完整的Grid。单机只能在一台机器上运行。

Standalone也是运转Selenium Grid最简单的模式。默认情况下,服务器将监听http://localhost:4444

的RemoteWebDriver请求。默认情况下,服务器将从System PATH(环境变量)中检测可用的驱动程序

Selenium Grid保姆级搭建及解析_UI自动化_18


在Standalone模式下成功启动Grid之后,将WebDriver测试指向http://localhost:4444

Standalone模式的常用场景有:

Selenium Grid保姆级搭建及解析_软件测试_19Selenium Grid保姆级搭建及解析_服务器_20使用RemoteWebDriver在本地开发或调试测试在推送代码之前运行快速测试套件

Selenium Grid保姆级搭建及解析_Selenium_21在CI/CD工具(GitHub Actions, Jenkins等)中轻松配置Grid


Hub and Node (中心和节点模式)

Selenium Grid保姆级搭建及解析_Selenium_22中心和节点是使用最多的模式,因为它允许:将不同的机器组合在一个Grid中

Selenium Grid保姆级搭建及解析_UI自动化_23例如,使用不同操作系统和/或浏览器版本的机

Selenium Grid保姆级搭建及解析_UI自动化_24使用统一入口点来在不同的环境中运行WebDriver测

Selenium Grid保姆级搭建及解析_UI自动化_25在不破坏Grid的情况下,增加或减少组

Hub

Hub由以下组件组成:路由器(Router)、分发器(Distributor)、会话映射(Session Map)、新会话队列(New Session Queu)和事件总线(Event Bus)。

Selenium Grid保姆级搭建及解析_服务器_26

默认情况下,服务器将监听http://localhost:4444上的RemoteWebDriver请

Selenium Grid保姆级搭建及解析_软件测试_27


Node

在启动期间,节点将从System PATH(环境变量)中检测可用的驱动程序。下面的命令假设Node和Hub运行在同一台机器上

Selenium Grid保姆级搭建及解析_Selenium_28


同一机器上的多个节点

Node 1

Selenium Grid保姆级搭建及解析_服务器_29


Selenium Grid保姆级搭建及解析_Selenium_30


Node 2

Selenium Grid保姆级搭建及解析_服务器_31

Selenium Grid保姆级搭建及解析_软件测试_32


Node and Hub 在不同的机器

Hub和Nodes通过HTTP和事件总线Event Bus(事件总线位于Hub内部)相互通信。Node 通过事件总线

Hub 发送消息以启动注册过程。当Hub接收到消息时,通过HTTP与Node 联系以确认其存在

要成功地将Node注册到Hub,必须公开Hub计算机上的事件总线端口(默认情况下为44424443)。这也适用于Node端口。有了它,HubNode都将能够通信。

如果Hub使用默认端口,则可以使用--hub标志注册Nod

Selenium Grid保姆级搭建及解析_UI自动化_33


Selenium Grid保姆级搭建及解析_UI自动化_34



当Hub不使用默认端口时,需要使用--publish-events和--subscribe-events标志。例如,Hub使用9886、9887和9888端口

Selenium Grid保姆级搭建及解析_软件测试_35

Node需要使用这些端口完成注

Selenium Grid保姆级搭建及解析_服务器_36

PSHubNodeIP一定要一致,127.0.0.1 不能更换成本机IP,否则Node无法注册成


Distributed(分发模式)

PS:这种模式比较麻烦,大家先了解一下即

当使用分发模式Grid时,每个组件分别启动,并且理想情况下在不同的机器上启动

PS:为了允许所有组件之间的流畅通信,正确地公开所有端口非常重要。 1)Event Bus事件总线:支持不同Grid组件之间的内部通信。

默认端口为:4442、4443、5557

Selenium Grid保姆级搭建及解析_Selenium_37


  1. NewSessionQueue新建会话队列:将新的会话请求添加到队列中,该队列将由分发服务器查询默认端口号为5559
  2. Session Map会话映射:将会话id映射到运行会话的Node默认Session Map端口为5556。Session Map与事件总线(Event Bus)交互

Selenium Grid保姆级搭建及解析_Selenium_38


  1. Distributor分发器:查询新会话队列(New Session Queue中的新会话请求,并在能力匹配时将其分配给节点(Node)。节点(Node)注册到分发服务器(Distributor)的方式与注册到中心/节点


Selenium Grid保姆级搭建及解析_Selenium_39

(Hub/Node)grid中的中心(Hub)的方式相同

默认分发服务器(Distributor)端口为5553。分发服务器(Distributor)与新会话队列(New Session Queue)、会话映射(Session Map)、事件总线(Event Bus)和节点(Node)交互。

Selenium Grid保姆级搭建及解析_UI自动化_40


  1. Router路由器:将新的会话请求重定向到队列,并将正在运行的会话请求重定向到运行该会话的节(Node)默认路由器(Router)端口为4444。路由器(Router)与新建会话队列(New Session Queue)、会话映射(Session Map)和分发服务器(Distributor)交互。

Selenium Grid保姆级搭建及解析_Selenium_41

  1. Node(s)节点

默认Node端口是5555


Selenium Grid保姆级搭建及解析_软件测试_42



三、什么时候应该使用Grid

在不同的浏览器类型、浏览器版本和操作系统上并行运行测试减少执行测试套件所需的时间

Selenium Grid在多台机器(称为节点Nodes)上并行运行测试套件。对于大型且长时间运行的测试套件,这可以节省几分钟、几小时甚至几天的时间。这缩短了测试应用程序(AUT)更改时测试结果的周转时间。

Grid可以在多个不同的浏览器上(并行地)运行测试,也可以在同一浏览器的多个实例上运行。作为一个例子,让我们想象一个有六个节点(Nodes)的Grid。第一台机器是最新版本的Firefox,第二台是“最新减一”版本的Firefox,第三台是最新的Chrome,剩下的三台机器是Mac mini,它允许在最新版本的Safari上并行运行三个测试。

执行时间可以用一个简单的公式表示:

测试数*平均测试时间/节点数=总执行时

15 * 45s / 1 = 11m 15s // Without Grid

15 * 45s / 5 = 2m 15s // Grid with 5 Nodes

15 * 45s / 15 = 45s // Grid with 15 Nodes

100 * 120s / 15 = 13m 20s // Would take over 3 hours without Grid

当测试套件正在执行时,Grid会按照测试中配置的方式分配测试以在这些浏览器上运行。


这样的配置可以大大加快即使是最大的Selenium测试套件的执行时间。

Selenium Grid完全是Selenium项目的原生部分,由在核心Selenium开发中工作的同一组提交者并行维护。由于认识到测试执行速度的重要性,Grid从早期开始就是Selenium项目的关键部分。

四、服务Grid的组件

Selenium Grid 4是基于以前版本的基础重写。除了对性能和标准遵从性的全面改进之外,Grid 的不同功能被打破,以贴合当下的计算和软件开发时代的需求。为了集装箱化和云分布式可伸缩性而专门构建Selenium Grid 4是一个全新的现代解决方案。

Selenium Grid保姆级搭建及解析_服务器_43


路由器Router

路由器Router是网格Grid的入口点,接收所有外部请求,并将它们转发给正确的组件。如果路由器收到一个新的会话请求,它将被转发到新会话队列New Session Queue。

如果请求属于一个已经存在的会话,路由器将查询会话映射Session Map来获得会话所在的节点Node ID,然后请求将直接转发给节点Node 。

路由器通过将请求发送到能够更好地处理请求的组件来平衡网格中的负载,而不会使流程中不需要的任何组件过载

分发器Distributor

分发器有2个主要功能:


注册并跟踪所有节点及其功能

一个节点Node 通过事件总线Event Bus发送一个节点Node注册事件来注册到分发服务器Distributor 。分发服务器Distributor 读取它,然后尝试通过HTTP到达节点Node 以确认它的存在。如果请求成功,分发服务器Distributor 将注册节点并通过GridModel跟踪所有节点Node 的功能。


查询新会话队列并处理任何挂起的新会话请求

当一个新的会话请求被发送到路由器Router时,它会被转发到新会话队列New Session Queue,在那里它将在队列中等待。分发服务器Distributor 将轮询新会话队列中等待的新会话请求,然后找到可以在其中创建会话的合适节点Node 。创建会话之后,分发服务器Distributor 将session id和正在执行会话的节点Node 之间的关系存储在会话映射中。


会话映射Session Map

会话映射Session Map是一个数据存储,它保存会话id和运行会话的节点Node之间的关系。它支持路由器Router在转发请求到节点Node的过程中。路由器Router 将向会话映射 Session Map请求与会话id相关联的节点Node。


新会话队列New Session Queue

新会话队列以FIFO顺序保存所有新会话请求。它具有用于设置请求超时和请求重试间隔(检查超时的频率)的可配置参数。


路由器将新的会话请求添加到新会话队列中,并等待响应。新建会话队列定期检查队列中是否有请求超时,如果超时则拒绝请求并立即删除。


分发服务器定期检查插槽是否可用。如果是,分发服务器将在新会话队列中轮询第一个匹配请求。然后分发服务器尝试创建一个新的会话。


一旦请求的功能与任何空闲节点槽位的功能相匹配,分发服务器就会尝试获得可用的槽位。如果所有槽位都忙,分发服务器将把请求发送回队列。如果请求在重试或添加到队列前面时超时,将会被拒绝。


成功创建会话后,分发服务器将会话信息发送到新会话队列,然后将新会话队列发送回路由器,最后发送到客户机。


节点Node

一个网格Grid可以包含多个节点。每个Node管理运行它的机器上可用浏览器的插槽。节点通过事件总线将自己注册到分发服务器,它的配置作为注册消息的一部分发送。

默认情况下,Node自动注册运行它的机器路径上可用的所有浏览器驱动程序。它还为基于铬的浏览器和 Firefox在每个可用CPU上创建一个插槽。对于Safari,只创建一个插槽。通过特定的配置,它可以在 Docker容器或中继命令中运行会话。


Node只执行接收到的命令,它不计算、做出判断或控制命令和响应流以外的任何东西。运行Node的机器不需要具有与其他组件相同的操作系统。例如,Windows节点可以在Edge上提供IE模式作为浏览器选项,而这在Linux或Mac上是不可能的,网格可以有多个配置了Windows、Mac或Linux的节点。


事件总线Event Bus

事件总线充当节点、分发服务器、新会话队列和会话映射之间的通信路径。Grid通过消息进行大部分内部通信,避免了昂贵的HTTP调用。当以完全分布式模式启动网格时,事件总线是应该启动的第一个组件。

Selenium Grid保姆级搭建及解析_UI自动化_44



五、配置

查看官网:https://www.selenium.dev/zh-cn/documentation/grid/configuration/


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  K9VoqAoS5QtN   2024年05月08日   82   0   0 软件测试
rBYdaoQFuE7Q
最新推荐 更多