♥  前  言

我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具,而 Selenium Grid 是 Selenium 中的一大组件,通过它能够实现分布式测试,能够帮助团队简单快速在不同的环境中测试他们的 Web 应用。

分布式执行测试其实并不是一个非常难以理解的概念,简单来说,就是能够同时在不同的环境中同时执行测试。通过 Selenium Grid,我们可以通过在客户端发送命令到远程端的浏览器实例,在远程端执行 WebDriver 脚本,可以在多台远程的机器上并行运行测试。

Selenium Grid 4 新特性介绍

在以往的 Selenium Grid 版本中(V1-V3)其架构都比较简单。在全新的 Selenium Grid 4 版本中其架构变得有些复杂,但也更加灵活和强大了。

特性一:Hub 和 Node 使用同一个 jar 服务

在之前,我们要配置 Selenium Grid 时需要分别启动 Hub 和 Node 节点,而在全新的 Selenium Grid 4 版本中 Hub 和 Node 都是用同一个 jar 文件,一旦服务启动之后将会同时作为 Hub 和 Node 角色。

特性二:架构优化

在之前的 Selenium 版本中,Selenium Grid 由 Hub 和 Node 组成,Hub 作为总控中心负责 Node 节点注册及转发请求,Node 节点则负责来自 Hub 的请求及执行测试脚本,具体参考我之前的文章 Selenium Grid- 让自动化分布式执行变得可能

文章链接:http://testingpai.com/article/1596527701728

在 Selenium Grid 4 版本的全新架构中划分成了组件:Router、Distributor、Node、Session Map、Session Queue、Event Bus

  • Router - 监听新会话请求

  • Distributor - 选择合适的 Node 执行测试

  • Node - 在对应主机执行测试

  • Session Map - 给 Node 节点标记 session ID

  • Session Queue - 维护所有的会话队列

  • Event Bus - 作为 Grid 各组件通讯桥梁

特性三:不同的 Gird 运行模式

在 Selenium Grid 3 及之前版本中只能使用 Hub 和 Node 工作模式,Selenium Grid 4 除了提供对经典的 Hub 和 Node 模式支持之外,还引入了另外两种全新的模式 standalone、fully distributed。

  • Standalone 模式

standalone 模式能够在一台机器上面执行完整的分布式功能,是 Selenium Grid 的最简单的模式,默认情况下,服务会在 http://localhost:4444 地址监听,我们需要通过 RemoteWebDriver 指向这个地址。

  • Classical 模式

classical 模式也可以称为 hub 和 node 模式,此项模式比较适用于中小型分布式执行要求,根据需要设置一个服务节点(hub)和多个代理节点(node)。

  • Fully Distributed 模式

对于大型的分布式要求,可以采用完全分布式模式,这是 Selenium Grid 4 中最高级的模式,这种模式下需要自己启动每个组件。

Standalone 模式使用

在 standalone 模式下,Node 和 Hub 都是运行在相同的 Selenium Grid 服务中

Step1:准备需要的环境

因为后续下载的 Selenium 组件是 jar 文件,所以需要准备 Java 的环境去运行。如果没有安装 Java 的环境,可以进入到 https://www.oracle.com/java/technologies/downloads/下载安装 JDK 并且配置环境变量,配置完成之后进入到命令行终端,输入以下命令检测:

java -version

如果 Java 环境配置成功,你会看到相关的 Java 版本信息。

Step2:下载浏览器驱动

下一步需要根据你当前的操作系统以及浏览器选择下载合适的驱动。

  • Chrome Driver 地址:https://npm.taobao.org/mirrors/chromedriver

  • Firefox Driver 地址:https://npm.taobao.org/mirrors/geckodriver

驱动下载完成后放置到某个目录下,并将目录添加到系统的环境变量中。在 Selenium Grid 服务启动时将会自动识别。如果不做此操作 Selenium Grid 将无法在在这些浏览器上执行测试。

Step3:创建 Selenium Grid

这一步我们需要下载 Selenium Server 对应地址:https://www.selenium.dev/downloads/

下载完毕之后将其放置到任意的目录中,接下来在命令行终端运行以下命令启动 Selenium Grid

java -jar selenium-server-4.1.1.jar standalone

你将会看到下面的信息输出,我们可以看到 Chrome 以及 Firefox 都被注册到了 Grid 中

D:\Selenium Grid>java -jar selenium-server-4.1.1.jar standalone16:59:31.406 INFO [LogManager$RootLogger.log] - Using the system default encoding16:59:31.409 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing16:59:37.876 INFO [NodeOptions.getSessionFactories] - Detected 8 available processors16:59:38.046 INFO [NodeOptions.discoverDrivers] - Discovered 2 driver(s)16:59:38.071 INFO [NodeOptions.report] - Adding Firefox for {"browserName": "firefox"} 8 times16:59:38.072 INFO [NodeOptions.report] - Adding Chrome for {"browserName": "chrome"} 8 times

