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

什么是Selenium网格?

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

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

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这里。

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

第二步

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

第三步

  • 我们现在要启动一个枢纽。使用命令提示符,导航到Machine A的-C驱动器的根目录,因为这是我们放置Selenium Server的目录。
  • 在命令提示符下,键入JAVA-JAR Selenium-server-Standalone-2.30.0.jar-Role Hub
  • 集线器应该会成功启动。命令提示符应该类似于下图
Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

第四步

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

此外,还可以通过在那里启动浏览器并转到“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:.exe” -jar selenium-server-standalone-3.4.0.jar -role webdriver -hub http://192.168.1.3:4444/grid/register -port 5566

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example
  • 当按Enter键时,命令提示符应该类似于下图。
Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

第六步

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

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

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

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

  • DesiredCapablites(预留功能) 用于设置 浏览器 和 操作系统 我们将把它自动化
  • RemoteWebDriver 用于设置我们的测试将在哪个节点(或机器)上运行。

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

使用DesiredCapabilites对象

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

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

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

使用RemoteWebDriver对象

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

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

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

Selenium Grid Tutorial: Step by Step Guide with Example
Selenium Grid Tutorial: Step by Step Guide with Example

测试应该会通过。

使用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) 将出现以下屏幕,指示集线器设置成功

步骤5) 打开Web浏览器并尝试连接到以下URL http://192.168.43.223:4444/grid/console

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

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

使用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键时将出现以下屏幕

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

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

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

IT赶路人

专注IT知识分享