JSR-233 计时器奇怪(?)行为

JSR-233 Timer strange(?) behavior

我正在使用 JSR-223 Timer (jMeter 5.4.1),使用 groovy 语言,并尝试将 delay\pauses 添加到我的线程。

我正在按照 BlazeMeter (How to Easily Implement Pacing) 的说明进行操作。

奇怪的(?)行为是实际延迟是所需的两倍。

脚本如下:

Long pacing = 5000 - prev.getTime();

Integer iPacing = pacing != null ? pacing.intValue() : null; 
log.info("Transaction Pacing: " +String.valueOf(iPacing));
vars.put("myDelay", String.valueOf(iPacing)); 

return iPacing;

我得到采样器动作的持续时间,然后计算 "myDelay" 与 5,000 毫秒的基本持续时间的差值。 myDelay 是我在流量控制采样器中使用的变量。

现在奇怪的结果是: 我实现的实际延迟是计算的两倍。在这个例子中,延迟是5K mSec,但实际延迟是10K mSec。

现在真正奇怪的问题来了: 如果我标记 return iPacing,则延迟为 5K 毫秒 根据需要 (日志文件中有一条警告消息)。

请参阅下面的输出。 为什么 Flow Control Sampler 添加 myDelayiPacing 值?

返回第一个块 - iPacing。整体暂停是myDelay + iPacing。 第二个块 - iPacing 被标记出来。延迟仅为 myDelay。

你的延迟是两倍,因为你设置了两次。

这条语句:

return iPacing;

将在每个 SAMPLER in the JSR223 Time SCOPE

之前创建一个延迟

因此无需使用 Flow Control Action 采样器,因为您已经在 J​​SR223 计时器中创建了延迟。

一般来说,JMETER 中没有实现 PACING,因为有一种更简单的方法可以根据每秒 X REQUESTS 来创建 LOAD:Constant THROUGHPUT timer 和朋友们。