新人在用 jmeter 做压力测试的时候,会被一些性能术语搞懵,直接导致的后果就是对测试出来的结果数据根本不能理解,更谈不上分析。这篇文章着重给大家实例解释一下 jmeter 压力测试的一些专有名词
问到如何做压力测试,很多人可能只会回答:"加线程组,加并发,看结果"。那么什么是压力,压力从哪里体现?这些恐怕就不得而知了。。。
到底什么是压力呢?实际上我们在压力测试中用 RPS 来表示
RPS 就是每秒请求数(Request Per Second),它描述了施压引擎向服务器实际发出的压力大小。
从用户角度来说,rps 是每秒钟点击的次数
从客户端角度来说,rps 是每秒向服务端发出的请求数
使用工具的最终目的就是为了利用线程数和迭代次数模拟出和用户每秒点击相匹配的压力值,施压服务端,得到性能数据
Rps 由并发数,和服务器响应时间决定。并发数过低时可能达不到预期的 RPS,并发数过高时可能压力过大直接就压垮了服务器。
从前面的描述中我们知道压力就是每秒发出的请求数。现在再来理解一个 jmeter 的名词Ramp-up-period(in seconds)
jmeter 在线程组中有一个可调节的数值:Ramp-up-period,它表示启动所有线程需要的时间,单位是秒
图 1-1 设置了 100 个线程,迭代次数=1,Ramp-up-period=25,那么它表示我将在 25 秒内启动 100 个线程,也就是每秒钟启动 4 个线程。
每个线程启动之间的间隔时间是 25/100=0.25s,也就是 250ms。
换个理解方式,它表示了我们给服务器的压力在第一秒内是每秒钟 4 次请求。也就是说,RPS 在第一秒内是 4/s,后续 25s 内呈现递增的趋势。如下:
4/s
8/s
12/s
16/s
.......
1-1
图 1-2 设置了 100 个线程,迭代次数=10,Ramp-up-period=25,那么它表示我将在 25 秒内启动 100 个线程,每个线程迭代 10 次。也就是说,RPS 在第一秒内是 40/s,后续 25s 呈现递增趋势。如下:
40/s
80/s
120/s
.........
我们来思考一个问题:迭代设置了 10 次,真的每秒就能迭代 10 次吗?
这就涉及到一个很核心的知识点,我们设计的迭代次数其实是总迭代次数,为什么这么说呢?因为线程的迭代是顺序进行的,也就是说响应时间决定了每秒能迭代多少次。如果我们设计的迭代数超出了线程每秒最大迭代次数,那么一定是时间顺延。
由此可见,基础线程组中我们设置的 rps 仅仅是一个预期值!最终能达到多少 rps,由我们的线程数或者每秒迭代次数来决定。反过来说,为了达到预期的 rps 值,需要先设计并发数或者每秒迭代数。
1-2
Throughput Shaping Timer(rps 定时器)
现在我们再来看一下 Throughput Shaping Timer(rps 定时器)
这个定时器是在我们线程已经固定的基础上来逐渐增加每秒迭代次数的
start=1 end=200,持续时间是 60。表示我们需要在 60s 内将 RPS(每秒请求数)均匀的从 1 提升到 200
并发数 = 预期 RPS * 响应时间