Selenium 网格教程:设置集线器和节点(示例)
什么是 Selenium 网格?
Selenium 格 是一部分 Selenium 专门用于在不同浏览器、操作系统和机器上并行运行多个测试的套件。它通过路由远程浏览器实例的命令来实现,其中服务器充当枢纽。用户需要配置远程服务器才能执行测试。
Selenium Grid 有两个版本——较旧的 Grid 2 和较新的 Grid 1。我们只关注 Grid 2,因为 Grid 2 正在逐渐被弃用。 Selenium 球队。
Selenium 格 Archi质地
Selenium 网格有一个中心和节点 Archi结构。

優勢
- 集线器是您加载测试的中心点。
- 一个电网中只能有一个集线器。
- 该集线器仅在一台机器上启动,例如,一台操作系统为 Windows 7、浏览器是IE。
- 包含集线器的机器是运行测试的地方,但您将看到浏览器在节点上自动化。
Nodes
- 节点是 Selenium 将执行您在集线器上加载的测试的实例。
- 一个网格中可以有一个或多个节点。
- 节点可以在具有不同平台和浏览器的多台机器上启动。
- 运行节点的机器不需要与集线器属于同一平台。
Selenium 网格使用中心节点概念,你只需要在一台称为 枢纽但执行将由称为 节点.
如何设定 Selenium 网格?
在本节中,您将使用 2 台机器。第一台机器将是运行集线器的系统,而另一台机器将运行节点。为简单起见,我们将运行集线器的机器称为“机器 A”,而运行节点的机器称为“机器 B”。记下它们的 IP 地址也很重要。假设机器 A 的 IP 地址为 192.168.1.3,而机器 B 的 IP 地址为 192.168.1.4。
步骤1) 下载 Selenium 服务器来自 点击这里.
步骤2) 您可以将 Selenium 服务器 .jar 文件可以放在硬盘驱动器的任何位置。但就本教程而言,请将其放在计算机 A 和计算机 B 的 C 驱动器上。完成此操作后,您现在已完成安装 Selenium 网格。以下步骤将启动集线器和节点。
步骤3)
- 我们现在要启动一个集线器。转到机器 A。使用命令提示符,导航到机器 A 的根目录 - C 驱动器,因为那是我们放置 Selenium 服务器。
- 在命令提示符下,键入 java -jar selenium-server-standalone-2.30.0.jar -角色中心
- 集线器应成功启动。您的命令提示符应类似于下图。
步骤4) 验证集线器是否正在运行的另一种方法是使用浏览器。 Selenium Grid 默认使用机器 A 的 4444 端口作为 Web 界面。只需打开浏览器并转到 http://localhost:4444/grid/console
此外,您还可以通过启动浏览器并转到“iporhostnameofmachineA”来检查机器 B 是否可以访问集线器的 Web 界面,其中“iporhostnameofmachineA”应该是运行集线器的机器的 IP 地址或主机名。由于机器 A 的 IP 地址是 192.168.1.3,因此您应该在机器 B 的浏览器中输入 http://192.168.1.3:4444/grid/console
步骤5)
- 现在中心已经设置好了,我们要启动一个节点。转到机器 B 并在那里启动命令提示符。
- 导航到驱动器 C 的根目录并输入以下代码。我们使用 IP 地址 192.168.1.3,因为这是集线器运行的位置。我们还使用了端口 5566,但您可以选择任何您想要的空闲端口号。
- 注意:如果使用,你现在必须为 Gecko 驱动程序提供路径 Firefox。这是需要使用的更新代码
java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar -role webdriver -hub http://192.168.1.3:4444/grid/register -port 5566
- 当您按下 Enter 时,您的命令提示符应该类似于下图。
步骤6) 去 Selenium 网格网络界面并刷新页面。您应该会看到类似这样的内容。
此时,您已经配置了一个简单的网格。现在您可以对机器 B 进行远程测试了。
何时使用 Selenium 网格?
你应该用 Selenium 当您想要执行以下一项或两项操作时,请使用网格:
- 同时针对不同的浏览器、操作系统和机器运行测试。 这将确保您的应用程序 测试 与各种浏览器-操作系统组合完全兼容。
- 节省测试套件的执行时间. 如果您设置 Selenium 网格一次运行 4 个测试,那么您将能够以大约 4 倍的速度完成整个套件。
网格 1.0 与网格 2.0
以下是 Selenium 网格 1 和 2。
网格1 | 网格2 |
---|---|
Selenium 电网 1 有自己的遥控器,不同于 Selenium RC 服务器。它们是两个不同的程序。 | Selenium 网格 2 现在与 Selenium 服务器 jar 文件 |
您需要安装并配置 阿帕奇 先使用 Ant,然后才可以使用 Grid 1。 | 您不需要在 Grid 2 中安装 Apache Ant。 |
只能支持 Selenium RC 命令/脚本。 | 可以同时支持 Selenium RC 和 WebDriver 脚本。 |
每个远程控制只能自动化一个浏览器。 | 一个遥控器可以自动化最多 5 个浏览器。 |
Selenium 网格可以通过两种不同的方式设置;一种是通过命令行,另一种是通过 JSON 配置文件。
设计可在网格上运行的测试脚本
为了设计在网格上运行的测试脚本,我们需要使用 所需能力 和 RemoteWebDriver 对象。
- 所需能力 用于设置类型 浏览器 和 OS 我们将实现自动化。
- RemoteWebDriver 用于设置我们的测试将在哪个节点(或机器)上运行。
要使用 所需能力 对象,必须先导入此包
要使用 RemoteWebDriver 对象,您必须导入这些包。
使用 DesiredCapabilites 对象
转到 Grid 的 Web 界面,将鼠标悬停在要自动化的浏览器图像上。注意 平台, 和 浏览器名称 通过工具提示显示。
在这种情况下,平台为“XP”,浏览器名称为“Firefox设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“
我们将在我们的 WebDriver 中使用平台和浏览器名称,如下所示(当然您需要先导入必要的包)。
使用 RemoteWebDriver 对象
导入 RemoteWebDriver 必要的包,然后将我们上面创建的 DesiredCapabilities 对象作为 RemoteWebDriver 对象的参数传递。
在网格上运行示例测试用例
以下是一个简单的 WebDriver 测试 您可以在 Eclipse 在机器 A 上。一旦运行它,机器 B 上就会执行自动化。
import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.*; public class Grid_2 { WebDriver driver; String baseUrl, nodeURL; @BeforeTest public void setUpWthrows MalformedURLException { baseUrl = "http://newtours.demoaut.com/"; nodeURL = "http://192.168.1.4:5566/wd/hub"; DesiredCapabilities capability = DesiredCapabilities.firefox(); capability. setBrowserName("firefox"); capability. setPlatform(Platform.XP); driver = new RemoteWebDriver(new URL(nodeURL), capability); } @AfterTest public void afterTest() { driver.quit(); } @Test public void simpleTest() { driver.get(baseUr1); Assert.assertEquas("Welcome: Mercury Tours", driver.getTitle()); } }
测试应该通过。
Selenium 使用 JSON 文件的网格配置
JSON 代表 Javascript 对象表示法。它是用于浏览器和 Web 服务器之间交换数据的标准格式。 Selenium 有一个内置的 JSON 配置文件,可用于设置 selenium 网格。
以下是使用 JSON 配置文件配置 selenium 网格的步骤。
步骤1) 使用以下路径下载 JSON 配置文件的代码
这是代码
{ "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "registryClass": "org.openqa.grid.internal.DefaultGridRegistry", "throwOnCapabilityNotPresent": true, "cleanUpCycle": 5000, "role": "hub", "debug": false, "browserTimeout": 0, "timeout": 1800 }
步骤2) 将代码复制并粘贴到文本编辑器(如记事本)中,扩展名为“.json”
步骤3)使用命令提示符使用以下命令启动集线器
java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hubconfig.json
注意: Selenium 独立 jar 文件和 json 文件必须位于同一目录中
步骤4) 出现以下屏幕表明集线器已成功设置
步骤5) 打开 Web 浏览器并尝试连接到以下 URL
http://192.168.43.223:4444/grid/console
注意: URL 可能因机器而异。必须使用上面屏幕上的 URL,后面跟着“节点应注册到”。
步骤6) 将出现网格控制台屏幕,表明集线器已启动并正在运行
使用 JSON 配置 NODES
步骤1) 下载提供的示例节点配置文件 Selenium 使用以下 URL
注意: 如果您使用的是 SELENIUM 3.0 或更高版本,则必须使用以下 JSON 文件
步骤2) 将代码复制并粘贴到文本编辑器(如记事本)中,并以扩展名“.json”保存文件
步骤3)
在命令提示符下运行以下命令
Java-Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node1.json
注意: 在运行命令之前,请确保每个浏览器的驱动程序已下载到本地计算机目录
步骤4) 按下回车键后将出现以下屏幕
步骤5) 导航到网格控制台以验证节点是否已成功配置
浏览器显示在网格控制台上。因此我们可以确定节点已成功配置。
示例测试用例 Selenium 网格:
package com.objectrepository.demo; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.*; public class SeleniumGrid { WebDriver driver; String baseURL, nodeURL; @BeforeTest public void setUp() throws MalformedURLException { baseURL = "https://demo.guru99.com/test/guru99home/"; nodeURL = "http://192.168.43.223:5566/wd/hub"; DesiredCapabilities capability = DesiredCapabilities.chrome(); capability.setBrowserName("chrome"); capability.setPlatform(Platform.WIN10); driver = new RemoteWebDriver(new URL(nodeURL), capability); } @AfterTest public void afterTest() { driver.quit(); } @Test public void sampleTest() { driver.get(baseURL); if (driver.getPageSource().contains("MOBILE TESTING")) { Assert.assertTrue(true, "Mobile Testing Link Found"); } else { Assert.assertTrue(false, "Failed: Link not found"); } } }
上述代码启动 Chrome 浏览器并导航到“baseURL”变量中指定的 URL。它验证了页面上显示了名为“Mobile Testing”的链接
可以修改“nodeURL”变量上的 URL 以反映远程计算机的 IP 地址。可以在默认设置上验证测试结果 TestNG 报告已生成
结语
- Selenium Grid用于在不同的浏览器和平台上同时运行多个测试。
- 电网采用中心节点概念。
- 集线器是您加载测试的中心点。
- 节点是 Selenium 将执行您在集线器上加载的测试的实例。
- 安装 Selenium 网格,你只需要下载 Selenium 服务器 jar 文件 – 与运行中使用的文件相同 Selenium RC 测试。
- 有两种方法可以验证集线器是否正在运行:一种是通过命令提示符,另一种是通过浏览器。
- 要在 Grid 上运行测试脚本,您应该使用 DesiredCapabilities 和 RemoteWebDriver 对象。
- DesiredCapabilites 用于设置我们将自动化的浏览器和操作系统的类型。
- RemoteWebDriver 用于设置我们的测试将在哪个节点(或机器)上运行。