Selenium 4.0beta: Grid 工作原理
Selenium 4.0 beta版已经发布,那么距离正式版已经不远了,在Selenium 4.0中变化比较大的就是Grid了,本文翻译了官方文档,重点介绍Grid 4的工作原理
Selenium Grid3工作原理
Hub
- 中介和管理
- 接受运行测试的请求
- 从客户端获取指令并在节点上远程执行它们
- 管理线程
Hub是发送所有测试的中心点。每个selenium Grid恰好由一个Hub组成。Hub需要能够从各自的客户端(即CI服务器、开发人员机器等)访问。Hub将连接一个或多个Node
测试的节点。
Node
- Node和执行的浏览器在同一台主机。
- 将自己注册到Hub上,并保持通信。
- 接收来自Hub的请求并执行他们。
Node是在单个计算机系统上执行测试的不同的Selenium实例。Grid中可以有许多节点。作为Node的机器不需要与Hub或其他Node的平台相同,也不需要具有相同的浏览器选择。Windows上的节点可以提供Internet Explorer作为浏览器选项,而这在Linux或Mac上是不可能的。
selenium Grid4
Router 路由器
路由器负责将请求转发到正确的组件。
他是Grid的入口点,接收所有外部的请求。路由器行为的不同依赖于接受的请求。
如果是一个新的会话请求,路由器会把它发送给New Session Queuer
,将其添加到New Session Queue
, New Session queuer
通过Event Bus
触发一个事件。Distributor
(处理新的会话创建的位置)将会接收事件并轮询新Session Queue
来获得新会话请求。
如果请求属于已存在的会话, 路由器发送session id 到 Session Map
, 然后Session Map
返回会话运行的Node
。此后,路由器发送请求给Node
。
Distributor 分配器
Distributor
知道所有的Node
以及他们的能力。它的主要角色是接收新的 session 请求,找到适合的Node
来创建会话。Distributor
在Session Map
中存储session id和正在执行会话的Node
之间的关系。
Node 节点
一个Node
可以在Grid中多次创建。每个Node
负责管理运行所在机器的可用浏览器。
Node
通过 Event Bus
向Distributor
注册。它的配置作为注册消息的一部分发送。
默认情况下,Node
自动注册所在主机上所以可以运行的浏览器驱动程序。它还为基于Chromium 的浏览器和 Firefox 的每个可用 CPU 创建一个 slot(插槽?不会翻译)。针对Safari 和 IE 只创建一个slot。通过在特定的配置,它可以在Docker容器中创建会话。你可以看到更多配置描述在后面的使用介绍中。
Node
只执行接收到的命令。它不会评估、判断和控制任何事情。Node
运行的主机不需要拥有与其他组件相同的操作系统。例如,Windows主机的Node
提供IE浏览器选项,而这在Linux或Mac主机上是不可能的。
Session Map 会话映射
Session Map
是一个数据存储,保存session id 和运行会话的Node
信息。它在向Node
转发请求的过程中为Router
提供支持。Router
将向Session Map
请求与 session id相关联的Node
。当以完全模式启动Grid,Session Map
是第一个被启动的组件。
New Session Queuer 新会话队列者
New Session Queue 新会话队列
New Session Queuer
是唯一可以与New Session Queue
通信的组件。它处理所有的队列操作,例如,像“add”去操作队列。它提供配置参数设置请求超时和请求重试的间隔。
New Session Queuer
通过Router
接收新会话请求并将其添加到队列中。Queuer等待直到它收到请求的响应。如果请求超时,请求立刻被拒绝并且不会添加到队列中。
如果请求的功能在任何已注册的Node
都不存在,那么请求立刻被拒绝,客户端收到响应。
如果请求的功能与任何Node
的slots 匹配,Distributor
将尝试获取可用的slots,如果所有slots都很忙,Distributor
将要求Queuer将请求添加到队列前面。在请求重试间隔后,Distributor
再次接受请求。不停的尝试重试,直到请求成功或超时。如果请求在重试可添加到队列前超时,则其被拒绝。
在获得可用的slots和创建会话之后,Distributor
通过Event Bus
将新会话响应传递给New Session Queuer
。New Session Queuer
在接收到事件时响应客户端。
Event Bus 事件总线
Event Bus
总线充当Node
、Distributor
、 New Session Queuer
和 Session Map
之间的通信路径。Grid通过消息进行大部分的内部通信,避免了昂贵的HTTP调用。
Role In Grid
在Grid3中,组件分Hub
和Node
, 通过独立模式下运行Grid,可以将他们放在一起运行。同样的概念在Grid4中也是可以的。可以通过将上面描述的一些组件分组来运行Hub
,也可以在独立模式下同时运行所有组件。
Hub
Hub 是以下组件的总合:
· Router
· Distributor
· Session Map
· New Session Queuer
· Event Bus
它支持经典的Hub & Node
的设置。
Standalone
如前所述, Standalone是所有组件的总和。在用户看来,它们是作为一个组件执行的。这包括作为Hub
的所有组件,以及一个Node
。在Standalone启动后,可以使用一个功能齐全的Grid。
不同的模运行Grid
- Standalone
- Hub and Node
- Distributed
- Docker
Standalone Mode
一个新的Selenium Server jar 包含了运行Grid的所有内容。它是运行Selenium Grid的最简单模式。默认情况下,服务监听http://localhost:4444
,你可以在程序中调用RemoteWebDriver
类访问这个URL进行测试,服务器从系统路径中检测到可用的驱动程序。
- 启动Selenium server:
> java -jar .\selenium-server-4.0.0-beta-1.jar standalone
18:02:39.622 INFO [LogManager$RootLogger.log] - Using the system default encoding
18:02:39.625 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
18:02:43.351 INFO [NodeOptions.report] - Adding Chrome for {"browserName": "chrome"} 16 times
18:02:43.352 INFO [NodeOptions.report] - Adding Firefox for {"browserName": "firefox"} 16 times
18:02:43.812 INFO [Node.<init>] - Binding additional locator mechanisms: id, name
18:02:43.826 INFO [LocalDistributor.add] - Added `node` 40291796-b2da-40a8-8b3a-b20a5c80b65d at http://10.2.212.186:4444.
18:02:43.830 INFO [GridModel.setAvailability] - Switching `node` 40291796-b2da-40a8-8b3a-b20a5c80b65d (uri: http://10.2.212.186:4444) from DOWN to UP
18:02:45.583 INFO [Standalone.execute] - Started Selenium Standalone 4.0.0-beta-1 (revision Unknown): http://10.2.212.186:4444
- 运行脚本(python)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import DesiredCapabilities
dr = webdriver.Remote(command_executor='http://127.0.0.1:4444',
desired_capabilities=DesiredCapabilities.CHROME.copy()
)
dr.get("https://www.baidu.com")
dr.find_element(By.ID, "kw").send_keys("selenium grid4")
dr.find_element(By.ID, "su").click()
dr.close()
Hub and Node Mode
- 启动hub
> java -jar .\selenium-server-4.0.0-beta-1.jar hub
- 注册Node
> java -jar .\selenium-server-4.0.0-beta-1.jar node
在 Selenium 4.0 中,我们还添加了GraphQL,这是一种可以轻松查询必要数据并获得完全相同数据的新方法。
- 通过HTTPie查询接口
以下两种模式比较复杂一些,也是Grid4真正区别于Grid3的功能,后续再介绍!
- Distributed Mode 分布式模式
- Start Standalone Grid Via Docker Images 通过Docker镜像启动Grid
Selenium 4.0beta: Grid 工作原理的更多相关文章
- Selenium Grid的原理、配置与使用(转)
Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...
- Selenium WebDriver的实现及工作原理
笔者最近研究学习了selenium的实现和工作原理,阅读了selenium3.141.59的Java源码,没有读完哈...重点从两个接口(org.openqa.selenium.WebDriver和o ...
- Selenium 实现 Web 自动化的原理 (软件测试52讲学习笔记)
Selenium 1.0 的工作原理 Selenium 1.0,又称Selenium RC ,RC是Remote Control的缩写.Selenium RC利用的原理:JavaScript代码可以方 ...
- selenium工作原理详解
selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...
- Selenium WebDriver的工作原理
先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象.好理解拿来用用. 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车. 在开出租车时有三个角色: ...
- Selenium 工作原理
Selenium是ThoughtWorks公司研发的一个强大的基于浏览器的开源自动化测试工具,它通常用来编写web应用的自动化测试.早期也即Selenium1.x时期主要使用Selenium RC(S ...
- Selenium WebDriver 工作原理
WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...
- Selenium1工作原理
内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925 简介: Selenium 1.0中可以使用多种语言编程,当 ...
- 【Appium】Appium工作原理
参考:http://www.cnblogs.com/zhjsll/p/5698878.html 原作者写的很好,所以直接放在这里. 一.什么是Appium Appium是一个开源.跨平台的测试框架,可 ...
随机推荐
- windows安装
1.windows系统版本分类a. 个人版windows98.XP.win7,win8,win10b. 企业版/服务器版windows server NT/2000/2003/2008/2012[广泛 ...
- BIM轻量化——浏览器展示
此篇博客仅为记录,记录钻研过程的零碎思路. 之前考虑过很多可能性,对rvt文件转换格式:.obj.JSON..gltf等等.这些可能性前人一般都尝试过,而且也都做出来了东西. ...
- Cobbler自定义标题及菜单密码
sha1pass mypassword || openssl passwd -1 -salt sXiKzkus mypassword $1$sXiKzkus$x12Z3ZaiC34GhceLH5LXw ...
- LOJ6283 数列分块入门 7 (分块 区间加/乘)题解
题意:区间加,区间乘,单点询问 思路:假设一个点为a,那么他可以表示为m * a + sum,所以区间加就变为m * a + sum + sum2,区间乘变为m * m2 * a + sum * m2 ...
- Python & file operation mode
Python & file operation mode create/read/write/append mode https://docs.python.org/3/library/fun ...
- VIM 官方教程
VIM 官方教程 zh-hans vim official documents https://www.vim.org/docs.php https://vimhelp.org/ translatio ...
- color recognition by image
color recognition by image 通过图像进行颜色识别 https://imagecolorpicker.com/ unknown color origin pic grey bl ...
- 微信公众号 bug
微信公众号 bug web bug refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- scrimba & interactive free online tutorials
scrimba & interactive free online tutorials https://github.com/scrimba/community/blob/master/FAQ ...
- Object.stringify 循环引用 bug & TypeError: Converting circular structure to JSON
Object.stringify 循环引用 bug & TypeError: Converting circular structure to JSON var obj = { a: &quo ...