一、Selenium Grid详细介绍
Selenium Grid 是 Selenium 测试套件的一部分,主要用于通过并行执行测试来提高测试执行的速度和效率。它允许您在多个环境(不同的浏览器和操作系统)上同时运行测试,从而帮助在开发过程中快速发现跨浏览器的兼容性问题。
核心功能
- 并行测试执行:Selenium Grid 允许同时在多个浏览器、版本和操作系统上运行相同的测试用例,这有助于缩短测试周期。
- 扩展性:可以轻松地增加或删除节点(即可运行测试的浏览器实例),这使得 Selenium Grid 可以根据需求扩展。
- 远程执行:测试脚本可以在不同的机器上远程执行,这意味着测试机器可以独立于开发和部署环境设置。
架构组件
Selenium Grid 的架构主要由两个组件组成:
- Hub:Hub 是 Selenium Grid 的心脏,负责管理测试的分发到各个注册的节点上。它接收来自测试的请求,并将它们智能地分配到节点上,这些节点配置有适当的浏览器和操作系统。
- Node:Node 是连接到 Hub 的机器,运行实际的浏览器实例。一个 Grid 可以有多个节点,每个节点可以运行不同类型的浏览器和浏览器版本。节点接收来自 Hub 的命令,并在其上执行测试。
配置和使用
要使用 Selenium Grid,必须首先设置 Hub 和一个或多个 Node。
-
启动 Hub:
java -jar selenium-server-standalone-<version>.jar -role hub
这将启动一个 Hub,并监听默认的4444端口。
-
注册 Node:
java -jar selenium-server-standalone-<version>.jar -role node -hub http://<hub_ip>:4444/grid/register
在这里,
<hub_ip>
是 Hub 机器的 IP 地址,Node 将向此地址注册自己。 -
配置文件:可以通过 JSON 配置文件来详细定义 Node 的能力(即可以运行哪些浏览器以及版本等)。
实际用途
在实际使用中,测试脚本需要配置 WebDriver 来指向 Hub 的地址。当测试运行时,WebDriver 会向 Hub 发送请求,Hub 将请求分配到一个适当的 Node 上执行。
例如,在 Java 中配置 WebDriver:
WebDriver driver = new RemoteWebDriver(new URL("http://<hub_ip>:4444/wd/hub"), DesiredCapabilities.chrome());
这里的 URL 是 Hub 的地址,DesiredCapabilities.chrome()
指定了希望测试在 Chrome 浏览器上运行。
优点和局限
优点:
- 提高了测试的速度和效率。
- 支持跨浏览器和跨平台测试。
- 可以轻松地扩展测试环境。
局限:
- 需要更多的维护和监控。
- 需要对网络配置有一定的了解,尤其是在大规模部署时。
- 可能需要更多的硬件资源,因为每个 Node 都可能运行多个浏览器实例。
Selenium Grid 是一个强大的工具,特别适用于需要在多种浏览器和操作系统上运行测试的大型项目。通过有效地使用 Grid,团队可以显著提高其测试过程的效率和覆盖率。
二、Selenium jenkins插件安装配置
要在 Jenkins 中配置和使用 Selenium 插件,您需要按照以下步骤操作。这包括安装插件、设置 Selenium Grid、配置 Jenkins 任务以运行 Selenium 测试,以及查看测试结果。以下是详细的步骤:
1. 安装 Selenium 插件
首先,您需要在 Jenkins 中安装 Selenium 插件:
- 登录到 Jenkins 控制台。
- 导航到 Manage Jenkins > Manage Plugins。
- 在 Available(可用插件)标签页中,搜索 Selenium Plugin。
- 选中它并点击 Install without restart 或 Download now and install after restart。
- 安装完成后,根据需要重启 Jenkins。
2. 配置 Selenium Grid
安装插件后,您需要配置 Selenium Grid:
- 返回到 Jenkins 控制台,导航到 Manage Jenkins > Configure System。
- 滚动到 Selenium Grid 部分。
- 点击 Add a Selenium Grid。
- 输入 Grid 的名称和其他配置参数,如端口号等。通常,端口号是 4444。
- 点击 Save 以保存配置。
3. 添加节点
在配置了 Grid 之后,您需要添加节点:
首先你要查看selenium-server-standalone-3.141.59.jar这个文件的位置,查找到安装的位置以后,我们使用命令,启动node节点,并注册到hub当中。
java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.110.170:4444/grid/register
注意,这里面的selenium-server-standalone文件的版本号换成你自己安装的版本号,hub对应的服务器地址为修改成为你的服务器地址。执行后得到如下结果:
java -jar /var/lib/jenkins/plugins/selenium/WEB-INF/lib/selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.110.170:4444/wd/hub
14:21:08.842 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
14:21:08.933 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Launching a Selenium Grid node on port 27480
2024-04-24 14:21:09.006:INFO::main: Logging initialized @350ms to org.seleniumhq.jetty9.util.log.StdErrLog
14:21:09.228 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
14:21:09.296 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 27480
14:21:09.296 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Selenium Grid node is up and ready to register to the hub
14:21:09.329 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
14:21:09.524 WARN [SelfRegisteringRemote.registerToHub] - Error getting the parameters from the hub. The node may end up with wrong timeouts.Error with the JSON of the config : hudson.plugins.selenium.JenkinsCapabilityMatcher could not be coerced to instance
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'awx', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-174-generic', java.version: '11.0.22'
Driver info: driver.version: unknown
14:21:09.524 INFO [SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://192.168.110.170:4444/grid/register
14:21:09.540 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use
根据日志信息,可以看出 Selenium Grid 节点已经成功启动并注册到 Hub 了。关键信息如下:
-
节点启动成功:
14:04:56.831 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 9128 14:04:56.831 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Selenium Grid node is up and ready to register to the hub
这表明 Selenium 服务器已经在端口 9128 上启动,并且节点已准备好注册到 Hub。
-
节点开始自动注册:
14:04:56.870 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
节点开始自动注册线程,每隔 5000 毫秒(5 秒)尝试注册到 Hub。
-
节点注册成功:
14:04:57.145 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use
这条日志信息明确表示节点已成功注册到 Hub,并且已准备好使用。
虽然在注册过程中出现了一个警告:
14:04:57.107 WARN [SelfRegisteringRemote.registerToHub] - Error getting the parameters from the hub. The node may end up with wrong timeouts.Error with the JSON of the config : hudson.plugins.selenium.JenkinsCapabilityMatcher could not be coerced to instance
这个警告表示在从 Hub 获取参数时出现了错误,可能导致节点的超时时间设置不正确。但是,这个警告并不影响节点的注册和使用。
4. 使用 Jenkins Job 运行 Selenium 测试
接下来,您需要设置一个 Jenkins 任务来运行 Selenium 测试:
- 在 Jenkins 控制台中,点击 New Item。
- 输入项目名称,选择项目类型(例如 Freestyle project),然后点击 OK。
- 在配置页面,滚动到 Build 部分。
- 点击 Add build step,然后选择适合您测试脚本的步骤,例如 Execute shell 或 Invoke top-level Maven targets。
- 在构建步骤中,输入您的测试命令或脚本。例如,如果您使用 Maven,您可以输入:
确保您的测试脚本配置为指向 Jenkins 中配置的 Selenium Grid。mvn test
- 点击 Save 保存项目配置。
5. 运行 Job 并查看结果
- 返回到项目页面,点击 Build Now 来运行您的测试。
- 完成后,点击左侧的 Build History 查看构建。
- 点击具体的构建号,然后点击 Console Output 查看测试日志和结果。
6. 集成测试报告
为了更好地查看测试结果,您可以集成如 JUnit 或 TestNG 的测试报告插件:
- 在项目配置中,添加 Post-build Actions。
- 选择 Publish JUnit test result report 或 Publish TestNG Results(根据您使用的测试框架)。
- 配置报告的路径。
- 保存更改并重新运行测试。
通过这些步骤,您可以在 Jenkins 中完全自动化地运行和管理 Selenium 测试,从而充分利用 Selenium Grid 的并行测试能力。这有助于提高测试效率,同时确保您的 Web 应用在多种浏览器和环境中的兼容性和性能。