JMeter配置RPS限制
RPS即每秒請(qǐng)求數(shù)(Request Per Second),通常用來描述施壓引擎實(shí)際發(fā)出的壓力大小。更適合API接口測(cè)試的場(chǎng)景。下面介紹一下基于JMeter實(shí)現(xiàn)RPS控制的方法。
配置RPS限制
為了復(fù)用已有的JMeter腳本,PTS支持使用原生JMeter引擎進(jìn)行壓測(cè)。JMeter引擎默認(rèn)使用并發(fā)模式壓測(cè),施壓RPS主要由并發(fā)數(shù)和服務(wù)器響應(yīng)時(shí)間決定。 并發(fā)數(shù)過低時(shí)可能達(dá)不到預(yù)期的RPS,并發(fā)數(shù)過高時(shí)可能壓力過大壓垮服務(wù)器。 為了避免RPS壓力過大壓垮服務(wù)器,JMeter提供了Constant Throughput Timer組件, 可限制最大施壓RPS壓力大小。
JMeter腳本線程組下添加Constant Throughput Timer節(jié)點(diǎn),即可對(duì)該線程組發(fā)出的RPS壓力大小進(jìn)行限制。操作如下:
注意事項(xiàng)
配置Constant Throughput Timer節(jié)點(diǎn)時(shí)有兩點(diǎn)需要注意:
Calculate Throughput based on必須設(shè)置為this thread only,即按單個(gè)線程限制。PTS自動(dòng)根據(jù)場(chǎng)景并發(fā)數(shù)分配多個(gè)JMeter引擎, 其他選項(xiàng)只能對(duì)單個(gè)引擎進(jìn)行限制,無法有效地進(jìn)行全局RPS限制。所以可以通過設(shè)置單個(gè)線程的限制和并發(fā)數(shù)達(dá)到整體RPS限制的效果。
Constant Throughput Timer的Target throughput以分鐘為單位配置,RPS值換算成分鐘時(shí),需要乘以60 (1分鐘=60秒),可使用__jexl3進(jìn)行計(jì)算。 如期望單線程RPS為
0.5
,則Target throughput可設(shè)置為${__jexl3(0.5 * 60)}
。如果要指定全局RPS限制,可用全局RPS限制除以并發(fā)數(shù),得到單個(gè)線程的RPS限制。
配置示例如下:
綜上,可以看出JMeter的RPS控制比較復(fù)雜,不但依賴于設(shè)置合理的并發(fā),而且無法實(shí)時(shí)調(diào)整并發(fā),RPS不一定能完全實(shí)現(xiàn)需要的效果。對(duì)于RPS的壓測(cè)模式,建議直接使用PTS原生場(chǎng)景進(jìn)行壓測(cè),支持直接的RPS設(shè)置和秒級(jí)調(diào)整,完全不用考慮并發(fā)的概念。請(qǐng)參見壓力模型。