利用 Selenium WebDriver + Grid2 实现并行的浏览器端性能测试

2023-05-16

在 Web 2.0 应用中,页面装载时间和浏览器渲染时间将成为决定性能的关键因素。我们在测试过程中不仅需要手动触发性能测试工具,而且需要模仿不同的用户行为,包括不同的浏览器、不同的网络条件和不同的使用习惯。在这种情况下我们需要新的方法与工具来覆盖特别是浏览器端的性能测试。用 Selenium WebDriver + Grid2 可以解决浏览器端性能测试中的自动化和并发性问题。本文介绍了这种新的测试框架和脚本的开发过程,并结合案例给出了具体的代码和结果分析。使用 Selenium WebDriver+Grid2 可以将已有的自动化测试资源为性能测试服务,将测试人员从繁杂的手动测试中解放出来,专注于结果分析和问题解决。

我们需要新的方法与工具来覆盖浏览器端的性能测试

在浏览器端的性能测试中遇到的一些问题

在传统的互联网应用中,由于浏览器端的时间消耗比较有限,并且页面装载时间也比较简单且有限,所以在对传统互联网应用的响应时间分析中,我们通常忽略页面装载时间和浏览器渲染时间,而着重分析服务器响应时间。而在 Web 2.0 应用中,页面装载时间和浏览器渲染时间将成为决定性能的关键因素,所以我们需要新的方法与工具来覆盖特别是客户端的性能:浏览器响应时间。

我们使用一些工具来帮助我们测试浏览器端的性能;比如说 DummyNet 可以模拟不同网络带宽和延迟,以便我们分析不同网络情况下的的网页性能;HttpWatch 可以分别记录每个请求的服务器端响应时间、页面装载时间、浏览器渲染时间;DynaTrace AJAX 是一种详细的底层工具,它不仅可以显示所有请求和文件在网络中的传输时间,还会记录浏览器 render、CPU 消耗、JavaScript 解析和运行的详细情况。我们使用这些工具的时候大多是手动触发,为了得到数据和分析报告,必须将用户案例在不同的浏览器上手动实现,并且在某一时刻打开或关闭工具和保存结果。过多的手动操作使我们很难专注于数据分析和发现问题。所以我们需要解决以下问题:

  • 需要有工具在模仿用户使用 web 应用程序的同时自动触发这些工具,生成分析数据。
  • 可以同时模仿不同的用户行为,包括不同的浏览器,网络条件和使用习惯。

下面的章节将介绍如何利用自动化工具 Selenium 来搭建测试网页浏览器端性能的测试框架,实现浏览器端自动测试和并行测试。

浏览器端性能测试框架中用到的技术

我们的测试框架主要采用了以下技术:

Selenium WebDriver

Selenium 是针对 Web 应用的测试框架,支持多种浏览器和多种编程语。WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。它提供了一个更为简单,一致的编程接口并且解决了在 Selenium-RC API 遇到的问题。Selenium WebDriver 更好的支持了动态网页。它的目标是为现代的网页程序测试提供设计良好的面向对象的 API。

Selenium Grid2

Selenium Grid 允许用户将测试案例分布在几台机器上并行执行。用户可以在一个集中控制点控制不同的环境。在不同的浏览器 / 系统组合上面更为容易的运行测试案例。允许用户更多的利用虚拟资源减少了维护测试环境的成本。Selenium Grid2 很好的支持了 WebDriver。利用原有的 WebDriver 脚本和 Grid 技术就可以将不同的测试用例分布在不同的机器或虚机上,在特定的浏览器版本上运行,自动地启动关闭分析工具,统一地保存测试结果。Selenium Grid2 的机制如图 1,启动一个中央节点(Hub),然后启动多个远程控制节点(rc),启动 rc 时告知 Hub 的位置,这样这些 rc 就可以注册到 Hub 上,测试程序与 Hub 通讯,当测试被并发地发给 Hub 时,Hub 会自动将这些测试命令分发给已经注册的 rc,rc 接到命令后执行测试。

