简介
Selenium Grid 是 selenium 的三大组件之一, 允许用户同时在不同的机器和系统上测试不同的浏览器, 可以分布式的来执行我们的自动化测试, 也可以测试不同浏览器的兼容性.
Selenium Grid 的组成:
hub 节点(控制器)
中心节点, 控制节点.
管理各个 node 节点的注册信息和状态.
接受并转发客户端 (测试脚本) 请求到合适的 node 节点.
node 节点(执行器)
子节点, 代理点.
负责注册配置信息到 hub 节点(平台, 浏览器, 浏览器版本)
负责接收来自 hub 节点转发的请求以执行具体用例.
也可单独作为远程节点执行测试用例.
环境准备
在需要执行脚本的机器上安装 jdk 和配置环境变量.
然后下载 selenium-server-standalone-x.x.x.jar, 版本对应自己使用 selenium 的版本.
下载地址: https://npm.taobao.org/mirrors/selenium
Selenium Grid 运行
1. 启动 hub 节点
java -jar selenium-server-standalone-3.12.0.jar -role hub -port 18888 -maxSession 10
参数解释:
java -jar selenium-server-standalone-3.12.0.jar 运 jar 包
-role hub 以 hub 的运
-port 8888 指定 hub 运的端(默认为 4444)
-maxSession 10 最的处理会话
启动成功:
2. 启动 node 节点
启动 Chrome 浏览器:
- java -Dwebdriver.Chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.12.0.jar
- -role node -hub "http://192.168.1.104:18888/grid/register/" -port 18881 -browser
- "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
参数解释:
-Dwebdriver.Chrome.driver="chromedriver.exe" 指定 chromeDriver 驱动所在的路径(本地)
-jar selenium-server-standalone-3.12.0.jar 执行 jar 包
-role node 以 node 角色执行.
-hub "http://192.168.1.104:18888/grid/register/" 将 node 节点信息, 注册到 对应的 hub 节点上.
-port 18881 node 节点使用的端口.
-browser "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
browserName=Chrome 运行的浏览器.
maxInstances=2 最多支持两个浏览器示例.
version=75 浏览器版本号.
platform=Windows 运行的平台
启动成功:
3. 查看 hub 运行状态
通过地址: http://localhost:18888/grid/console
从控制台看到已经注册了一个 node 节点, 使用的是 Chrome 浏览器.
4. 执行脚本
Selenium Grid 运行环境启动之后, 我们通过对应的脚本来进行使用.
- package com.ggf.webauto;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.remote.BrowserType;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import org.openqa.selenium.remote.RemoteWebDriver;
- import java.NET.URL;
- /**
- * @Description:
- * @Author: ggf
- * @Date: 2020/04/06
- */
- public class RemoteDemo {
- public static void main(String[] args) throws Exception {
- // 期望能力对象
- DesiredCapabilities capabilities = new DesiredCapabilities();
- // 配置测试的浏览器, 使用 Chrome 浏览器
- capabilities.setBrowserName(BrowserType.Chrome);
- // hub 节点
- String url = "http://192.168.1.104:18888/wd/hub";
- // 和 hub 建立通讯, 把相应配置传给 hub,hub 会根据配置选择注册的 node 节点, 打开相应的浏览器进行测试
- WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
- driver.get("http://www.baidu.com");
- driver.findElement(By.id("kw")).sendKeys("selenium");
- Thread.sleep(2000);
- driver.quit();
- }
- }
运行脚本之后, Selenium Grid 的 hub 节点就会调用对应的 node 节点来执行我们脚本中的内容.
5. Selenium Grid 启动优化
为了方便我们快速的启动 Selenium Grid , 我们可以将启动 hub 节点和 node 节点的命令写成一个 .bat 文件(Windows 系统) 或 shell 脚本(Linux 系统)
以下是 Windows 系统的示例:
将 bat 文件和浏览器驱动以及 selenium-server 的 jar 包放在同一个路径下:
- hub.bat
- java -jar selenium-server-standalone-3.12.0.jar -role hub -port 18888 -maxSession 10
- node.bat
- set command=java
- set chromeDriver=-Dwebdriver.Chrome.driver="chromedriver.exe"
- set jarParams=-jar selenium-server-standalone-3.12.0.jar
- set type=-role node
- set hub=-hub "http://192.168.1.104:18888/grid/register"
- set port=-port 18881
- set Chrome=-browser "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
- %command% %chromeDriver% %jarParams% %type% %hub% %port% %Chrome%
- package com.ggf.webauto;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.remote.BrowserType;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import org.openqa.selenium.remote.RemoteWebDriver;
- import org.testng.annotations.Test;
- import java.NET.URL;
- /**
- * @Description:
- * @Author: ggf
- * @Date: 2020/04/06
- */
- public class SeleniumGridDemo {
- @Test
- public void testBaiduSearch() throws Exception{
- // 期望能力对象
- DesiredCapabilities capabilities = new DesiredCapabilities();
- // 配置测试的浏览器, 使用 Chrome 浏览器
- capabilities.setBrowserName(BrowserType.Chrome);
- // hub 节点
- String url = "http://192.168.1.104:18888/wd/hub";
- // 和 hub 建立通讯, 把相应配置传给 hub,hub 会根据配置选择注册的 node 节点, 打开相应的浏览器进行测试
- WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
- driver.get("http://www.baidu.com");
- driver.findElement(By.id("kw")).sendKeys("selenium");
- Thread.sleep(2000);
- driver.quit();
- }
- }
- <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
- <suite name="Suite" parallel="tests" thread-count="2">
- <test name="Test1">
- <classes>
- <class name="com.ggf.webauto.SeleniumGridDemo" />
- </classes>
- </test>
- <test name="Test2">
- <classes>
- <class name="com.ggf.webauto.SeleniumGridDemo" />
- </classes>
- </test>
- </suite>
来源: https://www.cnblogs.com/tester-ggf/p/12643624.html