1.宝路说

宝路最近一直在自我思考:性能基准DevOps工作已经开展一段时间了,目前我们确实已经取得了一些成果,显然这还远远不够。趁闲暇之余跟组员进行了简单的头脑风暴!于是这就有了今天的主题,当然这仅是主题之一,后面会继续分享其他主题。

2.背景说明

随着测试环境DevOps工作的不断开展,业务场景覆盖率不断扩增,涉及的接口数量也是成倍的增长,据统计目前接口数量已近两百。

在实施过程中,我们愈发明显的发现,执行一次全场景耗时明显增长,脚本执行时间越长出现不稳定因素的几率就越大,严重可能导致邮件报告可信度降低,如何提升脚本执行效率成了目前需要重点解决的问题。

3.现状分析

在组员电脑上用JMeter的GUI模式打开脚本一看,吓一跳,只见N多个事务控制,密密麻麻的!都用上鼠标滚轮了。。。

脚本结构如图:

后面还有N多个场景未列出来,从图明显可以看出,随着业务场景的增加,脚本肯定执行时间越长。

如置之不理,久而久之,情况只会越来越糟糕。

4.头脑风暴

就如何提升脚本执行效率,我们也是自由发言的讨论,讨论可行方案如下:

方案一:将目前脚本进行拆解,形成多个压测脚本

该方案确实可行,但无疑付出的时间成本太高,就简单的拆解脚本来说工作量确实不大。拆解成多脚本(多测试计划)运行,也就意味着会产出多个测试报告。目前平台还不具备多报告合并功能,还要重新开发。

不合并多个报告,那么无疑在邮件通知报告中要增加多个动态报告链接 方便收件人查看更详细的报告数据(聚合数据、吞吐量曲线)等,三四个连接我还能忍受。。。一下放那么多报告链接,谁还有心情去点呢。。。

有的同学可能会想想到,放几个重点报告链接不就行了么。此方式确实可行,但还不能满足我们目前的要求,重点业务场景也很多,我们最终还是想让相关人员全方位的看到接口实时性能情况。

显然此方案不是最优解。

方案二:将目前脚本进行“拆解”,多线程组模式

此方案是在方案一的基础上进行在调整,将原始的单一线程组改成多线程组模式。这样扔保持一个测试计划,也就是说最终扔是一个报告。

脚本结构如图:

我们目前在做基准测试场景,是单线程组单线线程执行。脚本按多线程组改造后将成倍缩短场景执行时间。

举个简单的例子:起初一个包工头指派一个工人去完成某个项目工程,但是这种工作模式显然效率不高,于是又指派好几个工人同时加入到项目工程中同时还依照工人技能不同对工作进行了分工。

那么问题来了,线程组该怎么进行分工呢?我们目前的解决方案:业务场景+测试数据 组合分工模式。按业务场景来分,这个大家都还可以理解,怎么还来个按测试数据分,这是?

归根结底还是业务场景的“锅”,有些场景那就是需要特殊用户数据才能正常执行。进而我们决定采用业务场景+测试数据 组合分工模式。

5.其他建议

关于压测脚本,还是再多啰嗦几句:

  • 脚本结构不要搞的太复杂。
  • 要求高性能的话,尽量少用前置、后置处理器,如果必须要用的话里面的代码不搞的很复杂。
  • 请求报文涉及到加解密,最优解还是定制开发Sampler采样器,这样测试人员不用花更多的时间去关注加解密代码及相关流程,测试人员编写脚本仅需填写服务器地址相关信息、请求明文,这样编写脚本效率也会质的提升。

性能基准DevOps之如何提升脚本执行效率的更多相关文章

  1. 使用并发 ssh 连接来提升捞日志脚本执行效率

    问题背景 公司有个简单粗暴的日志服务,它部署在多台机器实例上,收集的日志记录在每台机器本地硬盘,写一个小时自动切换日志文件,硬盘空间写满了自动回卷,大约可以保存两三天的历史数据.为什么说它粗暴呢?原来 ...

  2. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  3. PHP性能调优,PHP慢日志---PHP脚本执行效率性能检测之WebGrind的使用

    如何一睹webgrind这个神奇的php性能检测工具神奇呢? 废话不多说首先webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文 ...

  4. PHP脚本执行效率性能检测之WebGrind的使用

    webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文件进行编译分析的 那么这就需要们配置好xdebug,这个一般的php 版本都 ...

  5. [Android 性能优化系列]内存之提升篇--应用应该怎样管理内存

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...

  6. 提升jmeter脚本编写效率的方法:Fiddler导出jmx文件

    有效提升编写JMeter脚本效率的方法 jmeter的脚本来源有以下几种:badboy录制.jmeter自带的录制功能.手动编写脚本(使用fiddler/wireshark来抓包,然后构造协议写脚本) ...

  7. mysql临时表产生的执行效率问题改进(转)

    问题: 近日,线上MySQL查出一个慢sql,每次都要查询1000ms以上,严重影响用户体验 今得空去诊断一番,记录如下: sql原句: SELECT r.object_id AS cardId, c ...

  8. Snapman系统中TCC执行效率和C#执行效率对比

    Snapman集合了TCC编译器可以直接编译执行C语言脚本,其脚本执行效率和C#编译程序进行效率对比,包括下面4方面: 1.函数执行效率 2.数字转换成字符串 3.字符串的叠加 4.MD5算法 这是C ...

  9. 使用EventBus + Redis发布订阅模式提升业务执行性能

    前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...

随机推荐

  1. unity texture 占用内存大小对比

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...

  2. java并发编程工具类JUC第二篇:ArrayBlockingQueue

    类ArrayBlockingQueue是BlockingQueue接口的实现类,它是有界的阻塞队列,内部使用数组存储队列元素.这里的"有界"是指存储容量存在上限,不能无限存储元素. ...

  3. Django优雅集成MongoDB

    Django优雅集成MongoDB   将Django与MongoDB集成 在不更改Django ORM的情况下,将MongoDB用作Django项目的后端数据库.使用Django Admin在Mon ...

  4. js获取cookie数据并发送给服务端

    js获取cookie数据并发送给服务端 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  5. Step By Step(Lua-C API简介)

    Step By Step(Lua-C API简介) Lua是一种嵌入式脚本语言,即Lua不是可以单独运行的程序,在实际应用中,主要存在两种应用形式.第一种形式是,C/C++作为主程序,调用Lua代码, ...

  6. 回文词——线性dp

    #include<iostream> #include<cstdio> using namespace std; int n,f[5002][5002]; char str1[ ...

  7. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

  8. 点云配准的端到端深度神经网络:ICCV2019论文解读

    点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...

  9. H5根据浏览器内核判断并区分微信、QQ和QQ浏览器

    项目中碰到这样一个需求点,在h5页面区分当前所处客户端环境是QQ客户端.微信客户端还是QQ浏览器客户端,并做不同的逻辑处理 首先可以通过 window.navigator.userAgent 获取到当 ...

  10. linux环境下jmeter安装和运行

    linux环境部署: 在Linux服务器先安装jdk:2.以jdk-8u172-linux-x64.tar.gz为例:下载地址:http://www.oracle.com/technetwork/ja ...