Selenium 家族简单介绍:

Selenium 1.0

  Selenium 1.0 包括了 Selenium IDE, Selenium Grid和Selenium RC(Selenium Remote Control)。
  Selenium IDE 是一个Firefox 浏览器的一个插件,可以实现对浏览器的简单操作的录制与回放功能。一般用于测试人员在测试过程中发现bug,通过Selenium IDE 将重测试骤录制下来,快速创建了bug 重现脚本,从而供开发人员容易重现bug。IDE 除了录制回放外还可以导出录制的脚本,并导出成多种语言,不同版本的Selenium 脚本,供测试人员快速开发脚本。
  Selenium Grid 是一个分布式执行 Selenium 脚本工具,现在大版本也到Selenium Grid 2。通过Selenium Grid 可以快速的在多台机器过个浏览器中并行执行多个测试用例,其大大提高了执行测试的效率,并通过一个hub节点管理多个不同系统不同了浏览器的node节点,使脚本在不同的环境下被执行,可以测试兼容性,同样也便于添加变动的测试机器。
  Selenium RC 是Selenium 1.0 的核心,Selenium RC 分Clent Libraies 和 Selenium Server。
  Selenium Libraies 用于编写测试脚本,支持多种不同的主流开发语言,用来控制Selenium Server.
  Selenium Server 则负责控制浏览器的行为,而Selenium Server 又由三部分组成:

  • Selenium Core:被Selenium Server 嵌入到浏览器页面中,是一堆的JavaScript 函数的集合,通过这些JavaScript函数来实现对浏览器的操作。
  • Launcher:用于启动浏览器,把Selenium Core加载到浏览器页面当中,并把浏览器的代理设置Selenium Server 的Http Proxy。
  • Http Proxy:Selenium Server的http代理。

重要参数说明Selenium Grid 是什么?

  Selenium Grid 是一个可以方便的让你脚本运行在不同的平台以及不同的浏览器上的一个框架。Selenium Grid 分1和2两个版本,其中Selenium Grid 2的发布还晚于Selenium 2.0,也就是说Selenium Grid 2 并不是和Selenium 2.0 一起发布的,但是Selenium Grid 2基本上支持Selenium 2.0的所有功能。

Selenium Grid 基本结构

如上图,Selenium Grid 由一个Hub节点和若干个Node节点组成。 其中Hub节点主要用于管理各个Node节点的注册及其状态,并接收Selenium Scripts脚本,然后转发给各个Node节点去执行,所以Hub本身节点是不执行脚本的,Hub是做脚本分发,真正执行脚本都是放于Node节点上。既然Hub 会分发脚本,那么免去了一个一个Node机器上去拷贝你脚本的麻烦啦。

何时需要 Selenium Grid

在了解了什么是 Selenium Grid 和其基本结构后,那么我们开始关心我们何时需要它呢?下面列出两点:

  1. 当你的脚本需要在不同的系统和浏览器运行时,也就是测试需要考虑各种浏览器兼容性时。
  2. 当你想并发执行测试脚本,而且需要用到多台机器资源时。

怎么使用

注意:Selenium Grid 是用java开发的框架,所以想运行这个框架,机器需要有java环境。

下载jar包

下载地址:http://selenium-release.storage.googleapis.com/index.html,选取最新版本,例如写这个文章时最新版本是2.53,那么进入2.53文件夹下载 selenium-server-standalone-2.53.1.jar 文件便可。

启动Hub 节点:

在控制台(终端)输入:java -jar selenium-server-standalone-2.53.1.jar -role hub
出现类似如下图信息便表示Hub启动成功:

这时你可以浏览器打开 http://localhost:4444/grid/console ,可以看到Hub管理页面。

点击 view config,可以查看到当前hub节点的一些配置默认配置信息,例如:
port : 4444 这个是hub 默认的端口号;

throwOnCapabilityNotPresent : true 默认为 true,表示当前hub只有在有node存在时,才会接受测试请求。为false 则反之;

capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher 这是一个实现了CapabilityMatcher接口的类,默认指向org.openqa.grid.internal.utils.DefaultCapabilityMatcher该类用于实现grid在分布测试任务到对应node时所使用的匹配规则,如果想要更精确的测试分配规则,那么就注册一个自己定义的匹配类;

prioritizer : null 这是一个实现了Prioritizer接口的类。设置grid执行test任务的优先逻辑;默认为null,那个脚本先到那个先执行;

newSessionWaitTimeout : -1 默认-1,即没有超时;指定一个新的测试session等待执行的间隔时间。即一个代理节点上前后2个测试中间的延时时间,单位为毫秒;

browserTimeout : 0 浏览器无响应的超时时间,默认为0表示没有超时时间

修改 hub 的配置

想要修改 hub 的配置有两种方法。

通过命令修改

