SeleniumGrid的使⽤
简介
Selenium Grid 是 selenium 的三⼤组件之⼀,允许⽤户同时在不同的机器和系统上测试不同的浏览器,可以分布式的来执⾏我们的⾃动化测试,也可以测试不同浏览器的兼容性。
selenium怎么使用Selenium Grid 的组成:
hub节点(控制器)
中⼼节点,控制节点。
管理各个 node 节点的注册信息和状态。
接受并转发客户端(测试脚本)请求到合适的 node 节点。
node 节点(执⾏器)
⼦节点,代理点。
负责注册配置信息到 hub 节点(平台,浏览器,浏览器版本)
负责接收来⾃ hub 节点转发的请求以执⾏具体⽤例。
也可单独作为远程节点执⾏测试⽤例。
环境准备
在需要执⾏脚本的机器上安装 jdk 和配置环境变量。
然后下载 jar,版本对应⾃⼰使⽤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="" -jar selenium-server-standalone-3.12.0.jar
-role node -hub " 192.168.1.104:18888/grid/register/" -port 18881 -browser
"browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
参数解释:
-Dwebdriver.chrome.driver="" 指定 chromeDriver 驱动所在的路径(本地)
-
jar selenium-server-standalone-3.12.0.jar 执⾏jar包
-role node 以 node ⾓⾊执⾏。
-hub " " 将node 节点信息,注册到对应的 hub 节点上。
-port 18881 node节点使⽤的端⼝。
-browser "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
browserName=chrome 运⾏的浏览器。
maxInstances=2 最多⽀持两个浏览器⽰例。
version=75 浏览器版本号。
platform=WINDOWS 运⾏的平台
启动成功:
3.查看 hub 运⾏状态
从控制台看到已经注册了⼀个 node 节点,使⽤的是 chrome 浏览器。
4.执⾏脚本
Selenium Grid 运⾏环境启动之后,我们通过对应的脚本来进⾏使⽤。
f.webauto;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.BrowserType;
import org.DesiredCapabilities;
import org.RemoteWebDriver;
import java.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 = "192.168.1.104:18888/wd/hub";
//和hub建⽴通讯,把相应配置传给hub,hub会根据配置选择注册的node节点,打开相应的浏览器进⾏测试
WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
<("www.baidu");
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系统)
以下是window系统的⽰例:
将 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=""
set jarParams=-jar selenium-server-standalone-3.12.0.jar
set type=-role node
set hub=-hub "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%
Selenium Grid + TestNG多线程执⾏
Selenium Grid能够分布式在不同机器上运⾏不同浏览器,但是我们看到的串⾏的效果(也就是⼀个浏览器执⾏结束后,再运⾏另外⼀个浏览器)。要达到并发执⾏的效果,Selenium Grid是做不到的,我们需要通过TestNG单元测试框架所带的并发执⾏机制。并发执⾏能够带来的好处:
减少了执⾏时间:并⾏测试也就意味着多个浏览器可以在同⼀时间被同时执⾏,从⽽减少了整体测试所花费的时间
允许多个线程并⾏同时执⾏⼀个测试脚本/不同的测试脚本
java运⾏脚本:
f.webauto;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.BrowserType;
import org.DesiredCapabilities;
import org.RemoteWebDriver;
stng.annotations.Test;
import java.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 = "192.168.1.104:18888/wd/hub";
//和hub建⽴通讯,把相应配置传给hub,hub会根据配置选择注册的node节点,打开相应的浏览器进⾏测试 WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
<("www.baidu");
driver.findElement(By.id("kw")).sendKeys("selenium");
Thread.sleep(2000);
driver.quit();
}
}
xml⽂件配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "/testng-1.0.dtd" >
<suite name="Suite" parallel="tests" thread-count="2">
<test name="Test1">
<classes>
<class name="f.webauto.SeleniumGridDemo" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="f.webauto.SeleniumGridDemo" />
</classes>
</test>
</suite>
解释:
parallel="tests"
tests级别:不同的test tag下的⽤例可以在不同的线程下执⾏。
相同的test tag下的⽤例只能在同⼀个线程中去执⾏。
thread-count=2:代表了最⼤并发线程数.
以上xml配置表⽰:启动两个线程同时执⾏ SeleniumGridDemo 类。
testng多线程更多内容可参考⽂章:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论