我们可以通过访问 http://localhost:4444/status 看到当前的状态

{  "value": {    "ready": true,    "message": "Selenium Grid ready.",    "nodes": [      {        "id": "4bb7d6f7-466d-4537-87ca-1441023e0fff",        "uri": "http:\u002f\u002f192.168.56.1:4444",        "maxSessions": 8,        "osInfo": {          "arch": "amd64",          "name": "Windows 10",          "version": "10.0"        },        "heartbeatPeriod": 60000,        "availability": "UP",        "version": "4.1.1 (revision e8fcc2cecf)",        "slots": [          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "b8a3c42e-c8fb-493c-bb3c-7b6deaa2a02a"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "0eaffe11-62a1-4593-a94f-80151a69c24b"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "7c7211bf-58a7-4ddb-9246-effecbf910ce"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "437be3d5-bdf0-44aa-b401-51f7b9136b15"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "f799da78-4ac8-4799-8d4b-50314a954c01"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "10bd31b1-acf6-4006-af7c-47ea448a6a33"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "31c91763-4aef-4379-910c-647266806fce"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "20caece4-cb26-4914-8dfa-80fffd37191f"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "53a12fa7-63a4-474d-bab4-5e6fc6976ff1"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "7d1bb113-1050-482f-bd5d-939362270fdf"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "c4993662-f2f1-46e6-ab6c-6eae7727dd68"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "d9fcf1d0-cba0-4a53-bba4-934f35be8ccb"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "8b8bdd06-4c6f-4344-812a-3429b5d013c7"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "f7ca236a-7c1f-48ba-93e1-25745ed18493"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "chrome",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "3116789e-3fab-4bcc-89fe-9c0b788bb29f"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          },          {            "id": {              "hostId": "4bb7d6f7-466d-4537-87ca-1441023e0fff",              "id": "3abf1ce7-cd89-48ae-a33d-252abd9a29c5"            },            "lastStarted": "1970-01-01T00:00:00Z",            "session": null,            "stereotype": {              "browserName": "firefox",              "platformName": "WIN10"            }          }        ]      }    ]  }}

我们还可以可以通过在浏览器端输入 http://localhost:4444/grid/console 来查看 Grid 控制台,也可以看到 standalone 模式下,在 node 节点中有对应的 Chrome 浏览器和 Firefox 浏览器。

Step4:使用 Selenium Grid 执行测试

在上述步骤中,我们通过最简单的 standalone 模式配置好了 hub 以及 node,下一步我们将会执行我们的自动化测试。

在编写测试脚本时,我们只需要通过 RemoteWebDriver 指向 http://localhost:4444/