TestNG

本测试系统还使用 TestNG 工具来辅助配置自动测试。TestNG 是测试 Java 应用程序的框架之一。TestNG 以其灵活性和参数化成为定义 Selenium 的驱动验收测试的首选。它通过一些语义注释来传递测试的参数,定义测试脚本的顺序并配置运行时的性能。用户可以通过配置来生成各式测试报告,十分方便。

图 1. Selenium Grid2 的机制
 

Ant

在框架中我们使用 Ant 来构建版本 , 然后部署到测试环境中去 , 再然后执行测试脚本到生成发送测试报告 .

回页首

浏览器端性能测试框架的实现

Selenium WebDriver 编写测试脚本

利用 Selenium WebDriver 为动作执行和页面跳转进行设计。Selenium WebDriver 可以模拟用户上网的行为,添加计时代码用以测算用户某个动作执行的时间或是页面跳转需要的时间。以用户登录为例,在输入用户名和密码之后开始用 startTrans 函数开始计时,在点击提交按钮页面跳转之后用 endTrans 函数结束计时。

清单 1. 在 Selenium 中添加计时代码

   

利用 DummyNet 模拟不同网络条件下用户的案例执行。带宽模拟与控制是性能测试的一个常规需求。很多时候我们必须能够提供可变的带宽、上行和下行速率,从而获得这些条件下性能的表现。开源工具 DummyNet 是一款优秀的网络控制工具,它通过重载本机的网卡驱动,提供给开放人员命令行接口去模拟带宽可变利用。调用 DummyNet 的命令后执行 Selenium 脚本可以设置网络带宽和延迟。以下命令限制从源地址到目的地址的流量带宽 2Mb, 延迟 300ms。


ipfw add pipe 2 ip from %sourceip%  to %targetip% out proto ip
ipfw pipe 2 config delay 300ms bw 2Mbit/s  

利用 HttpWatch 和 DynaTrace AJAX 为特定的页面请求记录时间。HttpWatch 和 DynaTrace AJAX 是两款强大的网页数据分析工具。它们通常集成在浏览器的工具栏。以往我们通过手动打开这些工具在浏览页面的同时收集所需的分析数据。在新的框架中 Selenium 脚本可以调用它们的接口驱动浏览器从会话中启动分析工具并收集保存性能信息。

清单 2. Selenium 脚本调用 DynaTrace AJAX 接口

Selenium Grid2 集中控制测试环境

步骤一:启动中央节点(Hub)。Hub 会接收测试请求并将它们分布在正确的节点上。启动 Hub 的默认端口为 4444,也可以通过参数指定端口。打开地址:http://localhost:4444/grid/console,通过页面可以观察 Hub 的状态。启动命令如下 :


java -jar selenium-server-standalone-2.14.0.jar -role hub  

步骤二:配置和启动远程控制节点(rc)。远程节点是您需要测试的测试机所在的物理机或虚拟机。启动节点时需要传入 Hub 的 IP 地址和端口号。默认情况下,节点的端口为 5555,每个节点可以启动 11 个浏览器,包括 5 个 firefox、5 个 chrome 和 1 个 ie 浏览器。最多有 5 个并行的测试案例。用户也可以通过参数指定端口和浏览器,以下命令将会启动 Linux 远程节点上的三个 firefox 浏览器进行并行测试,它们指向在另一台机器的 Hub 节点。


 java -jar selenium-server-standalone-2.14.0.jar -role node \
 -hub http://remotehost:4444/grid/register \
 -browser browserName=firefox,version=3.6,maxInstances=3,\
 platform=LINUX  

Selenium WebDriver 和 Grid2 并发执行测试用例

TestNG 可以很方便的加载在已经开发好的 Selenium WebDriver 测试案例,测试用例中的参数通过 @Parameters 传递。在测试中我们需要将同一个测试案例发送到不同的节点或是浏览器上执行。所以我们从已有的 Selenium 脚本中选出案例后用 @Test 标注并加入节点的 IP、端口和浏览器类型参数。

