确保 JSR223 后处理器中的 vars.get 将仅在当前线程中设置值

Ensure vars.get in a JSR223 postprocessor will set value only in current thread

在 JMeter 中,我有一个线程组,它有一个子 JSR223 采样器。 这个 JSR223 采样器尝试执行一些代码以从远程系统获取消息,如果成功,它会设置一个变量 var1,如下所示:

vars.put('var1', var1)

然后,在这个 JSR223 采样器的子 JSR223 后处理器中,我做:

var1 = vars.get('var1')

然后我使用 var1 进行一些计算来修改父 JSR223 采样器结果。

我担心如果我使用此代码生成多个并发线程,它们将各自尝试将一个值放入 var1,然后当后处理器 运行 时,我无法保证 var1我试图在后处理器中使用的值实际上是由当前线程父采样器设置的 var1 值。会不会是别的线程设置的值?

这是一个合理的担忧吗?如果是,我该如何缓解?

提前致谢!

JMeter Variables are local to the thread, each thread (virtual user) has its own instance of JMeterVariables class 和其他线程都没有对该 vars 对象的读写访问权限。

因此您的音乐会无效,因此不需要“缓解”(无论它是什么意思)


如果你需要在 threads/thread 组之间传递数据——可以通过 props 对象来完成,这个家伙是“全局的”并且可以被任何线程组中的任何线程访问(事实上总的来说 JVM 所以 props 即使测试结束但 JMeter 引擎还没有关闭,仍然会有值)所以你需要小心它。

更多信息:Top 8 JMeter Java Classes You Should Be Using with Groovy

JMeter variable 值不能由另一个线程设置

JMeter variables are local to each thread