例如假设我的 4444端口被别的程序占用了,我想修改默认的端口为4445,则如下:
java -jar selenium-server-standalone-2.53.1.jar -role hub -port 4445

通过Json文件修改配置:

  1. 新建个json格式的文件,内容如下(这里仅仅修改了maxSession的配置,默认是5),并放于跟Grid jar包同一目录:
    { "host": null, "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "prioritizer": null, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "nodePolling": 5000, "cleanUpCycle": 5000, "timeout": 300000, "browserTimeout": 0, "maxSession": 10 }
  2. 执行命令:java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hub.json

这时再到 Grid Console 页面查看,maxSession 参数已经修改成 10.

node 节点Selenium 环境要求

在添加node节点前,我们先关注下,node 节点对环境要求:

  1. node 节点必须要有 java 环境
  2. node 节点跟hub 节点机器间可以互相 ping 通。(不通时关闭防火墙和安全软件再试试)
  3. node 节点负责执行Selenium 脚本,所以必须有Selenium 环境(脚本语言对应的环境如java, 各个浏览器及其对应的driver)

添加 node 节点

如果你是跟hub同一台机器中添加可以直接在控制台(终端)输入如下命令:
java -jar selenium-server-standalone-2.53.1.jar -role node

如果你想在别的机器上添加node节点则控制台(终端)输入如下命令:
java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://hubip:端口/grid/register

添加完节点后,可以在 Grid Console 页面上查看到已经注册进来的node节点信息和配置。如下图:

补充:使用 -role node 注册表示这个node节点既可以支持Selenium Remote Control 也支持Webdriver
java -jar selenium-server-standalone-2.53.1.jar -role rc //注册的节点仅支持Selenium Remote Control
java -jar selenium-server-standalone-2.53.1.jar -role wd //注册的节点仅支持WebDriver


修改 node 配置

同样node的配置有两种方式

通过命令修改

java -jar selenium-server-standalone-2.53.1.jar -role rc -port 6666

通过json文件修改

例如新建一个node.json文件,如下内存,并放于Grid 同级目录下
{ "capabilities": [ { "browserName": "chrome", "maxInstances": 5, "platform": "WINDOWS", "version":"51" }, { "browserName": "firefox", "maxInstances": 6, "platform": "WINDOWS", "version":"46.0.1" }, { "browserName": "internet explorer", "maxInstances": 2, "platform": "WINDOWS", "webdriver.ie.driver": "IEDriverServer.exe" } ], "configuration": { "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 5, "port": 5555, "register": true, "registerCycle": 5000, "hub": "http://hubIP:4444" }}
重要参数说明:
"browserName": “chrome" 这个很重要,表示你注册的浏览器

"maxInstances": 5 这个参数表示最多启动该浏览器的个数

"webdriver.ie.driver": “IEDriverServer.exe” 每个浏览器driver放置的位置,建议放跟Grid 同级目录下

执行命令:
java -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node.json -hubhttp://192.168.84.209:4444/grid/register
最后查看Grid Console 页面,显示如下node节点信息:

到此为止,我们已经配置好Hub 和需要的多个Node 节点,下去我们需要开始编写测试代码:

测试代码:

编写脚本

例如我想在远程的node 节点(192.168.84.19:5555)机器上启动Chrome/IE/firefox浏览器,并打开百度页面,这里我们需要借助DesiredCapabilities类来指定采用哪个浏览器,用RemoteWebDriver 来实现远程运行,具体代码如下:

// 启动192.168.84.209:5555 node节点的Chrome@Testpublic void testChrome() throws MalformedURLException, InterruptedException{DesiredCapabilities chromeDC = DesiredCapabilities.chrome();WebDriver driver = new RemoteWebDriver(new URL("http://hubip:端口/wd/hub"), chromeDC);driver.get("http://www.baidu.com");Thread.sleep(5000);driver.quit();}// 启动192.168.84.19:5555 node节点的firefox@Testpublic void testFF() throws MalformedURLException, InterruptedException{DesiredCapabilities firefoxDC = DesiredCapabilities.firefox();WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), firefoxDC);driver.get("http://www.baidu.com");Thread.sleep(5000);driver.quit();}// 启动192.168.84.19:5555 node节点的IE@Testpublic void testIE() throws MalformedURLException, InterruptedException{DesiredCapabilities ieDC = DesiredCapabilities.internetExplorer();WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), ieDC);driver.get("http://www.baidu.com");Thread.sleep(5000);driver.quit();}
补充 DesiredCapabilities类,除了可以指定浏览器的名称还可以指定平台和浏览器版本以及浏览器支持的其他功能

Selenium Grid 的GUI管理工具

推荐两个Grid的GUI 管理工具:

  1. Jenkins  selenium Plugin 插件

安装完成后会在导航中添加Grid的入口。

2. VisGrid

下载地址:http://www.codoid.com/products/view/2/30

SOD1 和 SOD2 Grid 情况

SOD1 Grid Console 地址: http://sjqatst02:4445/grid/console ,Hub 配置存放于 /data/home/qateam/Selenium_Server 路径底下,通过执行start_grid.sh文件来启动

SOD1 中总共有6台Node 节点,其中两台RC 节点:http://10.7.77.56:5555, http://10.7.77.54:5555  http://10.7.77.51:5555

三台WebDriver 节点:http://10.7.77.55:5555  http://10.7.77.57:5555

5台机器的Node 配置均放在:C:\Selenium_Server\Selenium_2.47.1_Reg\ 文件夹下,使用node_5555作为启动文件,使用的是nodeConfiguration.json 配置文件。

同时在每台机器的 启动中加入了 启动的批处理文件。

SOD2 Grid Console 地址: http://sjqatst12:4444/grid/console ,Hub 配置存放于  /data/home/qateam/Selenium_Server 路径下,通过执行start_grid.sh文件来启动:

SOD2 种NODE 节点:http://10.7.77.59:5555  http://10.7.77.58:5555  http://10.7.77.59

Selenium Grid 分享相关推荐

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

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

  2. Selenium Grid的使用(分布式测试)

    1.Selenium Grid简介 Selenium Grid组件专门用于远程分布式测试或并发测试.使用此组件可以在一台计算机上给多台计算机(不同操作系统和不同版本浏览器环境)分发多个测试用例从而并发 ...

  3. Selenium Grid的搭建方法

    一.什么是Selenium Grid Selenium Grid 是一种可以并发执行 GUI 测试用例的测试执行机的集群环境,分为 HUB 和 Node 模式.Selenium Hub 用来管理各个 ...

  4. 03-19 分布式测试-Selenium Grid

    简介 Selenium Grid 远程运行 Selenium test,主旨是在多个机器上并行运行 selenium 优点 它是所有测试的中心入口点 可以管理和控制浏览器运行的 Nodes/环境 扩展 ...

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

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

  6. Selenium大家族介绍(selenium RC,selenium IDE, selenium Grid, selenium Webdriver)

    Selenium selenium 是当下非常流行的自动化测试框架,selenium是开源项目. selenium是一个大家族,这个家族中的主要成员有如下所示: selenium RC: seleni ...

  7. 【Selenium Grid 分布式测试】Selenium Grid-简介

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210423. 9.Selenium Grid 分布式测试 Selenium Grid 分布式测试-Selenium Grid简 ...

  8. 【转】Selenium Grid 个人理解

    估计现在用selenium 的人也越来越多了.selenium rc用起来了之后.肯定会有一些想法. 第一,怎么能同时跑多个测试,就是所谓的并发.否则来100个case,一个一个的跑,几个小时才能跑完 ...

  9. selenium grid环境配置

    走了好多弯路,记录一下配置经验.如果有描述不恰当之处,欢迎指出. 首先保证电脑安装了java并且配置好了环境变量:我使用的编译器是pycharm,已经提前下载了selenium 下载selenium ...

最新文章

  1. Redis详解(八)------ 主从复制
  2. Scala基础教程(二):数据类型、变量
  3. 乙级(Basic Level) 1009 数字黑洞
  4. python编程基础_月隐学python第2课
  5. windows上运行MapReduce出错(Failed to set permissions of path)
  6. 使用MRUnit测试Hadoop程序
  7. 6常见的HTML和CSS面试问答
  8. C++ 中的Virtual Function (虚函数)
  9. win10添加环境变量后没用_python 学习之在 win10 下安装 Anaconda
  10. ZYNQ使用W25Q256问题笔记
  11. 基于matlab和proe的曲面建模,两个基础曲面建模实例教你Proe曲面建模技巧和思路...
  12. python自然语言处理之分类和标注词性5.1-5.3
  13. 隐匿函数,二分法 冒泡排序
  14. 陈天出席华盛顿大学春季招聘会 | ArcBlock 动态
  15. .net core mvc中使用ef
  16. 项目管理中用什么工具可以增强团队协作?
  17. JS初中段考:袖珍西历
  18. python简单实现剪刀石头布小游戏
  19. 解析拼手气红包金额划分算法
  20. 冒泡排序【必会知识】

热门文章

  1. java线程的停止,暂停,恢复*
  2. Eclipse安装以及J2EE的安装
  3. STEP找不到CPU
  4. linux平台编译运行c++程序
  5. 固定资产管理系统的一般操作流程
  6. idea maven 打包报错问题、jar包下载慢或者失败爆红、plugins爆红等配置问题
  7. allwinner android 更换开机logo
  8. 中国色—在线的中国传统颜色集锦
  9. circos软件的安装详解
  10. 应对CC攻击的自动防御系统——原理与实现