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

2021-08-22  本文已影响0人  IT赶路人

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

什么是Selenium网格?

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

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


1.jpg

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

在本教程中,将了解-

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有一个中心和节点架构。

集线器

这些节点

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

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

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

第一步

从下载Selenium Server这里。


2.png

第二步

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

第三步

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

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

第五步

第六步

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


6.jpg

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

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

要设计将在网格上运行的测试脚本,我们需要使用 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报告上验证测试结果

总结

26322751-8bd00fde1a719aa1.jpg
上一篇下一篇

猜你喜欢

热点阅读