JSR-233 定时器奇怪(?)行为
Posted
技术标签:
【中文标题】JSR-233 定时器奇怪(?)行为【英文标题】:JSR-233 Timer strange(?) behavior 【发布时间】:2022-01-23 04:14:54 【问题描述】:我正在使用 JSR-223 Timer (jMeter 5.4.1),使用 groovy 语言,并尝试向我的线程添加延迟\暂停。
我正在遵循 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
是我在 Flow Control Sampler 中使用的变量。
现在奇怪的结果: 我实现的实际延迟是计算的两倍。在本例中,延迟为 5K mSec,但实际延迟为 10K mSec。
现在这是真正奇怪的问题:
如果我标记出return iPacing
,则延迟为 5K 毫秒根据需要(在日志文件中带有警告消息)。
请参阅下面的输出。
为什么流控制采样器会添加 myDelay
和 iPacing
值?
返回第一个块 - iPacing
。整体暂停是 myDelay + iPacing。
第二个块 - iPacing
被标记出来。延迟仅为 myDelay。
【问题讨论】:
【参考方案1】:您的延迟是 TWICE 只是因为您设置了 TWICE。
此声明:
return iPacing;
将在 JSR223 时间 SCOPE 中的每个 SAMPLER 之前创建一个延迟
因此无需使用Flow Control Action 采样器,因为您已经在 JSR223 计时器中创建了延迟。
一般来说,在 JMETER 中没有实现 PACING,因为有一种更简单的方法可以创建每秒 X 个请求的负载:Constant THROUGHPUT timer 和朋友。
【讨论】:
以上是关于JSR-233 定时器奇怪(?)行为的主要内容,如果未能解决你的问题,请参考以下文章