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节点时有两点需要注意:
Calculate Throughput based on必须设置为this thread only,即按单个线程限制。PTS自动根据场景并发数分配多个JMeter引擎, 其他选项只能对单个引擎进行限制,无法有效地进行全局RPS限制。所以可以通过设置单个线程的限制和并发数达到整体RPS限制的效果。
Constant Throughput Timer的Target throughput以分钟为单位配置,RPS值换算成分钟时,需要乘以60 (1分钟=60秒),可使用__jexl3进行计算。 如期望单线程RPS为
0.5
,则Target throughput可设置为${__jexl3(0.5 * 60)}
。如果要指定全局RPS限制,可用全局RPS限制除以并发数,得到单个线程的RPS限制。
配置示例如下:
综上,可以看出JMeter的RPS控制比较复杂,不但依赖于设置合理的并发,而且无法实时调整并发,RPS不一定能完全实现需要的效果。对于RPS的压测模式,建议直接使用PTS原生场景进行压测,支持直接的RPS设置和秒级调整,完全不用考虑并发的概念。请参见压力模式与量级配置。