亲宝软件园·资讯

展开

Selenium Grid 的使用

tester_ggf 人气:1
# 简介 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 节点 ```shell 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 最⼤的处理会话 启动成功: ![](http://pic.downk.cc/item/5e8aff82504f4bcb040e9d21.png) ## 2.启动 node 节点 启动 chrome 浏览器: ```shell 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 运行的平台 启动成功: ![](http://pic.downk.cc/item/5e8aff82504f4bcb040e9d26.png) ## 3.查看 hub 运行状态 通过地址:http://localhost:18888/grid/console ![](http://pic.downk.cc/item/5e8aff82504f4bcb040e9d28.png) 从控制台看到已经注册了一个 node 节点,使用的是 chrome 浏览器。 ## 4.执行脚本 Selenium Grid 运行环境启动之后,我们通过对应的脚本来进行使用。 ```java 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系统) 以下是window系统的示例: - 将 bat文件和浏览器驱动以及selenium-server的jar包放在同一个路径下: ![](http://pic.downk.cc/item/5e8b04a5504f4bcb0413da5e.png) - hub.bat ```shell java -jar selenium-server-standalone-3.12.0.jar -role hub -port 18888 -maxSession 10 ``` - node.bat ```shell 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% ``` # Selenium Grid + TestNG多线程执行 Selenium Grid能够分布式在不同机器上运⾏不同浏览器,但是我们看到的串⾏的效果(也就是⼀个浏览器执⾏结束后,再运⾏另外⼀个浏览器)。要达到并发执⾏的效果,Selenium Grid是做不到的,我们需要通过TestNG单元测试框架所带的并发执⾏机制。并发执⾏能够带来的好处: - 减少了执⾏时间:并⾏测试也就意味着多个浏览器可以在同⼀时间被同时执⾏,从⽽减少了整体测试所花费的时间 - 允许多个线程并⾏同时执⾏⼀个测试脚本/不同的测试脚本 **java运行脚本:** ```java 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(); } } ``` **xml文件配置:** ```xml <?xml version="1.0" encoding="UTF-8"?> ``` 解释: parallel="tests" tests级别:不同的test tag下的用例可以在不同的线程下执行。 相同的test tag下的用例只能在同一个线程中去执行。 thread-count=2:代表了最大并发线程数. 以上xml配置表示:启动两个线程同时执行 SeleniumGridDemo 类。 testng多线程更多内容可参考文章: [testng使用详解](https://www.cnblogs.com/tester-ggf/p/12249496.html)

加载全部内容

相关教程
猜你喜欢
用户评论