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. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  2. java后端知识点梳理——Spring

    开篇:感谢我是祖国的花朵,java3y,三太子敖丙等优秀博主!他们的文章为我学习java提供了莫大的帮助,膜拜大神! Spring的优点有哪些呢? Spring的依赖注入将对象之间的依赖关系交给了框架 ...

  3. SSM和SpringBoot常用注解

    SpringBoot的重要注解 @SpringBootApplication 创建 SpringBoot 项目之后会默认在主类加上 我们可以把 @SpringBootApplication看作是 @C ...

  4. Javaweb:Servlet

    servlet简介 Servlet(Server Applet)是 Java Servlet 的简称,是使用 Java 语言编写的运行在服务器端的程序.具有独立于平台和协议的特性,主要功能在于交互式地 ...

  5. pytest命令行参数

    1.-v:可以输出用例更加详细的执行信息,如下图 C:\Users\cale\checkapi\test_cc>pytest test_m1.py -v ==================== ...

  6. LockSupport中的park()与unpark()

    类注释原文:Basic thread blocking primitives for creating locks and other synchronization classes.意思就是Lock ...

  7. csp-s模拟测试49(9.22)养花(分块/主席树)·折射(神仙DP)·画作

    最近有点头晕........... T1 养花 考场我没想到正解,后来打的主席树,对于每个摸数查找1-(k-1),k-(2k-1)...的最大值,事实上还是很容易被卡的但是没有数据好像还比较友善, 对 ...

  8. 【数论】8.30题解-prime素数密度 洛谷p1835

    prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...

  9. 如何开启O2优化

    O2环境会使你的程序跑的特别快,然而大多数正式考试都不能开O2 然而平时做有些题强制开O2,会出现在本机运行正确,但是交上去RE的情况,这时你就要开O2了. 例如在本机运行时会有下标为-但可以运行,而 ...

  10. c#根据名称反射对应的枚举类型

    今天遇到了要配置串口的停止位,这个时候直接反射枚举比较方便. 第一反射所有的枚举值 FieldInfo[] fieldInfoes= typeof(StopBits).GetFields(Bindin ...