首页 > 其他分享 >Selenium Grid4.0 - 多台计算机上并行运行

Selenium Grid4.0 - 多台计算机上并行运行

时间:2024-01-13 15:26:05浏览次数:37  
标签:Hub -- Selenium -. selenium 多台计算机 jar Grid4.0 节点

前言

当你希望在多台计算机上并行运行测试?Selenium Grid可以帮你实现。
官方文档原文:https://www.selenium.dev/documentation/grid/getting_started/

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

Grid 可以做那些事?

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

感兴趣吗?通过以下部分了解 Grid 是如何工作的,以及如何设置自己的 Grid 。

快速开始

1.必备的环境:

  • Java 11 或更高版本
  • Google Chrome 浏览器,或其它浏览器的安装
  • 浏览器对应驱动(如chromedriver)添加到环境变量下,如果添加--Selenium Manager true,则 Selenium Manager https://www.selenium.dev/documentation/selenium_manager/将自动配置驱动程序

2.启动命令

java -jar selenium-server-<version>.jar standalone

3.将您的WebDriver测试指向http://localhost:4444
4.通过在打开浏览器检查正在运行的测试和可用功能http://localhost:4444

Grid 角色

Grid 由六个不同的组件组成,这使您可以选择以不同的方式部署它。
根据您的需要,您可以单独启动它们中的每一个(分布式),将它们分组在Hub & Node中,或者在一台机器上将它们集中在一起(Standalone)

Standalone 模式

Standalone 将所有 Grid 组件无缝组合为一个组件.在 Standalone 模式下运行Grid,可以在单个进程中使用单个命令创建一个功能齐全的Grid。Standalone 只能在单机上运行。

Standalone 模式也是启动 Selenium 网格的最简单模式。默认情况下,服务器将侦听上的 RemoteWebDriver 请求 http://localhost:4444.
默认情况下,服务器将从系统路径检测可用的驱动程序。

java -jar selenium-server-<version>.jar standalone

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

Standalone 的常见场景有:

  • 使用RemoteWebDriver在本地开发或调试测试
  • 在推送代码之前运行快速测试套件
  • 在CI/CD工具中轻松设置 Grid(GitHub Actions、Jenkins等)

Hub-Node 模式

Hub-Node 模式是最常用的角色,因为它允许:

  • 将不同的机器组合在一个 Grid 中.例如,具有不同操作系统和/或浏览器版本的机器
  • 具有在不同环境中运行 WebDriver 测试的单一入口点.
  • 在不破坏网格的情况下放大或缩小容量

Hub 由以下组件组成:路由器、分发服务器、会话映射、新会话队列和事件总线
启动Hub :

java -jar selenium-server-<version>.jar hub

默认情况下,服务器将侦听RemoteWebDriver请求 ``http://localhost:4444`

Node 节点在启动期间,节点将从系统Path路径检测可用的驱动程序。
下面的命令假定Node节点在运行Hub的同一台计算机上运行。

java -jar selenium-server-<version>.jar node

同一台机器上可以有多个节点
Node 1

java -jar selenium-server-<version>.jar node --port 5555

Node 2

java -jar selenium-server-<version>.jar node --port 6666

Node 和 Hub 在不同机器上

Hub 和Node 节点通过HTTP和事件总线(事件总线位于Hub内)相互通信。Node节点通过事件总线向Hub发送消息以启动注册过程。当Hub接收到消息时,会通过HTTP联系节点以确认其存在。
要将Node 节点成功注册到Hub,重要的是在Hub计算机上开放事件总线端口(默认情况下为4442和4443)。这也适用于节点端口。有了它,Hub和 Node节点都可以通信。
(简单来说就是Node 和 Hub 不同机器能互相ping 通)

如果Hub使用默认端口,那么--Hub 可用于注册Node节点

java -jar selenium-server-<version>.jar node --hub http://<hub-ip>:4444

当hub不使用默认端口时,需要--publish事件和--subscribe事件标志。
例如,如果hub使用端口8886、8887和8888

java -jar selenium-server-<version>.jar hub --publish-events tcp://<hub-ip>:8886 --subscribe-events tcp://<hub-ip>:8887 --port 8888

Node节点需要使用这些端口才能成功注册

java -jar selenium-server-<version>.jar node --publish-events tcp://<hub-ip>:8886 --subscribe-events tcp://<hub-ip>:8887

分布式

当使用分布式 Grid 时,每个组件都是单独启动的,最好是在不同的机器上启动。
正确地暴露所有端口以允许所有组件之间的流畅通信是很重要的。

事件总线:启用不同网格组件之间的内部通信。
默认端口为:4442、4443和5557。

java -jar selenium-server-<version>.jar event-bus --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443 --port 5557

新建会话队列:将新的会话请求添加到队列中,分发服务器将查询该队列。默认端口为5559。

