性能基准DevOps之如何提升脚本执行效率
1.宝路说
宝路最近一直在自我思考:性能基准DevOps工作已经开展一段时间了,目前我们确实已经取得了一些成果,显然这还远远不够。趁闲暇之余跟组员进行了简单的头脑风暴!于是这就有了今天的主题,当然这仅是主题之一,后面会继续分享其他主题。
2.背景说明
随着测试环境DevOps工作的不断开展,业务场景覆盖率不断扩增,涉及的接口数量也是成倍的增长,据统计目前接口数量已近两百。
在实施过程中,我们愈发明显的发现,执行一次全场景耗时明显增长,脚本执行时间越长出现不稳定因素的几率就越大,严重可能导致邮件报告可信度降低,如何提升脚本执行效率成了目前需要重点解决的问题。
3.现状分析
在组员电脑上用JMeter的GUI模式打开脚本一看,吓一跳,只见N多个事务控制,密密麻麻的!都用上鼠标滚轮了。。。
脚本结构如图:

后面还有N多个场景未列出来,从图明显可以看出,随着业务场景的增加,脚本肯定执行时间越长。
如置之不理,久而久之,情况只会越来越糟糕。
4.头脑风暴
就如何提升脚本执行效率,我们也是自由发言的讨论,讨论可行方案如下:
方案一:将目前脚本进行拆解,形成多个压测脚本
该方案确实可行,但无疑付出的时间成本太高,就简单的拆解脚本来说工作量确实不大。拆解成多脚本(多测试计划)运行,也就意味着会产出多个测试报告。目前平台还不具备多报告合并功能,还要重新开发。
不合并多个报告,那么无疑在邮件通知报告中要增加多个动态报告链接 方便收件人查看更详细的报告数据(聚合数据、吞吐量曲线)等,三四个连接我还能忍受。。。一下放那么多报告链接,谁还有心情去点呢。。。
有的同学可能会想想到,放几个重点报告链接不就行了么。此方式确实可行,但还不能满足我们目前的要求,重点业务场景也很多,我们最终还是想让相关人员全方位的看到接口实时性能情况。
显然此方案不是最优解。
方案二:将目前脚本进行“拆解”,多线程组模式
此方案是在方案一的基础上进行在调整,将原始的单一线程组改成多线程组模式。这样扔保持一个测试计划,也就是说最终扔是一个报告。
脚本结构如图:

我们目前在做基准测试场景,是单线程组单线线程执行。脚本按多线程组改造后将成倍缩短场景执行时间。
举个简单的例子:起初一个包工头指派一个工人去完成某个项目工程,但是这种工作模式显然效率不高,于是又指派好几个工人同时加入到项目工程中同时还依照工人技能不同对工作进行了分工。
那么问题来了,线程组该怎么进行分工呢?我们目前的解决方案:业务场景+测试数据 组合分工模式。按业务场景来分,这个大家都还可以理解,怎么还来个按测试数据分,这是?
归根结底还是业务场景的“锅”,有些场景那就是需要特殊用户数据才能正常执行。进而我们决定采用业务场景+测试数据 组合分工模式。
5.其他建议
关于压测脚本,还是再多啰嗦几句:
- 脚本结构不要搞的太复杂。
- 要求高性能的话,尽量少用前置、后置处理器,如果必须要用的话里面的代码不搞的很复杂。
- 请求报文涉及到加解密,最优解还是定制开发Sampler采样器,这样测试人员不用花更多的时间去关注加解密代码及相关流程,测试人员编写脚本仅需填写服务器地址相关信息、请求明文,这样编写脚本效率也会质的提升。
性能基准DevOps之如何提升脚本执行效率的更多相关文章
- 使用并发 ssh 连接来提升捞日志脚本执行效率
问题背景 公司有个简单粗暴的日志服务,它部署在多台机器实例上,收集的日志记录在每台机器本地硬盘,写一个小时自动切换日志文件,硬盘空间写满了自动回卷,大约可以保存两三天的历史数据.为什么说它粗暴呢?原来 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- PHP性能调优,PHP慢日志---PHP脚本执行效率性能检测之WebGrind的使用
如何一睹webgrind这个神奇的php性能检测工具神奇呢? 废话不多说首先webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文 ...
- PHP脚本执行效率性能检测之WebGrind的使用
webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文件进行编译分析的 那么这就需要们配置好xdebug,这个一般的php 版本都 ...
- [Android 性能优化系列]内存之提升篇--应用应该怎样管理内存
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- 提升jmeter脚本编写效率的方法:Fiddler导出jmx文件
有效提升编写JMeter脚本效率的方法 jmeter的脚本来源有以下几种:badboy录制.jmeter自带的录制功能.手动编写脚本(使用fiddler/wireshark来抓包,然后构造协议写脚本) ...
- mysql临时表产生的执行效率问题改进(转)
问题: 近日,线上MySQL查出一个慢sql,每次都要查询1000ms以上,严重影响用户体验 今得空去诊断一番,记录如下: sql原句: SELECT r.object_id AS cardId, c ...
- Snapman系统中TCC执行效率和C#执行效率对比
Snapman集合了TCC编译器可以直接编译执行C语言脚本,其脚本执行效率和C#编译程序进行效率对比,包括下面4方面: 1.函数执行效率 2.数字转换成字符串 3.字符串的叠加 4.MD5算法 这是C ...
- 使用EventBus + Redis发布订阅模式提升业务执行性能
前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...
随机推荐
- 如何正确地使用RecyclerView.ListAdapter
默认是在一个fragment中实现RecyclerView. private inner class CrimeAdapter() : ListAdapter<Crime, CrimeHolde ...
- GO学习-(22) Go语言之依赖管理
Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...
- Jmeter- 笔记12 - 性能测试分析 & 性能测试流程
性能测试分析 场景设计.监视图表: 设计场景:阶梯式.波浪式 监视器: 收集用于性能分析的数据:TPS图表.聚合报告\汇总报告.察看结果树.响应时间.吞吐量 服务器资源监控:cpu.内存.磁盘io 分 ...
- MegEngine计算图、MatMul优化解析
MegEngine计算图.MatMul优化解析 本文针对天元在推理优化过程中所涉及的计算图优化与 MatMul 优化进行深度解读,希望能够帮助广大开发者在利用天元 MegEngine「深度学习,简单开 ...
- 【NX二次开发】体素特征相关函数(块、柱、锥、球)
NX Open允许用户创建和查询所有基本体素特征,通过API函数建立基本体素特征返回的是相应的特征标识,如果需要可以通过函数UG_MODL_ask_feat_body()获得特征对应的实体对象标识.基 ...
- day20200911
UG12.0进入运动仿真模块 新建仿真 定义固定连杆 定义其他连杆 定义运动副 定义驱动 定义解算方案并求解 导出动画
- 29.qt quick-在QML中调用C++类
1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...
- 记一次项目中解决 -- 并发减库存超卖问题过程(Java)
起因:项目中要做预约功能,首先每天的余票都是有上限的,自然不能出现超卖的情况 基于我们项目是单体分布式的springcloud部署,我想了下 第一种方法,直接mysql加行锁,要update这条库存数 ...
- linux下的对拍程序
在比赛中我们通常会先打暴力 正解的正确与否,如果数据过大,我们就要用到对拍程序 1 #include<bits/stdc++.h> 2 using namespace std; 3 int ...
- Java知识复习(二)
如何格式化日期? SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date dat=new Da ...