当前位置: 首页 > news >正文

性能基准自动化测试

性能基准测试是一项系统性能测量工作,根据目前的项目实际,在这里做了一些新的定义。基准测试在项目中与一般性能测试工作的主要区别在于其更短的回归周期与直观的趋势分析,并同时为混合业务性能场景的脚本线程配比计算提供依据。一般的性能测试往往只在版本计划中或遭遇系统性能问题时进行,而基准测试在日常中进行,特别是在发生重大变更事件(例如:系统配置、环境发生变更)之前与之后的测试,让测试结果数据与一般的性能测试结果数据更有实质上的参考意义。因为,当为系统创建性能基准后,基准数据作为性能指标的参照物,可用于判断任意一项变更为系统带来的具体影响。例如:某项配置优化后能够为系统带来的性能提升是多少、系统某项操作历史数据的增长与性能响应的关系、系统环境的变更对系统性能产生的影响。而且实施该项工作并不复杂。

基准测试数据的实际用途

1)         了解系统性能基准作为参照物(性能问题发生后的测试很难了解系统性能基准)

2)         识别系统或环境的配置变更对性能响应带来的影响

3)         为系统优化前后的性能提升/下降提供参考指标

4)         观察系统的整体性能趋势与拐点发生,及早识别系统性能风险

性能基准自动化测试与一般性能测试的主要区别

1)         测试周期:基准测试每天定时自动化执行,性能测试需要事件驱动执行。

2)         测试脚本:基准测试的性能测试脚本仅仅包含所关注业务的必须的HTTP请求,不进行用户行为模拟;性能测试的测试脚本包含关键业务的所有上下文请求,并进行用户行为的模拟。

3)         测试策略:基准测试策略固定,几乎不允许修改(否则将与过去所有历史数据发生断层);性能测试需要根据不断变化的性能需求进行修改。

4)         脚本维护:基准测试的测试脚本仅在访问链接发生变更时维护,或者POST请求参数发生变更时维护,GET请求几乎不需要维护;性能测试脚本在每轮测试中一般都需要重新开发。

5)         结果用途:基准测试结果数据仅用于作为系统性能下降/提升的衡量指标,性能测试结果脚本可用于预测用户性能体验、系统性能风险。

性能基准测试自动化测试的实施

1)         性能基准数据的获取

利用Apache的开源项目Jmeter测试工具,使用Jmeter针对关注的系统性能点进行脚本开发,如下图,线程在事务控制器“用户登录”内进行系统登录,循环控制器内装载了各个性能关注点的HTTP请求:

在测试计划中维护性能基准测试环境信息与测试策略,包括:主机、端口、线程数、加载速度、迭代次数等。并采用50线程执行性能测试脚本,每条线程执行10次迭代,每个性能关注点取得500个响应样本,从而性能响应数据,包括:平均值、标准差、事务通过情况、错误内容。

2)         计划任务的定时执行

利用Apache开源项目Ant每日中午定时执行基准测试,自动保存性能测试结果,生成当日的性能基准测试结果数据,每日基准测试报告如下图:

假定性能关注点为5个,采用以上测试策略,在系统性能响应理想的情况下,整个测试过程时间可在3分钟内完成,最后生成一定数量的结果文件,最好有30天以上

3)         数据的整合与趋势分析

当取得足够量的基准测试结果以后(例如:30天、60天、90天),即可对第二节中所提到的每天的测试结果数据进行整合,生成报表的形式,直观的了解过去时间内,系统的性能拐点发生日期,对拐点发生当日的变更事件进行跟踪。报表所体现的内容在使用summary中的平均响应时间、事务通过率作为系统整体性能响应考量指标。不把每个事务都展现到报表中,除非:

  a)       系统整体事务通过率无法达到95%;

  b)       系统整体响应时间平均值大于2秒,最高值大于10秒;

下面是用perl写了个程序对html文件进行分析的输出,每个基准测试时间后对应了系统整体性能状况(事务的通过率,以及响应时间的平均、最快、最大值),最后根据预定义的阈值给出结果,为了更好的说明问题,这里把“平均响应时间大于5秒”判断为性能下降,最后一列的“↘”表示了3月31日出现了性能拐点。










本文转自 小强测试帮 51CTO博客,原文链接:http://blog.51cto.com/xqtesting/2068578,如需转载请自行联系原作者

相关文章:

  • 个人站长充电需靠“网游神三剑客”
  • ;号自动换行
  • 第三次作业 统计分析报告
  • 关于大数据项目创建时所需setting.xml(博主推荐)
  • python脚本
  • 7.Emmet----HTML以及CSS的缩写请查看
  • 教学思路SQL之入门习题《学生成绩》 四、多表连接关系查询
  • WebAPi返回类型到底应该是什么才合适,这是个问题?
  • 用枚举实现工厂方法模式更简洁
  • 关于android.view.WindowLeaked异常的解决方案
  • 十六进制转化为ASCII码引起的的进制的故事
  • 1、虚拟机安装
  • apache虚拟主机用户验证
  • 013——数组(十三) array_push array_rand array_reverse
  • WPF/Silverlight Layout 系统概述——Measure
  • “大数据应用场景”之隔壁老王(连载四)
  • Android 架构优化~MVP 架构改造
  • JavaScript-Array类型
  • mockjs让前端开发独立于后端
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 大快搜索数据爬虫技术实例安装教学篇
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单数学运算程序(不定期更新)
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我从编程教室毕业
  • 小试R空间处理新库sf
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 再次简单明了总结flex布局,一看就懂...
  • 06-01 点餐小程序前台界面搭建
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​queue --- 一个同步的队列类​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • (差分)胡桃爱原石
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.01.19
  • **CI中自动类加载的用法总结
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net refrector
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net快速开发框架源码分享
  • @ComponentScan比较
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] Spring Interceptor 拦截器详解
  • [COI2007] Sabor