简介

Selenium Grid 是 selenium 的三大组件之一,允许用户同时在不同的机器和系统上测试不同的浏览器,可以分布式的来执行我们的自动化测试,也可以测试不同浏览器的兼容性。

Selenium Grid 的组成:

  • hub节点(控制器)

    • 中心节点,控制节点。
    • 管理各个 node 节点的注册信息和状态。
    • 接受并转发客户端(测试脚本)请求到合适的 node 节点。
  • node 节点(执行器)
    • 子节点,代理点。
    • 负责注册配置信息到 hub 节点(平台,浏览器,浏览器版本)
    • 负责接收来自 hub 节点转发的请求以执行具体用例。
    • 也可单独作为远程节点执行测试用例。

环境准备

  • 在需要执行脚本的机器上安装 jdk 和配置环境变量。
  • 然后下载 selenium-server-standalone-x.x.x.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="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系统)

以下是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="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运行脚本:

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 version="1.0" encoding="UTF-8"?>
<!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>

解释:

parallel="tests"

tests级别:不同的test tag下的用例可以在不同的线程下执行。

相同的test tag下的用例只能在同一个线程中去执行。

thread-count=2:代表了最大并发线程数.

以上xml配置表示:启动两个线程同时执行 SeleniumGridDemo 类。

testng多线程更多内容可参考文章: testng使用详解

Selenium Grid 的使用的更多相关文章

  1. 搭建selenium grid简单配置

    1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...

  2. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  3. Selenium Grid 学习笔记

    Selenium Grid 学习笔记http://www.docin.com/p-765680298.html

  4. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

    Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...

  5. selenium Grid(一)

    selenium grid Quick Start selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成.hub用来管理各个代理节点的注册 ...

  6. selenium Grid

    Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...

  7. selenium grid java 资料

    Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml

  8. Selenium Grid跨浏览器-兼容性测试

    Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...

  9. selenium grid的使用与配置

    一.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测 ...

  10. 转:Selenium Grid深入学习

    应网友要求写一个用Selenium Grid控制多系统多浏览器并行执行test case的例子. 因为我这里有两台机子,我打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub ...

随机推荐

  1. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  2. java 构造器(构造方法)使用详细说明

    知识点 什么是构造器 构造器通常也叫构造方法.构造函数,构造器在每个项目中几乎无处不在.当你new一个对象时,就会调用构造器.构造器格式如下: [修饰符,比如public] 类名 (参数列表,可以没有 ...

  3. python从一个目录中复制全部文件图片至另一个目录中,及删除指定目录中的图片

    import shutil import os #目录自己改一下即可,复制 path = "./static/imgs/" new_path = "./static/up ...

  4. Codeforces Round #292 (Div. 2) C. Drazil and Factorial 515C

    C. Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  5. Python基础-求两个字符串最长公共前轴

    最长公共前缀,输入两个字符串,如果存在公共前缀,求出最长的前缀,如果没有输出no.如“distance”和“discuss”的最长公共前缀是“dis”. s1 = input('请输入第1个字符串-- ...

  6. 关于使用map存放数据乱序”问题“

    今天做项目中遇到了一个比较低级的错误,如果没注意将会变的更麻烦... 其实吧,也不难,要求就是将list中的值转为map后,再顺序输出map中的值,list的顺序怎样,加入到map的顺序也应怎样,不能 ...

  7. Layabox enabled 脚本禁用 坑

    从unity入坑到Layabox,真的是一路踩坑啊,今天这个坑叫做 脚本禁用 enabled 问题一: 首先看官方文档 https://ldc2.layabox.com/doc/?nav=zh-ts- ...

  8. video标签加载视频有声音却黑屏

    问题 昨天用户上传了一个视频文件,然而发现虽然有声音但是黑屏. 解释 因为原视频的编码是用 mp4v 格式的,它需要专用的解码器.而 chrome 并不支持,所以无法播放. 然后如果用转码功能转成用 ...

  9. 我要打十个!详解建造者模式(builder pattern)

    前言 "我要打十个",其实是我要打十个野怪! 这十个野怪呢,它们有不同的技能.装备和武器,长得也不一样.这里野怪是一个蛮复杂的对象,由各个不同的部分组成(技能.装备.武器等),不同 ...

  10. 【MVC】使用Jquery缓存数据

    前言 最近接手优化页面加载的任务. 分析其中一个原因是菜单页面ajax异步加载,页面很大,但是除非权限更改或者切换角色,否则每次请求返回数据不变,这个完全可以放在客户浏览器内进行缓存. 分析 粗略一分 ...