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

公众号-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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容