清单 3. 将 TestNG 加载在已有的 Selenium 测试脚本

 @Test 
 @Parameters({"seleniumHost", "seleniumPort", "bs"}) 
 public void sitenav(String Host,String Port,String browser)  

TestNG 要求将所有要运行的测试用例都记录在一个叫 testng.xml 的文件中,然后根据该文件中的测试用例顺序依次执行测试。通过 suit 标签的属性可以指定 method、tests 或是 classes 的并发执行。我们在 testng.xml 中将测试的并行粒度设为 Test, 用参数传入不同的 IP 地址、端口号、浏览器名称,形成不同的测试案例,以便在不同节点上的不同浏览器中并行执行。

清单 4. testng.xml 中有关并行测试案例的配置

   

最后用 Ant 从命令行运行 TestNG 类。用户通过命令行启动 Ant,读取目标文件 build.xml 来获得项目的参数,例如目标定义、类路径、引入的文件等。Ant 通过读取 TestNG 的配置文件 testng.xml 来获取参数,将 Java 代码编译成 TestNG 类,并且根据配置文件中传入的参数和顺序来执行这些类。以下是在 Ant 的 build.xml 里面如何正确配置 TestNG。

清单 5. Build.xml 里配置 TestNG

   


应用示例

IBM Connections 3 是 IBM 专门为满足企业业务需求而设计的一款社交软件。我们用它作为目标程序来测试其浏览器端的性能。用 Selenium WebDriver 编写脚本模拟用户依次浏览主页、登陆、个人资料、博客等主要页面。我们将同样的脚本在不同网络环境、不同操作系统、不同浏览器中并行执行,并且记录页面的响应时间,完整下载时间,对不同浏览器,不同网络条件下的页面响应时间加以比较。测试过程如下:

  • 选取几台测试机作为测试节点,测试机器上具有我们所需要的操作系统、浏览器类型、测试分析工具,选取一台测试机作为 Hub。配置和启动 Hub 和测试节点。
  • 准备不同类型的测试案例 Test1.....TestN。根据操作系统、浏览器和所需的测试工具,在 testng.xml 中将测试脚本分配给相对应的测试节点 Node1.......NodeN 形成不同的测试案例。图 2 是测试节点配置和测试案例的分布图。
  • 编辑 build.xml 文件。执行 ant 命令。通过网页观察 Hub 的状态和测试节点的执行情况。
  • 测试执行完,从各节点和 Hub 上收集测试数据加以整理和分析。

测试数据从几个方面获得。有关测试环境的数据将会直接从配置文件获取,简单的页面响应时间会由 Selenium 脚本获取。浏览器响应时间分解和网页分析数据将会由 HTTPWACTH 等辅助测试工具获得。图 3 是由部分测试数据经过汇总整理后形成的表格。从表格中可以看到同一个页面请求在不同配置的测试机上的响应时间,如果该机器加载了性能分析工具,还可以通过抓取 HTTPWACTH 分析结果进一步得到响应时间分解。

图 2. 测试节点配置和测试案例的分布图
 
图 3. 测试数据汇总表格样式

小结

