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 压力大小进行限制。操作如下:

Constant Throughput Timer

注意事项

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

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

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

配置示例如下:

Constant Throughput Timer1

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