如何 运行 JSR223 PreProcessor only once
How to run JSR223 PreProcessor only once
我在 jMeter 中有一个测试计划,需要在 运行测试之前计算一些参数。为了计算这些参数,我直接在测试计划下创建了一个 JSR223 预处理器,如下所示。
我的问题是 PreProcessor 似乎在每个请求之前 运行 这不是我想要的。我只需要计算一次这些参数并在测试中使用它们。
有没有办法只运行 JSR223 预处理器一次,还是我应该使用其他方法?
提前致谢。
编辑:
正如@ubik-load-pack 所建议的,我尝试 "setUp Thread Group" 如下,但在代码中创建的变量在 "Thread Group" 下不可用。它们既不存在于日志中(代码中使用日志记录)也不存在于查看结果树中(通过调试后处理器)
我也试了"Once Only Controller",还是不行,同上。
有关更多信息,请参阅我的 JSR223 预处理器的内容。 (不是全部代码,这里会有更多的变量,所以顺便说一句,使用日期函数对我来说不是一个解决方案。)
通过在任何采样器 运行s 之前设计预处理器 运行s。
因此,如果您只想 运行 每个用户一次,您可以执行以下操作:
- 使用 Once Only Controller 并将包含您的代码的 JSR223 采样器放入其中。
如果您希望对所有用户执行一次,请使用setupThreadGroup
它将包含您的 JSR223 采样器并使用 1 个线程配置它。它会在常规线程组启动前 运行 一次。
更新问题后进行编辑:
如我所写,如果您想在线程组中重用变量,则不能使用 setupThreadGroup 方法,因此请坚持使用 OnceOnlyController 方法处理您的请求
使用 Once Only Controller 它不起作用,因为您误读了我的回答,我建议使用 JSR223 Sampler 而不是 PreProcessor,因为预处理器将 运行 仅当存在 运行s.
的采样器时
如果您使用采样器,并且有多个线程组,那么您必须将该采样器复制到每个线程组中,因为您不能将采样器放在线程组之外。
您可以将 jsr223 预处理器用于:
if(vars.get("init")=="OK") return;
vars.put("init","OK")
//your code
我在预处理器的顶部做了一个稍微脏的解决方法:
log.info("in PreProcessor. Sampler name: " + sampler.getName())
if (sampler.getName() != "HTTP Request") {
log.info("not running again")
return
}
在我的例子中,我不能添加另一个采样器,因为它会打乱我的计时器计算。
我在 jMeter 中有一个测试计划,需要在 运行测试之前计算一些参数。为了计算这些参数,我直接在测试计划下创建了一个 JSR223 预处理器,如下所示。
我的问题是 PreProcessor 似乎在每个请求之前 运行 这不是我想要的。我只需要计算一次这些参数并在测试中使用它们。
有没有办法只运行 JSR223 预处理器一次,还是我应该使用其他方法?
提前致谢。
编辑:
正如@ubik-load-pack 所建议的,我尝试 "setUp Thread Group" 如下,但在代码中创建的变量在 "Thread Group" 下不可用。它们既不存在于日志中(代码中使用日志记录)也不存在于查看结果树中(通过调试后处理器)
我也试了"Once Only Controller",还是不行,同上。
有关更多信息,请参阅我的 JSR223 预处理器的内容。 (不是全部代码,这里会有更多的变量,所以顺便说一句,使用日期函数对我来说不是一个解决方案。)
通过在任何采样器 运行s 之前设计预处理器 运行s。
因此,如果您只想 运行 每个用户一次,您可以执行以下操作:
- 使用 Once Only Controller 并将包含您的代码的 JSR223 采样器放入其中。
如果您希望对所有用户执行一次,请使用setupThreadGroup 它将包含您的 JSR223 采样器并使用 1 个线程配置它。它会在常规线程组启动前 运行 一次。
更新问题后进行编辑:
如我所写,如果您想在线程组中重用变量,则不能使用 setupThreadGroup 方法,因此请坚持使用 OnceOnlyController 方法处理您的请求
使用 Once Only Controller 它不起作用,因为您误读了我的回答,我建议使用 JSR223 Sampler 而不是 PreProcessor,因为预处理器将 运行 仅当存在 运行s.
的采样器时
如果您使用采样器,并且有多个线程组,那么您必须将该采样器复制到每个线程组中,因为您不能将采样器放在线程组之外。
您可以将 jsr223 预处理器用于:
if(vars.get("init")=="OK") return;
vars.put("init","OK")
//your code
我在预处理器的顶部做了一个稍微脏的解决方法:
log.info("in PreProcessor. Sampler name: " + sampler.getName())
if (sampler.getName() != "HTTP Request") {
log.info("not running again")
return
}
在我的例子中,我不能添加另一个采样器,因为它会打乱我的计时器计算。