美文网首页
Selenium网格教程:集线器和节点

Selenium网格教程:集线器和节点

作者: IT赶路人 | 来源:发表于2021-08-22 11:48 被阅读0次

公众号-IT赶路人,专注分享与IT相关的知识! 关注我,成就最好的自己!

什么是Selenium网格?

Selenium网格 是Selenium Suite的一部分,专门用于跨不同浏览器、操作系统和计算机并行运行多个测试。用户需要配置远程服务器才能执行测试。

Selenium Grid有两个版本--较旧的Grid 1和较新的Grid 2。我们将只关注网格2,因为网格1正逐渐被Selenium团队弃用。


1.jpg

Selenium Grid使用集线器-节点概念,只需在一台名为 集线器 ,但是执行将由不同的机器来完成,称为 节点 。

在本教程中,将了解-

  • 什么是Selenium网格?

  • Selenium网格何时使用?

  • 网格1.0与网格2.0

  • Selenium网格体系结构

  • 如何设置Selenium网格?使用命令行

  • 设计可在网格上运行的测试脚本

  • 使用DesiredCapabilites对象

  • 使用RemoteWebDriver对象

  • 在网格上运行示例测试用例

  • 基于JSON文件的Selenium网格配置

  • 使用JSON配置节点

Selenium网格何时使用?

当要执行以下任一操作或同时执行两项操作时,应使用Selenium Grid:

*同时针对不同的浏览器、操作系统和计算机运行测试。这将确保应用程序测试与多种浏览器-操作系统组合完全兼容。 *节省执行测试套件的时间。如果将Selenium Grid设置为一次运行(比方说)4个测试,那么完成整个套件的速度将提高大约4倍。

网格1.0与网格2.0

以下是Selenium网1和Selenium网2的主要区别。

网格1 网格2
Selenium Grid 1有自己的遥控器,这与Selenium RC服务器不同。它们是两个不同的程序。 Selenium Grid现在与Selenium Server JAR文件捆绑在一起
需要安装和配置阿帕奇首先蚂蚁,然后才能使用栅格1。 不需要在网格2中安装Apache Ant。
只能支持Selenium RC命令/脚本。 可以同时支持Selenium RC和WebDriver脚本。
每个遥控器只能自动化一个浏览器。 一个遥控器最多可以自动操作5个浏览器。

Selenium网格体系结构

Selenium Grid有一个中心和节点架构。

集线器

  • 集线器是加载测试的中心点。

  • 网格中应该只有一个集线器。

  • 集线器只在一台机器上启动,比方说,一台操作系统是Windows7、浏览器是IE的计算机。

  • 包含集线器的机器将在其中运行测试,但是将看到浏览器在节点上是自动化的。

这些节点

  • 节点是将执行加载到集线器上的测试的Selenium实例。

  • 网格中可以有一个或多个节点。

  • 节点可以在具有不同平台和浏览器的多台机器上启动。

  • 运行节点的计算机不必与集线器的平台相同。

Selenium网格可以通过两种不同的方式设置;一个通过命令行,另一个通过JSON配置文件。

如何设置Selenium网格使用命令行

在本节中,将使用2台机器。第一台计算机将是将运行的系统为简单起见,让我们将假设机器A的IP地址为192.168.1.3,而机器B的IP地址为192.168.1.4。

第一步

从下载Selenium Server这里。


2.png

第二步

可以将Selenium Server.jar文件放在硬盘驱动器中的任何位置。但对于普莱斯来说以下步骤将启动集线器和节点。

第三步

  • 我们现在要启动一个枢纽。使用命令提示符,导航到Machine A的-C驱动器的根目录,因为这是我们放置Selenium Server的目录。

  • 在命令提示符下,键入JAVA-JAR Selenium-server-Standalone-2.30.0.jar-Role Hub

  • 集线器应该会成功启动。命令提示符应该类似于下图


    3.jpg

    第四步

验证集线器是否正在运行的另一种方法是使用浏览器。只需打开浏览器并转到[http://localhost:4444/grid/console]

此外,还可以通过在那里启动浏览器并转到“iporhostnameofmachineA”应该是运行集线器的机器的IP地址或主机名,来检查机器B是否可以访问集线器的Web界面。由于计算机A的IP地址是192.168.1.3,因此在计算机B的浏览器上应键入http://192.168.1.3:4444/grid/console

第五步

  • 现在集线器已经设置好了,我们将启动一个节点。转到计算机B并在那里启动命令提示符。

  • 导航到驱动器C的根目录,然后键入以下代码。我们使用了我们也使用端口5566,不过可以选择任何想要的自由端口号。

  • 注意:如果使用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

    5.png
  • 当按Enter键时,命令提示符应该类似于下图。

第六步

转到Selenium Grid web界面并刷新页面。应该看看这样的东西。


6.jpg

此时,已经配置了一个简单的网格。现在可以在计算机B上远程运行测试了。

设计可在网格上运行的测试脚本

要设计将在网格上运行的测试脚本,我们需要使用 DesiredCapablites(预留功能) 以及 RemoteWebDriver 对象。

  • DesiredCapablites(预留功能) 用于设置 浏览器 和 操作系统 我们将把它自动化

  • RemoteWebDriver 用于设置我们的测试将在哪个节点(或机器)上运行。

要使用 DesiredCapablites(预留功能) 对象,则必须首先导入此包。


8.png

要使用 RemoteWebDriver 对象,则必须导入这些包。


使用DesiredCapabilites对象

转到网格的Web界面,并将鼠标悬停在要自动操作的浏览器图像上。注意 站台, 以及 浏览器名称 由工具提示显示。


10.png

在本例中,平台是“XP”,浏览器名称是“Firefox”。

我们将在WebDriver中使用平台和BrowserName,如下所示(当然,首先需要导入必要的包)。


11.png

使用RemoteWebDriver对象

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


12.png

在网格上运行示例测试用例

下面是一个简单的WebDriverTestNG可以在机器A上的Eclipse中创建的代码。一旦运行它,将在机器B上执行自动化。


13.png

测试应该会通过。

使用JSON文件配置Selenium网格:

JSON代表Javascript对象表示法。它是用于INTERT的标准格式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) 将出现以下屏幕,指示集线器设置成功


16.png

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

http://192.168.43.223:4444/grid/console

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

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


17.png

使用JSON配置节点:

步骤1) 使用以下URL下载Selenium提供的示例节点配置文件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) 按Enter键时将出现以下屏幕 18.png

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


19.png

浏览器显示在网格控制台上。因此,我们可以确保节点配置成功。
Selenium Grid上的示例测试用例:

 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 = "http://www.itxiaonv.com/test/guru99home/";
         nodeURL = "http://192.168.43.223:4444/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 Grid,只需下载Selenium Server JAR文件-与运行Selenium RC测试时使用的文件相同。

  • 有两种方法可以验证集线器是否正在运行:一种是通过命令提示符,另一种是通过浏览器

  • 要在网格上运行测试脚本,应使用DesiredCapability和RemoteWebDriver对象。

  • DesiredCapabilites用于设置我们将自动化的浏览器和操作系统的类型

  • RemoteWebDriver用于设置我们的测试将在哪个节点(或机器)上运行。

26322751-8bd00fde1a719aa1.jpg

相关文章

网友评论

      本文标题:Selenium网格教程:集线器和节点

      本文链接:https://www.haomeiwen.com/subject/urfebltx.html