全部产品

JMeter 配置 RPS 限制

更新时间:2019-01-21 18:08:33

RPS 即每秒请求数(Request Per Second),通常用来描述施压引擎实际发出的压力大小。更适合API接口测试的场景。下面介绍一下基于JMeter实现RPS控制的方法。

添加 RPS 限制节点

为了复用已有的 JMeter 脚本,PTS 支持使用原生 JMeter 引擎进行压测。JMeter 引擎默认使用并发模式压测,施压 RPS 主要由并发数和服务器响应时间决定。并发数过低时可能达不到预期的 RPS,并发数过高时可能压力过大压垮服务器。为了避免 RPS 压力过大压垮服务器,JMeter 提供了 Constant Throughput Timer 组件,可限制最大施压 RPS 压力大小。

JMeter 脚本线程组下添加 “Constant Throughput Timer” 节点,即可对该线程组发出的 RPS 压力大小进行限制。操作如下:

add-timer

配置 RPS 限制

配置 “Constant Throughput Timer” 节点时有两点需要注意:

  1. “Calculate Throughtput based on” 必须设置为 “this thread only”,即按单个线程限制。PTS 自动根据场景并发数分配多个 JMeter 引擎, 其他选项只能对单个引擎进行限制,无法有效的进行全局 RPS 限制。所以可以通过设置单个线程的限制和并发数达到整体RPS限制的效果。

  2. “Constant Throughput Timer” 的 “Target throughput” 以分钟为单位配置,RPS 值换算成分钟时,需要乘以 60 (1分钟=60秒),可使用 __jexl3 进行计算。 如期望 单线程 RPS 为 0.5 ,则 “Target throughput” 可设置为 ${__jexl3(0.5 * 60)} 。如果要指定全局 RPS 限制,可用全局 RPS 限制除以并发数,得到单个线程的 RPS 限制。

配置示例如下:

jmeter-rps-config

综上,可以看出JMeter的RPS控制比较复杂,不但依赖于设置合理的并发,而且无法实时调整并发,RPS不一定能完全实现需要的效果。对于RPS的压测模式,建议直接使用PTS原生场景进行压测,支持直接的RPS设置和秒级调整,完全不用考虑并发的概念。