Selenium selenium3 grid 分布式浏览器部署及指定远程节点运行

李晓 · 2022年03月01日 · 3454 次阅读

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

Selenium Grid 使用集线器节点概念,您只在称为集线器的单个机器上运行测试,但执行将由称为节点的不同机器完成。

何时使用 Selenium Grid?
当您想要执行以下一项或两项操作时,您应该使用 Selenium Grid:

同时针对不同的浏览器、操作系统和机器运行测试。 这将确保您正在测试的应用程序与各种浏览器 - 操作系统组合完全兼容。
节省执行测试套件的时间。如果您将 Selenium Grid 设置为一次运行 4 个测试,那么您将能够以大约 4 倍的速度完成整个套件。

Selenium 网格架构
Selenium Grid 具有集线器和节点架构。

枢纽
集线器是您加载测试的中心点。
网格中应该只有一个集线器。
集线器仅在单台机器上启动,例如,操作系统为 Windows 7 且浏览器为 IE 的计算机。
包含集线器的机器是运行测试的地方,但您会看到浏览器在节点上自动运行。
节点
节点是将执行您在集线器上加载的测试的 Selenium 实例。
网格中可以有一个或多个节点。
节点可以在具有不同平台和浏览器的多台机器上启动。
运行节点的机器不需要与集线器的平台相同。
Selenium 网格可以通过两种不同的方式设置;一个通过命令行,另一个通过 JSON 配置文件。

方式一:使用命令行
使用两台机器,机器 A 作为主机,机器 B 作为节点机,A 的地址是 192.169.1.3,而 B 的地址是 192.168.1.4

1、下载 selenium gird 服务器

https://www.selenium.dev/downloads/

2、可以将 Selenium Server .jar 文件放在硬盘中的任何位置,建议放在浏览器的安装目录

3、启动一个主机,A 使用命令提示符:java -jar selenium-server-standalone-2.30.0.jar -role hub,启动成功显示如下

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

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

5、创建节点

现在已经设置了集线器,我们将启动一个节点。转到机器 B 并在那里启动命令提示符。
导航到驱动器 C 的根目录并键入下面的代码。我们使用了 IP 地址 192.168.1.3,因为那是集线器运行的地方。我们还使用了端口 5566,尽管您可以选择任何您想要的空闲端口号。
注意:如果使用 Firefox,您现在必须提供 Gecko 驱动程序的路径。这是需要使用的更新代码
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

创建成功如下

6、访问http://192.168.1.3:4444/grid/consolenode查看连接

7、访问http://192.168.1.4:5566/wd/hub/static/resource/hub.htmlnode 状态可以查看

8、访问http://192.168.1.3:5566/grid/api/proxy?id=http://192.168.1.4:5566node 信息可查看

至此,已经配置一个简单的网络,现在已准备好在机器 B 上远程运行测试

二、运行远程浏览器脚本编写
要设计将在网格上运行的测试脚本,我们需要使用 DesiredCapabilites 和 RemoteWebDriver 对象。

DesiredCapabilites 用于设置我们将自动化的浏览器和操作系统的类型
RemoteWebDriver 用于设置我们的测试将针对哪个节点(或机器)运行。
1、首先查看平台和工具提示显示的浏览器名称。

Selenium Grid 教程:带示例的分步指南
在本例中,平台为 “XP”,浏览器名称为 “Firefox”。

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

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

注意:这里有两种配置方式:

第一种使用主机作为 url 即:http://192.168.1.3:4444/wd/hubnode 运行,会选择第一个
第二种使用 node 节点作为 url:即http://192.168.1.4:5566/wd/hub,会在该节点运行脚本

3、在网格上运行示例测试用例
下面是一个简单的 WebDriver Testng 代码,您可以在机器 A 上的 Eclipse 中创建它。运行它后,将在机器 B 上执行自动化。

方式二、使用 JSON 文件的 Selenium 网格配置
JSON 代表 Javascript 对象表示法。它是用于在浏览器和 Web 服务器之间交换数据的标准格式。Selenium 有一个内置的 JSON 配置文件,可用于设置 selenium 网格。

1、使用 JSON 配置文件配置 selenium grid hub,创建 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
}
使用命令提示符启动主机:java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hubconfig.json

注意: Selenium 独立 jar 文件和 json 文件必须存在于同一目录中

2、使用 JSON 配置节点

1)代码地址: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)在命令提示符下运行以下命令

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
运行实例代码:

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://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。它验证了链接名称 “移动测试” 显示在页面上

可以修改 “nodeURL” 变量上的 URL 以反映远程机器的 IP 地址。测试结果可以在生成的默认 TestNG 报告上进行验证

总结:
Selenium Grid 用于在不同的浏览器和平台上同时运行多个测试。
网格使用中心节点概念。
集线器是您加载测试的中心点。
节点是将执行您在集线器上加载的测试的 Selenium 实例。
要安装 Selenium Grid,您只需要下载 Selenium Server jar 文件 - 与运行 Selenium RC 测试时使用的文件相同。
有两种方法可以验证集线器是否正在运行:一种是通过命令提示符,另一种是通过浏览器
要在 Grid 上运行测试脚本,您应该使用 DesiredCapabilities 和 RemoteWebDriver 对象。
DesiredCapabilites 用于设置我们将自动化的浏览器和操作系统的类型
RemoteWebDriver 用于设置我们的测试将针对哪个节点(或机器)运行。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册