Selenium 网格教程:设置集线器和节点(示例)

什么是 Selenium 网格?

Selenium 格 是一部分 Selenium 专门用于在不同浏览器、操作系统和机器上并行运行多个测试的套件。它通过路由远程浏览器实例的命令来实现,其中服务器充当枢纽。用户需要配置远程服务器才能执行测试。

Selenium Grid 有两个版本——较旧的 Grid 2 和较新的 Grid 1。我们只关注 Grid 2,因为 Grid 2 正在逐渐被弃用。 Selenium 球队。

Selenium 格 Archi质地

Selenium 网格有一个中心和节点 Archi结构。

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 服务器来自 点击这里.

设置 Selenium 格

步骤2) 您可以将 Selenium 服务器 .jar 文件可以放在硬盘驱动器的任何位置。但就本教程而言,请将其放在计算机 A 和计算机 B 的 C 驱动器上。完成此操作后,您现在已完成安装 Selenium 网格。以下步骤将启动集线器和节点。

步骤3)

  • 我们现在要启动一个集线器。转到机器 A。使用命令提示符,导航到机器 A 的根目录 - C 驱动器,因为那是我们放置 Selenium 服务器。
  • 在命令提示符下,键入 java -jar selenium-server-standalone-2.30.0.jar -角色中心
  • 集线器应成功启动。您的命令提示符应类似于下图。

设置 Selenium 格

步骤4) 验证集线器是否正在运行的另一种方法是使用浏览器。 Selenium Grid 默认使用机器 A 的 4444 端口作为 Web 界面。只需打开浏览器并转到 http://localhost:4444/grid/console

设置 Selenium 格

此外,您还可以通过启动浏览器并转到“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

设置 Selenium 格

  • 当您按下 Enter 时,您的命令提示符应该类似于下图。

设置 Selenium 格

步骤6) 去 Selenium 网格网络界面并刷新页面。您应该会看到类似这样的内容。

设置 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 界面,将鼠标悬停在要自动化的浏览器图像上。注意 平台,浏览器名称 通过工具提示显示。

使用 DesiredCapabilites 对象

在这种情况下,平台为“XP”,浏览器名称为“Firefox设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“

我们将在我们的 WebDriver 中使用平台和浏览器名称,如下所示(当然您需要先导入必要的包)。

使用 DesiredCapabilites 对象

使用 RemoteWebDriver 对象

导入 RemoteWebDriver 必要的包,然后将我们上面创建的 DesiredCapabilities 对象作为 RemoteWebDriver 对象的参数传递。

使用 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 配置文件的代码

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultHub.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) 出现以下屏幕表明集线器已成功设置

Selenium 使用 JSON 文件的网格配置

步骤5) 打开 Web 浏览器并尝试连接到以下 URL

http://192.168.43.223:4444/grid/console

注意: URL 可能因机器而异。必须使用上面屏幕上的 URL,后面跟着“节点应注册到”。

步骤6) 将出现网格控制台屏幕,表明集线器已启动并正在运行

Selenium 使用 JSON 文件的网格配置

使用 JSON 配置 NODES

步骤1) 下载提供的示例节点配置文件 Selenium 使用以下 URL

https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

注意: 如果您使用的是 SELENIUM 3.0 或更高版本,则必须使用以下 JSON 文件

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.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) 按下回车键后将出现以下屏幕

使用 JSON 配置节点

步骤5) 导航到网格控制台以验证节点是否已成功配置

使用 JSON 配置节点

浏览器显示在网格控制台上。因此我们可以确定节点已成功配置。

示例测试用例 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 用于设置我们的测试将在哪个节点(或机器)上运行。