详解Jmeter线程组的设置方法
作者:久曲健 发布时间:2021-11-14 10:10:56
一、事件背景
个人感觉自己做性能测试,可以说是轻车熟路了,而且工作多年一直都是这一套测试思路及体系,从未质疑过自己,也许是狮子座的迷之自信吧!
也就在上周让我对自己的测试方法及体系产生了质疑!
为什么?在性能测试的时候,压测500并发通过,人家40并发都过不去。
通俗点说,就是你测试没问题,在人家那测试出问题了,忽略脚本问题,显而易见因为测试方法差异导致测试结果的不同。
1、关于执行方法的差异
同事的做法是直接跑10分钟的稳定性测试,然后上并发数;
我的做法一个用户循环访问一次,然后上并发数;
2、关于执行结果的差异
同事这种方式比我的方式,对目标服务器的压力更大;
体现在哪,如果循环次数选择了一旦选择了永远,即请求次数会比我的方式多,所以自然压力也大;
3、真的是我测试方法错了吗
我和同事分别测试两个系统,具体还是有些区别的:
同事这边业务场景有40个接口,执行一次最多1分钟,要不就是20秒,具体没记清楚;
我这边的业务场景有76个接口,执行一次大约50分钟,如果我直接上负载测试10分钟,根本跑不完一组业务场景;
我去请教大周老师,老师说正常先要让跑一定的时间,可以查看是否稳定运行及测试结果是否一致准确,性能测试本就是多次测试的结果。
4、结论
我是在最后跑的稳定性测试,是8小时起步,从时间上看覆盖到了他的十分钟,而且压力更大。
但是,有些同学会问他测试的对吗,他的思路是对的,因为他执行一次业务场景,小于10分钟,在小批量并发测试师没问题的。
当然,如果并发量上来后,还是设置十分钟的话,会出现我那种情况 业务场景接口没执行完的情况,此处,大家自行尝试见分晓。
二、关于线程组的相关设置
我又去查了大量资料,终于找到了一篇我觉得比较在理的文章,并举例给大家演示,我觉得这个同学的理论好像是对的,因为我也测试了下,发现也吻合我的测试结果(算求生存吗?)!
下面我将举例说明,该方法。
1、执行第一次数据采样,得到吞吐率和平均响应时间
由图可知:
吞吐率=2.6≈3,平均响应时间:t=0.386秒;
2、计算ramp-up period
假设线程N=10,估计的吞吐率=3, 那么估计的理想ramp-up period (T)(可以理解为线程启动的准备时间)= 10/3 = 3 秒。
3、循环次数计算
现在计算循环次数A。由于我们要考虑在第一个线程结束的时候,确保最后一个线程能启动,那么至少要大于一个值,这个值定位S=T-T/N=3-3/10=2.7。
当时间到 S=(T-T/N)时,最后一个线程启动,若要使所有线程同时运作,则需要在最后一个线程启动的时候第一个线程仍未关闭,为达到这个要求,需满足A > S/t
A>2.7/0.386=6.994≈7次 A>(T-T/N)/t
4、得出的测试方案
那么我们的测试方案如下:
5、关于公式
来源:https://www.cnblogs.com/longronglang/p/15616104.html


猜你喜欢
- 本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下1、ini文件是什么?见百度百科2、C#语言实现ini
- MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
- 疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务
- 线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程
- 一、this可以代表引用类的当前实例,包括继承而来的方法,通常可以省略。public class Person{ &n
- 在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程。为了实现泛型,Java编译器应用类型擦除实现: &
- 前言:仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置一:先看效果图字母索引搜索匹配二:功能分析1:汉字转拼音通讯
- 由于for循环可以通过控制循环变量的初始值和循环结束条件来改变遍历的区间,所以在排序或者遍历的时候,利用for循环就比较简单,以下是本人学习
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- package test001;import java.awt.event.ActionEvent;import java.awt.even
- Collections工具类Java里关于聚合的工具类,包含有各种有关集合操作的静态多态方法,不能实例化(把构造函数私有化)public c
- 目录1、Java Application 源程序的主类是指包含有( )方法的类。2、如果定义一种表达式结构:(+ 6 3)的值为9,(- 6
- 一、 ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制
- 不过在实际的工作中,很少会直接用到它。通常都是用的spring-quartz组件,直接通过配置,让spring框架来自动装配如下就是spri
- 本文实例讲述了Android开发使用自定义View将圆角矩形绘制在Canvas上的方法。分享给大家供大家参考,具体如下:前几天,公司一个项目
- 一款书籍阅读器,需要以下功能才能说的上比较完整:文字页面展示,即书页;页面之间的跳转动画,即翻页动作;能够在每一页上记录阅读进度,即书签;能
- 我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnIte
- JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展
- 最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView。特点:
- 本文实例为大家分享了OpenGL实现多段Bezier曲线拼接的具体代码,供大家参考,具体内容如下运行程序的交互方式有点类似corelDraw