java -jar selenium-server-<version>.jar sessionqueue --port 5559

会话映射:将会话ID映射到会话正在运行的节点。默认会话映射端口为5556。会话映射与事件总线交互。

java -jar selenium-server-<version>.jar sessions --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443 --port 5556

分发服务器:查询新会话队列中的新会话请求,并在功能匹配时将其分配给节点。节点注册到分发服务器的方式与它们在集线器/节点网格中注册到集线器的方式相同。
默认分发服务器端口为5553。分发服务器与新会话队列、会话映射、事件总线和节点进行交互。

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

路由器:将新的会话请求重定向到队列,并将正在运行的会话请求重新定向到正在运行该会话的节点。
默认路由器端口为4444。路由器与新会话队列、会话映射和分发服务器进行交互。

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

节点默认节点端口为5555。

java -jar selenium-server-<version>.jar node --publish-events tcp://<event-bus-ip>:4442 --subscribe-events tcp://<event-bus-ip>:4443

官方文档原文:https://www.selenium.dev/documentation/grid/getting_started/

标签:Hub,--,Selenium,-.,selenium,多台计算机,jar,Grid4.0,节点
From: https://www.cnblogs.com/yoyoketang/p/17961978

相关文章

  • Airtest-Selenium实操小课②:刷B站视频
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途1.前言上一课我们讲到用Airtest-Selenium爬取网站上我们需要的信息数据,还没看的同学可以戳这里看看~那么今天的推文,我们就来说说看,怎么实现看b站、刷b站的日常......
  • selenium获取淘宝内容
    淘宝的反爬非常厉害,即使模拟了浏览器,仍然会有一大堆验证流程,首先声明这里只是实现了可用的代码,并不实用。下面是一段示例代码,用于模拟爬取淘宝特定关键词下,按销量排序,商品的价格、店名等数据:在开始之前,要下载谷歌浏览器和对应的webdriver,Python、以及Python安装selenium,这句话仅......
  • 为什么selenium会被识别出来
    因为浏览器指纹暴露了身份可以通过下面这个网址检测,如果是selenium打开的,就会显示红色Antibot(sannysoft.com) 可以用selenium调试手动打开的浏览器来伪装:首先命令行加参数打开浏览器:startchrome.exe --remote-debugging-port=9222然后selenium加上以下选项fromsele......
  • 查看selenium具体版本的方法
    1、查看自己selenium版本方法一:本机进入CMD在cmd窗口中输入pipshowselenium如果是在Pycharm中直接安装的selenium。则有可能会有如下提示。那么请尝试方法二。方法二:在pycharm中查看selenium版本步骤一:在pycharm里打开命令行,输入python步骤二:执行importselenium和help(selen......
  • 使用Python+selenium实现第一个自动化测试脚本
    这篇文章主要介绍了使用Python+selenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧最近在学web自动化,记录一下学习过程。此处我选用python3.6+selenium3.0,均用最新版本,以适应......
  • selenium窗口切换
    一、handle窗口切换当点击某个元素后,会重新生成一个新的页签,但此时我们的操作仍然在原先的窗口当中,如果要在新的窗口继续操作元素,那么就要用到handle窗口切换的方法。常用方法:window_handles:获取当前打开的所有窗口句柄,返回类型为一个列表。current_window_handle:获取当......
  • Python+Selenium实现UI自动化
    自动化测试:自动化测试是把以人为驱动的测试行为转化成机器执行的一种过程,通常在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较,再此过程中,为了节省人力,时间或硬件资源,提高测试效率,便引用了自动化测试的概念Selenium:是......
  • 使用Selenium库的C#爬虫程序来爬取腾讯云的视频
    这是一个使用Selenium库的C#爬虫程序,用于爬取https://cloud.tencent.com/的视频。代码中使用了代理服务器,代理服务器的主机地址为www.duoip.cn,端口号为8000。以下是完整的代码解释://导入Selenium库usingOpenQA.Selenium;//创建一个ChromeDriver实例,使用代理服务器IWebDriver......
  • (selenium) 让浏览器在 webdriver 调用后保持打开状态
    在使用selenium进行webdriver测试时,浏览器在调用完后将会自动关闭,即使没有调用"driver.close()"。有时候,可能需要特意将浏览器保持开启状态,此时需要使用detach参数#'detach'=True将不会自动关闭options.add_experimental_option('detach',True)具体示例代码如......
  • Python+Selenium+Pytest+Allure+Jenkins实现的Web自动化框架
    目录一、测试的项目二、需求分析三、用例设计-部分用例举例四、框架说明4.1测试框架结构图如下:4.2项目功能五、代码设计与功能说明5.1POM简介:PageObjectModle页面对象模型5.2基础封装层:pages/basePage.py5.3PO页面对象层:pages/userLoginPage.py5.4TestCase测试用例层:testc......