Jmeter系列- jmeter插件入门篇、Stepping Thread Group【阶梯加压线程组】、Concurrency Thread Group【并发线程组】

前言

  • 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)

猜你喜欢

转载自blog.csdn.net/qq_41663420/article/details/129863574