如何只运行一次JSR223 PreProcessor

时间:2015-07-08 06:50:23

标签: jmeter

我在jMeter中有一个测试计划,需要在运行测试之前需要计算一些参数。为了计算这些参数,我直接在测试计划下创建了一个JSR223预处理器,如下所示。

Test Plan

我的问题是PreProcessor似乎在每个请求之前运行,这不是我想要的。我只需要计算一次这些参数并在测试中使用它们。

有没有办法只运行一次JSR223 PreProcessor,还是应该使用其他方法?

提前致谢。

编辑:

正如@ ubik-load-pack建议的那样,我尝试了“setUp Thread Group”,但代码中创建的变量在“Thread Group”下不可用。它们既不存在于日志中(日志记录在代码中使用)也不存在于视图结果树中(通过Debug PostProcessor)

enter image description here

我也试过“Once Only Controller”,它也没有用,与上面相同。

enter image description here

有关更多信息,请参阅我的JSR223预处理器的内容。 (不是整个代码,这里会有更多变量,所以使用日期函数对我来说不是解决方案。)

enter image description here

3 个答案:

答案 0 :(得分:6)

按照设计,PreProcessor在任何Sampler运行之前运行。

因此,如果您希望每个用户只运行一次,您可以执行以下操作:

如果您希望为所有用户执行一次,请使用setupThreadGroup  它将包含您的JSR223采样器并使用1个线程进行配置。它将在常规线程组启动之前运行一次。

更新问题后编辑:

  • 正如我所写,如果你想在线程组中重用变量,你就不能使用setupThreadGroup方法,所以坚持使用OnceOnlyController方法来处理你的请求

  • 使用Once Once Controller它不能正常工作,因为你误解了我的答案,我建议使用JSR223 Sampler 而不是PreProcessor,因为预处理器只有在有一个采样器的情况下才会运行运行

答案 1 :(得分:0)

如果您使用Sampler,并且您有多个ThreadGroup,那么您必须将该采样器复制到每个ThreadGroup中,因为您不能将采样器放在ThreadGroups之外。

答案 2 :(得分:0)

您可以使用 jsr223 预处理器:

if(vars.get("init")=="OK") return;
vars.put("init","OK")

//your code