文章目录
-
-
- 1. 什么是阶梯式压测
- 2.为什么要进行阶梯式压测
- 3. JMeter阶梯式压测方法
-
- 3.1 安装插件
- 3.2 添加测试进程
- 4. 阶梯式压测与普通压测区别
-
本文转载自:https://www.cnblogs.com/xbxblog/p/9702652.html
1. 什么是阶梯式压测
阶梯式压测,就是对系统的压力呈现阶梯性增加的过程,每个阶段压力值都要增加一个数量值,最终达到一个预期值。然后保持该压力值,持续运行一段时间。实际上,阶梯式压测,是负载测试的一种通用方法。
2.为什么要进行阶梯式压测
原因与负载测试是相同的。其目标是测试在一定负载情况下的系统性能,测试系统的不同负载情况下的性能指标。这种方法可以帮助我们,在最初无法预知服务器性能的情况下,迅速的得到一个极限值。在执行中,如果某个阶梯时间内Error率突然增加,那么这个阶段就是服务器的某个极限值。这种方法,要比我们不断地循环“设定并发值->执行->查看结果->调整并发值”这样一个迭代过程要方便的多。
3. JMeter阶梯式压测方法
3.1 安装插件
我使用的是JMeter 3.3.0 版本,其中有Plugins Manager,然后在这个管理器中安装Concurrency Thread Groups插件。
3.2 添加测试进程
参数的含义:
Target Concurrency:目标并发数
Ramp Up Time:加速时间,即在多长时间里完成这个并发数
Ramp-Up Steps Count:加速次数,即分成几个阶段完成这个并发数
Hold Target Rate Time:保持目标速率时间,即达到并发数后保持运行的时间
Time Unit:时间单位,分还是秒
Thread Iterations Limit:线程迭代次数限制,即循环次数(空,即为一次)
Log Threads Status into File:将线程状态记录到文件中(保存日志文件)
以图中所示为例,首先Time Unit选择的是min(分),输入的数据为:
Target Concurrency: 1000
Ramp up Time(min): 1
Ramp-up Steps Count: 5
Hold Target Rate Time(min): 1
Thread Iterations Limit: (空)
此用例场景为 ,在“Ramp up Time(min): ”1分钟的时间内,一共产生目标线程“Target Concurrency: ”1000个;并且,分成“Ramp-up Steps Count: ”5个阶段来完成;在目标线程产生结束后,维持该线程生产速度“Hold Target Rate Time(min): ”1分钟;并且循环执行“Thread Iterations Limit: ”1次。over。
图中红色线条显示了单个循环内线程的产生概况,X轴为时间,共2min;Y轴为线程数,最高50条。5个阶梯显示出了线程的阶梯状分布。
现在对某个主页进行压测实验,并发参数就是上面输入的参数。
运行之后在Active Threads Over Time中查看:
4. 阶梯式压测与普通压测区别
- 普通的压测方式,并发的线程数是可预知的;而阶梯压测是未知的。
- ”Active Threads Over Time”是不一样的。普通压测,线程只定义了初始产生的时间(50/秒,循环30次),而没有定义后续线程。每个线程在完成了自己的生命周期后,就结束了。而阶梯压测,会保持活跃线程在一个数值上,后续线程会持续产生。因此,在图中会出现不同。
总的来说:
普通的压测方式,线程产生是固定的按照每秒X个线程的方式来产生,只在线程发出端做了限制。而阶梯压测的方式,是根据实际运行情况产生线程。一个线程,从请求发出,到服务器端处理,再到返回结果接收,才算完成一个完整的生命周期。阶梯压测方式,可以控制每个单位时间内的线程数。就像我们在Active Threads Over Time表格中看到的,在一段时间内,活跃的线程数量基本保持不变。可以这样想,当一个线程结束,总线程数-1,为保持活跃度,jmeter会立刻再产生一个线程上来维持数量,此时总线程数+1。
产生线程的间隔时间是根据压测中的实际运行状态来决定的。旧的线程结束的快,新的线程产生的就快。因此,每次阶梯压测的结果,总线程数都不一样,因为每次压测负载机和服务器机的状态都不一样。
其他JMeter的使用教程在我的另一篇博客中做了整合,传送门:
https://blog.csdn.net/qq_34659777/article/details/85765309