Selenium4.0beta版已经发布,那么距离正式版已经不远了,在Selenium4.0中变化比较大的就是Grid了,本文翻译了官方文档,重点介绍Grid4的工作原理
SeleniumGrid3工作原理
Hub
中介和管理接受运行测试的请求从客户端获取指令并在节点上远程执行它们管理线程Hub是发送所有测试的中心点。每个seleniumGrid恰好由一个Hub组成。Hub需要能够从各自的客户端(即CI服务器、开发人员机器等)访问。Hub将连接一个或多个Node测试的节点。
Node
Node和执行的浏览器在同一台主机。将自己注册到Hub上,并保持通信。接收来自Hub的请求并执行他们。Node是在单个计算机系统上执行测试的不同的Selenium实例。Grid中可以有许多节点。作为Node的机器不需要与Hub或其他Node的平台相同,也不需要具有相同的浏览器选择。Windows上的节点可以提供InternetExplorer作为浏览器选项,而这在Linux或Mac上是不可能的。
seleniumGrid4
Router路由器
路由器负责将请求转发到正确的组件。
他是Grid的入口点,接收所有外部的请求。路由器行为的不同依赖于接受的请求。
如果是一个新的会话请求,路由器会把它发送给NewSessionQueuer,将其添加到NewSessionQueue,NewSessionqueuer通过EventBus触发一个事件。Distributor(处理新的会话创建的位置)将会接收事件并轮询新SessionQueue来获得新会话请求。
如果请求属于已存在的会话,路由器发送sessionid到SessionMap,然后SessionMap返回会话运行的Node。此后,路由器发送请求给Node。
Distributor分配器
Distributor知道所有的Node以及他们的能力。它的主要角色是接收新的session请求,找到适合的Node来创建会话。Distributor在SessionMap中存储sessionid和正在执行会话的Node之间的关系。
Node节点
一个Node可以在Grid中多次创建。每个Node负责管理运行所在机器的可用浏览器。
Node通过EventBus向Distributor注册。它的配置作为注册消息的一部分发送。
默认情况下,Node自动注册所在主机上所以可以运行的浏览器驱动程序。它还为基于Chromium的浏览器和Firefox的每个可用CPU创建一个slot(插槽?不会翻译)。针对Safari和IE只创建一个slot。通过在特定的配置,它可以在Docker容器中创建会话。你可以看到更多配置描述在后面的使用介绍中。
Node只执行接收到的命令。它不会评估、判断和控制任何事情。Node运行的主机不需要拥有与其他组件相同的操作系统。例如,Windows主机的Node提供IE浏览器选项,而这在Linux或Mac主机上是不可能的。
SessionMap会话映射
SessionMap是一个数据存储,保存sessionid和运行会话的Node信息。它在向Node转发请求的过程中为Router提供支持。Router将向SessionMap请求与sessionid相关联的Node。当以完全模式启动Grid,SessionMap是第一个被启动的组件。
NewSessionQueuer新会话队列者NewSessionQueue新会话队列
NewSessionQueuer是唯一可以与NewSessionQueue通信的组件。它处理所有的队列操作,例如,像“add”去操作队列。它提供配置参数设置请求超时和请求重试的间隔。
NewSessionQueuer通过Router接收新会话请求并将其添加到队列中。Queuer等待直到它收到请求的响应。如果请求超时,请求立刻被拒绝并且不会添加到队列中。
如果请求的功能在任何已注册的Node都不存在,那么请求立刻被拒绝,客户端收到响应。
如果请求的功能与任何Node的slots匹配,Distributor将尝试获取可用的slots,如果所有slots都很忙,Distributor将要求Queuer将请求添加到队列前面。在请求重试间隔后,Distributor再次接受请求。不停的尝试重试,直到请求成功或超时。如果请求在重试可添加到队列前超时,则其被拒绝。
在获得可用的slots和创建会话之后,Distributor通过EventBus将新会话响应传递给NewSessionQueuer。NewSessionQueuer在接收到事件时响应客户端。
EventBus事件总线
EventBus总线充当Node、Distributor、NewSessionQueuer和SessionMap之间的通信路径。Grid通过消息进行大部分的内部通信,避免了昂贵的HTTP调用。
RoleInGrid
在Grid3中,组件分Hub和Node,通过独立模式下运行Grid,可以将他们放在一起运行。同样的概念在Grid4中也是可以的。可以通过将上面描述的一些组件分组来运行Hub,也可以在独立模式下同时运行所有组件。
Hub
Hub是以下组件的总合:
·Router·Distributor·SessionMap·NewSessionQueuer·EventBus
它支持经典的HubNode的设置。
Standalone
如前所述,Standalone是所有组件的总和。在用户看来,它们是作为一个组件执行的。这包括作为Hub的所有组件,以及一个Node。在Standalone启动后,可以使用一个功能齐全的Grid。
不同的模运行Grid
StandaloneHubandNodeDistributedDockerStandaloneMode
一个新的SeleniumServerjar包含了运行Grid的所有内容。它是运行SeleniumGrid的最简单模式。默认情况下,服务监听