利用 Selenium WebDriver 和 Grid2 可以将已有的自动化测试脚本为性能测试服务,并发、自动地执行测试案例节省了时间和人力,使测试人员能够将精力集中在数据分析和性能调优上。灵活的配置测试环境,包括网络环境、操作系统和浏览器类型,可以在短时间内得出不同情况下目标程序的客户端性能数据,方便比较和发现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用 Selenium WebDriver + Grid2 实现并行的浏览器端性能测试 的相关文章

  • react子父组件传值&生命周期

    react子父组件 父子组件传值 create react app 新建react文件 文件夹assets components css main props 父组件通过refs获取子组件 新建components firstpage js
  • nodejs连接MongoDB(增删改查)/MySQL

    启动mongodb 启动服务器 运行mongo 两个cmd命令框 vscode新建项目mongodb 新建mongo js 安装mongodb cnpm install mongodb save 进入momgo js 引入mongodb 远
  • QWaitCondition 的正确使用方法(qt线程同步)

    简单用法 QWaitCondition 用于多线程的同步 xff0c 一个线程调用QWaitCondition wait 阻塞等待 xff0c 直到另一个线程调用QWaitCondition wake 唤醒才继续往下执行 为了描述方便 xf
  • boost入门指南(windows)

    什么是boost boost库是一个开源免费的第三方库 xff0c 它是一个非常优秀的库 xff0c 是C 43 43 标准的最好实践之一 xff0c 因此也经常被用于商业的开发 boost致力于建立 C 43 43 标准的 现有实践 和参
  • GET . POST . PUT . DELETE 请求方式

    请求类型一共8种 常用的4种 GET POST PUT DELETE 1 GET get请求是用来获取数据的 相当于数据库中的select操作一样 不对服务器的数据做任何的修改 新增 删除 只是用来查询数据 get请求参数会加在URL后面
  • Springboot整合mybatis+mybatis-plus+PageHelper

    Mybatis是在国内使用是最广泛的 xff0c 以前都是使用xml进行映射 xff0c 说实话真心不太好用 xff0c 维护起来也不太方便 从mybatis3 0后开始支持 64 Mapper注解 xff0c 极大方便了开发 xff0c
  • PHP操作mysql

    一 mysqli基础操作 xff1a 1 连接数据库 xff1a mysqli connect 函数 填写你连接数据库的账号密码 conn 61 mysqli connect 39 127 0 0 1 39 39 root 39 39 ro
  • Linux安装pytorch1.1.0+CUDA10.0

    1 创建虚拟环境 conda create span class token operator span n pytorch1 span class token punctuation span span class token numbe
  • 使用dd复制将乌班图系统(Ubuntu22.04)完整迁移到新硬盘并扩容

    我的折磨历程 开始的时候用乌班图的时候 xff0c 不懂事 xff0c 根目录太小了 xff0c 后来就满了 xff0c 就就感觉完全没法用 xff0c 看着现在硬盘贼便宜 xff0c 去狗东买了个新的硬盘 感觉挂载硬盘并不能解决我的问题
  • vue指令

    目录 一 vue 的指令 1 v text 2 v html 3 v show 4 v if v esle if v else xff08 1 xff09 v if xff08 2 xff09 v if 与 v show 5 v for x
  • C# switch语句

    一 C switch语句 if语句每次判断只能实现两种选择 xff0c 而switch语句每次判断可以实现多种选择 基本语法格式如下 xff1a switch controlling expression case constant exp
  • python pyinstaller打包教程(pycharm)

    PyInstaller简介 PyInstaller是一个跨平台的Python应用打包工具 xff0c 支持 Windows Linux MacOS三大主流平台 xff0c 能够把 Python 脚本及其所在的 Python 解释器打包成可执
  • Windows11更新后打不开Edge浏览器解决办法

    前几天吐槽win11更新版本后打不开Microsoft Edge浏览器了 xff0c 特别影响我使用 xff0c 然后找网上方法 xff0c 大多让去设置里 修复 xff0c 就这样 xff0c 然而没什么卵用 xff0c 这应该是win1
  • Ubuntu16.04下联想R720的无线网卡开启问题及信号不稳定

    问题一 1 1 问题描述 笔记本型号 xff1a Lenovo r720笔记本 xff08 i5 7300hq xff0c gtx1060 maxq 6g xff09 xff0c 默认装入Win10系统 xff0c 然而当装入Ubuntu1
  • 【Anaconda 故障排除】之 EnvironmentNotWritableError

    目录 前言1 Anaconda Prompt 报错2 IPython 报错3 管理员身份运行 Anaconda Powershell Prompt4 其他方法总结 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 刚刚卸
  • 与WPF相关的几本不错的书籍

    其实现在说这个话题有点过时 xff0c 因为WPF问世也已经有很长一段时间了 但是最近自己在读 WPF揭秘 xff0c 因此就对 现在 可以找到的资料做了些查询 之所以说是 现在 xff0c 是因为半年多前 xff0c 我就得到了一些有关W
  • docker入门之一centos7系统+docker安装

    一 安装centos 7 1 下载rufus 3 3制作U盘系统启动盘 2 加载U盘启动后 xff0c 默认选择的是第二项 xff0c 这里我们需要按 键 xff0c 将选项调到第一项Install CentOS7 再按enter键 3 语
  • Docker入门之二Docker原理、常用命令

    一 底层原理 Docker是什么工作的 xff1f Docker是一个 Client Server 结构的系统 xff0c Docker的守护进程运行在主机上 通过 Socket 从客户端访问 xff01 Dockerserver接收到 D
  • Docker入门之三容器命令

    一 容器命令 说明 xff1a 有了镜像才能创建容器 xff0c 首先下载一个centos镜像测试 1 下载镜像 docker pull centos 2 新建容器并启动 docker run docker run span class t
  • 【stm32f103】认识GPIO

    认识GPIO 什么是GPIOGPIO基本结构保护二极管输出模式推挽输出开漏输出 输出数据寄存器 xff08 参考手册8 2 xff09 GPIOx ODRGPIOx BSRR 输入模式 GPIO工作模式输入模式 xff08 模拟 浮空 上拉