@Testpublic void testChrome() throws MalformedURLException {    DesiredCapabilities caps = new DesiredCapabilities();    caps.setCapability(CapabilityType.BROWSER_NAME,"chrome");    WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/"), caps);    driver.manage().window().maximize();    driver.get("http://testingpai.com/");}
@Testpublic void testFirefox() throws MalformedURLException {    DesiredCapabilities caps = new DesiredCapabilities();    caps.setCapability(CapabilityType.BROWSER_NAME,"firefox");    WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/"), caps);    driver.manage().window().maximize();    driver.get("http://testingpai.com/");}

上述示例客户端脚本和 Grid 服务都是在本机,当然在实际应用中我们可以将 Grid 服务和脚本分别部署在两台主机上,此时脚本中指向的地址:http://localhost:4444/换成 Grid 服务所在主机的对外 IP 地址即可。

2021年最后一天,学点Selenium玩点新鲜~新的一年,让分布式测试有更多玩法相关推荐

  1. 彭山计算机培训,彭山2021年初中生学计算机

    建校以来,我校一直秉承"让每一个学生具备生存发展的能力,让更多学生体验成功"的办学理念,坚持"诚信.务实.精技.立业"和"先做人.后做事"为 ...

  2. 韩顺平 2021零基础学Java 学习笔记

    韩顺平 2021零基础学Java 学习笔记(1)(自用)_丨shallow丨的博客-CSDN博客_韩顺平java笔记 韩顺平 2021零基础学Java 学习笔记(2)(自用)_丨shallow丨的博客 ...

  3. 2021年最后一天了,总得留下点什么

    "时光容易把人抛,红了樱桃,绿了芭蕉". 2021年已经敲响了结束的钟声,新的一年即将到来,虽说中国以农历新年为重,但是随着和世界的交往越趋频繁,农历年只是一个节日了,新历跨年才是 ...

  4. E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

    E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 小明来到一片海滩上,他很喜欢捡贝壳,但他只喜欢质量为x的倍数的贝壳. 贝壳被排列成一条直线,下标从1到n编号,小明打算从编号 ...

  5. 南京邮电大学通信与计算机哪个好,2021年南京邮电大学专业排行榜,哪个专业就业比较好...

    报考专业应该从自己的实际出发,量体裁衣,准确地为自己定位,认清形势与自身实力,才能做出理性选择,使成功概率最大化,不要轻易相信一些所谓考研热门专业新兴专业,热门也会有饱和考研时候也会冷却,何况竞争激烈 ...

  6. 地大武汉计算机学院平均绩点,2021年中国地质大学(武汉)音乐科技与技术专业保研必看成功上岸经验分享...

    原标题:2021年中国地质大学(武汉)音乐科技与技术专业保研必看成功上岸经验分享 个人情况 专业排名:2/36 本科学校:中国地质大学(武汉) 保研学校:中国地质大学(武汉) 奖 学 金:2次国家励志 ...

  7. G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

    G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 在一个二维平面, 有n条平行于y轴的直线, 他们的x坐标是x[i], m条平行于x轴的直线y[i],他们的y坐标是y[i]. ...

  8. 2021高考校考类成绩查询山东,教育知识:2021山东工艺美术学院校考成绩查询艺术校考成绩查询时间及入口...

    山东工艺美术学院2021年艺术生校考成绩查询时间预计将于4月底进行公布,届时请广大艺考生做好成绩查询工作. 2021年山东工艺美术学院成绩查询 山东省专业合格线划定及合格证发放 1.预计2021年4月 ...

  9. 计算机科学与技术 色盲限制,2021男生色盲学什么专业比较好 受限专业有哪些

    2021男生色盲学什么专业比较好 受限专业有哪些2021-04-21 16:51:18文/叶丹 在帮孩子选大学选专业的时候,一定要看好招生章程,上边有写注意事项的,一般会标注某某专业不适宜色弱色盲学生 ...

  10. 2021护理副高考试成绩查询,2021年护理学副高职称资格考试报名在什么时候开始?报名入口和报名方式是什么?...

    2021年护理学副高职称资格考试副高报名时间在什么时候?想必大家也一定十分关注,别急,今天直达100网校小编就为大家解答. 2021年护理学副高职称资格考试报名时间: 副高级卫生专业技术资格考试报名时 ...

最新文章

  1. PyTorch 1.3发布:能在移动端部署,支持Colab云TPU,阿里云上也能用
  2. 【bzoj4712】洪水
  3. 内联函数 —— C 中关键字 inline 用法解析
  4. python基础之五大标准数据类型
  5. hdu 4336 Card Collector 容斥原理 多校联合赛(四) 第六题
  6. Redis的lua脚本
  7. 测试用例管理系统 TestRail测试用例
  8. 名校计算机课程百度云,浙江大学计算机类专业视频课程百度云网盘
  9. webflux excel文件上传:java.io.IOException: Unable to read entire header; 0 bytes read; expected 512 byte
  10. 历史上的今天mysql数据库包含详情分类以及图片(免费分享)
  11. 1637_fgets函数的功能
  12. JSM-ActiveMQ
  13. RTL8812AU/21AU and RTL8814AU drivers and linux driver
  14. gdiplus::real_编程的第二个十年:关于Real™编程器的全部
  15. 博图db块变量导出_如何查看西门子博图软件DB数据块中的变量地址
  16. MinGW-w64 C/C++编译器下载和安装
  17. 【微信小程序】微信小程序获取当日以后的时间日期天数、星期
  18. 技术分享 | 接口测试常用代理工具
  19. matlab筛选excel数据统计,能环水体治理项目(Matlab读取Excel,基本案例筛选)【六】...
  20. 使用mybatis plus添加返回主键id

热门文章

  1. Linux常用命令|徐奥雯编辑整理|XUAOWEN
  2. 快乐美工:一键解决模糊图片高清精准优化
  3. malloc、calloc、realloc函数讲解
  4. 两位8421BCD码加法器的设计与实现
  5. 额~~~字符表情大全(写博客需要)
  6. Microsoft Windows 2000 professional(集成SP4)简体中文专业版下载
  7. 计算机协会游戏方案,计算机协会社团各月工作总结及工作计划
  8. Pycharm问题:this applicatation failed to start because it could not find or laod the qt plaform plugin
  9. 一段让你虎躯一震的代码
  10. Everything+Wox