前言
- jmeter4.0以上,如现在最新的5.2.1版本是有集成插件的
- 只需要在官网下载 plugins-manager.jar 包,放在jmeter安装路径的lib/ext目录下即可使用:Install :: JMeter-Plugins.org
- 但并不能满足所有需求,仍然需要安装其他插件
- Usage Statistics :: JMeter-Plugins.org:可以查看目前最流行的插件
Jmeter plugin的分类
- Standard Set组件:对线程组进行了扩展,扩充了许多丰富图表的监听器,可以用Jmeter来监控服务器
- Extras Set组件:支持远程监控,图表展示更加丰富
- Extras with Libs Set组件:提供对JSON的支持,新增了JMS取样器
- WebDriver Set组件:与WebDriver进行了集成,进行自动化测试
- Hadoop Set组件:提供Hadoop测试组件
安装plugins-manager后
注意:要保持在网络通畅的情况下才点击哦,不然下载东西会很慢然后就一直卡着...很难受
下图,Installed Plugins是我已安装的插件,基本涵盖后面会用到的,也是主流的插件;Available Plugins可以找到未安装的插件进行安装
Stepping Thread Group【负载梯加压线程组】
前言
- Stepping Thread Group是第一个自定义线程组
- 但,随着版本的迭代,已经有更好的线程组代替Stepping Thread Group了【Concurrency Thread Group】,所以说Stepping Thread Group已经是过去式了
- 但,咱们还是要介绍下的滴
Stepping Thread Group的特性
- 有预览图显示估计的负载
- 可延迟启动线程组
- 可持续增加线程负载
- 可设置最大负载的持续运行时间
Stepping Thread Group的作用
- 减少服务器的瞬时压力,做性能测试应该逐步增加压力,而不是瞬时加压
- 逐步增压越平缓越好,更容易从结果看到多少压力值下,有性能瓶颈
Stepping Thread Group参数详解
- this group will start: 表示总共要启动的线程数;
- 若设置为 100,表示总共会加载到 100 个线程
- first,wait for: 从运行之后多长时间开始启动线程;
- 若设置为 0 秒,表示运行之后立即启动线程
- then start: 初次启动多少个线程;
- 若设置为 0 个,表示初次不启动线程
- next add: 之后每次启动多少个线程;
- 若设置为 10个,表示每个梯次启动 10 个线程
- threads every: 当前运行多长时间后再次启动线程,即每一次线程启动完成之后的持续时间;
- 若设置为 30 秒,每梯次启动完线程之后再运行 30 秒
- using ramp-up: 启动线程的时间;
- 若设置为 5 秒,表示每次启动线程都持续 5 秒(和基础线程组的ramp-up一样意思)
- then hold load for: 线程全部启动完之后持续运行多长时间,
- 如图:设置为 60 秒,表示 100 个线程全部启动完之后再持续运行 60 秒
- finally,stop/threads every: 多长时间释放多少个线程;
- 若设置为 5 个和 1 秒,表示持续负载结束之后每 1 秒钟释放 5 个线程
从负载预览图,读懂所有参数
- 从第0秒开始启动线程,每 5 秒内启动10个线程并且运行30秒,以此循环,直到一共启动了 100 个线程
- 当已启动 100 个线程后,持续负载运行60秒
- 持续负载运行60秒后,每 1 秒释放五个线程,直到全部线程被释放【注意:线程释放过程中,线程依然在运行】
Active Threads Over Time【梯度报告】
- 运行Stepping Thread Group需要和Active Threads Over Time结合起来使用,这样能看到动态的阶梯加压效果
- 可以看到和Stepping Thread Group负载预览图基本一致,证明加压效果是正常的
Concurrency Thread Group【并发线程组】
Concurrency Thread Group的介绍
- Concurrency Thread Group提供了用于配置多个线程计划的简化方法
- 该线程组目的是为了保持并发水平,意味着如果并发线程不够,则在运行线程中启动额外的线程
- 和Standard Thread Group不同,它不会预先创建所有线程,因此不会使用额外的内存
- 对于上面的讲到的Stepping Thread Group来说,Concurrency Thread Group是个更好的选择,因为它允许线程优雅地完成其工作
- Concurrency Thread Group提供了更好的用户行为模拟,因为它使您可以更轻松地控制测试的时间,并创建替换线程以防线程在过程中完成
参数讲解
- Target Concurrency: 目标并发(线程数)
- Ramp Up Time: 启动时间;
- 若设置 1 min,则目标线程在1 min内全部启动
- Ramp-Up Steps Count: 阶梯次数;
- 若设置 6 ,则目标线程在 1min 内分六次阶梯加压(启动线程);
- 每次启动的线程数 = 目标线程数 / 阶梯次数 = 60 / 6 = 10
- Hold Target Rate Time: 持续负载运行时间;
- 若设置 2 ,则启动完所有线程后,持续负载运行 2 min,然后再结束
- Time Unit: 时间单位(分钟或者秒)
- Thread Iterations Limit: 线程迭代次数限制(循环次数);
- 默认为空,理解成永远,如果运行时间到达 Ramp Up Time + Hold Target Rate Time,则停止运行线程【不建议设置该值】
- Log Threads Status into File:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件);
特别注意点
- Target Concurrency 只是个期望值,实际不一定可以达到这个并发数,得看上面的配置【电脑性能、网络、内存、CPU等因素都会影响最终并发线程数】
- Jmeter会根据Target Concurrency的值 和 当前处于活动状态的线程数来判断当前并发线程数是否达到了Target Concurrency;
- 若没有,则会不断启动线程,尽力让并发线程数达到Target Concurrency的值
Concurrency Thread Group 和 Stepping Thread Group的区别
官方说法
- Stepping Thread Group不提供设置启动延迟时间,阶梯增压过渡时间,阶梯释放过渡时间,但Concurrency Thread Group提供
- Stepping Thread Group可以阶梯释放线程,
- Concurrency Thread Group是瞬时释放(具体看下面介绍)
- Stepping Thread Group设置了需要启动多少个线程就会严格执行,Concurrency Thread Group会尽力启动线程达到 Target Concurrency值
通俗点理解
- Stepping Thread Group 是手动场景:测试过程,按照设定好的步骤执行
- Concurrency Thread Group 是目标场景:达到某个目标运行场景,测试过程不可控,动态变化
类比 LR
- Stepping Thread Group :设置并发用户数,持续时间等,每隔多少时间自动增加多少个用户
- Concurrency Thread Group:预设一个目标并发数,每隔一段时间增加一部分并发数,直到 TPS 达到目标并发数,然后持续运行一段时间
Concurrency Thread Group + Active Threads Over Time
第一个关注点:阶梯增压过程
看Concurrency Thread Group负载预览图每次阶梯增压都是瞬时增压的,
实际测试结果可以看到它也是有一个过渡期,并不是瞬时增压
第二个关注点:持续负载运行结束后,所有线程瞬时释放
- 从图最后可以看到,所有线程都是瞬时释放的
- 普通的线程组有三种状态:启动、运行、释放;
- 而Concurrency Thread Group的线程可以理解成只有两种状态:启动、运行;因为线程都在极短的时间内就结束了
Concurrency Thread Group特殊情况
大致原因
受环境稳定性影响,如电脑网络、内存、CPU;活跃线程数会有波动
如何解决
遇到这种情况可以多调试几次,看看情况如何
结论
(后续实际用到的时候再补充吧)
- 其实有波动是正常的,我们没必要纠结
- 我们要重点注意的是TPS
- 线程组的负载只是压力值,我们要测的是服务端的性能,需要关注的是服务端的TPS
-
Concurrency Thread Group的扩展
- 当Concurrency Thread Group与Throughput Shaping Timer(吞吐量计时器)一起使用时,可以用tstFeedback 函数的调用来动态维护实现目标RPS所需的线程数
- 使用此方法时, 需要将Ramp Up Time 和 Ramp-Up Steps Count 置空
- 但要确保 Hold Target Rate Time ≥ Throughput Shaping Timer 时间表中指定的总持续时间值(Duration)