随机推荐

  • 【ubuntu】Windows10远程桌面连接ubuntu20.04【未完待续】【由于特别卡顿,不好用,不续了】

    先上结果 环境 硬件 xff1a Jetson Xavier NX 套件 系统 xff1a Ubuntu 20 04 43 Windows10 软件 xff1a Xorg xrdp xubuntu desktop 解决 0 问题 使用Jet
  • 5G的介绍与个人理解

    1 5G概念 移动通讯自20世纪80年代诞生以来 xff0c 经过了三十多年的爆发式增长 xff0c 已经成为连接人类社会的基础信息网络 随着4G进入规模商用阶段 xff0c 面向2020年及未来的第五代移动通讯 xff0c 已成为全球研发
  • Linux系统安装详解

    前言 xff1a 随着开源软件在世界范围内影响力日益增强 xff0c Linux服务操作系统在整个服务器操作系统市场格局中占据很大的市场份额 xff0c 已经形成大规模市场应用局面 xff0c 尤其在政府 金融 农业 交通 电信等国家关键领
  • Tomcat 服务器的部署

    前言 目录 前言 一 Tomcat介绍 二 Tomcat组件 三 Tomcat部署步骤 Tomcat各目录 四 Tomcat 优化 Tomcat服务器是一个免费的开放源代码的Web应用服务器 xff0c 属于轻量级应用服务器 xff0c 在
  • mysql数据库管理

    目录 一 数据库结构 二 常用的数据类型 三 查看数据库结构 1 查看当前服务器中的数据库 2 查看数据库中包含的表 3 查看表的结构 xff08 字段 xff09 四 SQL语句 xff08 一 xff09 DDL xff08 数据定义语
  • redis实战主从复制和搭建哨兵

    目录 前言 1 搭建主从复制 1 主msater配置 2 从slave配置 3 验证结果 二 搭建哨兵 1 在所有节点修改配置文件 2 启动哨兵 3 模拟故障 三 总结 前言 接着上回这次带来的实战主从复制和搭建哨兵 1 搭建主从复制 环境
  • ELK日志分析系统

    目录 一 ELK日志分析系统简介 1 日志服务器的优缺点 2 ELK是什么 xff1f 2 1 Logstash管理包含四种工具 2 2 日志处理步骤 二 Elasticsearch的基础核心概念 三 Logstash介绍 四 Kibana
  • Docker网络和数据卷

    目录 一 Docker 网络模式 1 docker容器的虚拟网关 2 Docker的网络模式 3 Docker自定义网络 二 Docker数据卷 1 数据卷 2 数据卷容器 3 容器互联 使用centos镜像 一 Docker 网络模式 1
  • C++ string的格式化

    lt sstream gt 库定义了三种类 xff1a istringstream ostringstream和stringstream xff0c 分别用来进行流的输入 输出和输入输出操作 可以利用它实现输入输出的格式化 xff0c 下面
  • nginx日志格式分析

    先随便截取一个nginx标准日志 xff1a 62 173 145 171 12 Jan 2020 17 23 54 43 0800 34 GET vvx 000000000000 cfg HTTP 1 1 34 404 169 34 34
  • Mybatis如何实现分页

    Mybatis如何实现分页 关键字limit实现分页 Interceptor Plugin实现分页 首先定一个拦截器 拦截器会拦截所有以ByPage结尾的方法 xff0c 然后拼接sql 语句的limit关键字实现分页 span class
  • 万用表蜂鸣档使用

    学习笔记 电路调试 万用表的使用 今天焊接 调试学校的51开发学习板 xff0c 真是个血汗的泪程 xff0c 不过知道一些东西 xff0c 现在分享出来 蜂鸣档 大宝贝 此位 xff0c 表示此时红黑表笔所接电路断路 xff08 个人理解
  • AD导出的Pdf原理图显示不全

    打开设置 按如图 操作 若打印出的 PDF字显示不全 按如下操作 61 61 双击TXT文档进入设置 xff0c 将字体改成宋体 xff0c 如下图所示
  • Proteus 网络名的添加

    1 首先先连接出一条线出来 2 接下来单机左边边框的键 xff1a 3 鼠标放入绿色直线上 xff0c 并单击它 xff08 注意 xff01 xff09 不要单击绿点 xff0c 否则线只会身长 然后在string下输入你的网络名即可
  • AD使用笔记1 原理图与PCB布局同步实现

    这里以AD20为例子 xff0c 单击AD上方的设置标件 选择出Sysetm下的Navigation 单击交互选择 xff0c 即可实现AD原理图与PCB同步布局实现
  • 按键消抖程序

    同步时钟域的应用 按键消抖程序 机械按键的抖动示意图 采用20ms按键消抖 FPGA 的晶振时钟一般为 50Mhz xff0c 也就是 每个时钟周期为 20ns xff08 1 50Mhz 61 20ns xff09 xff0c 那么计数值
  • FPGA &&双按键控制&&LED呼吸灯实现

    FPGA amp amp 双按键控制 amp amp LED呼吸灯实现 文章目录 FPGA amp amp 双按键控制 amp amp LED呼吸灯实现1 按键脉冲设计1 1按键脉冲信号代码1 2 按键脉冲Testbench代码1 3 仿真
  • 5.Flink对接Kafka入门

    Flink Connector Kafka 1 Kafka1 1 Kafka官网 http kafka apache org 1 2 Kafka 简述1 3 Kafka特性1 4 kafka的应用场景1 5 kafka manager的部署
  • 利用 Selenium WebDriver + Grid2 实现并行的浏览器端性能测试

    在 Web 2 0 应用中 xff0c 页面装载时间和浏览器渲染时间将成为决定性能的关键因素 我们在测试过程中不仅需要手动触发性能测试工具 xff0c 而且需要模仿不同的用户行为 xff0c 包括不同的浏览器 不同的网络条件和不同的使用习惯
  • 【北斗导航】多参考一致性监测算法(MRCC)(附伪码)—— B值计算

    目录 多参考一致性监测算法 MRCC 附伪码 B值计算 多参考一致性监测算法 MRCC 附伪码 B值计算 多参考一致性监测算法 MRCC 是气象学中用于检测数据中的不一致和错误的一种方法 其中 B值计算是该算法中的