试图通过一个变量控制线程组,我想在线程组之间修改该变量(我按顺序执行TG(。示例:
Test Plan
JSR223Preprocessor or Listener #tried them both
--> vars.put(key,Integer.toString(1));
ThreadGroup
---> x=key
JSR223Preprocessor/Listener
--> vars.put(key,Integer.toString(2));
ThreadGroup
---> x=key
两个ThreadGroups都将使用键的最后一个值(上例中为2(?如何在线程组执行之间修改变量?
-
根据JMeter文档的函数和变量章节:
属性与变量不同变量是线程的本地变量;属性对所有线程都是通用的,需要使用__P或__property函数来引用。
这意味着,无论您使用
vars.put()
函数设置的值是什么,都将保留在当前线程(虚拟用户(的本地,如果您需要在线程组之间传递值,则需要切换到props
简写,或者使用线程间通信插件 -
根据JMeter文档的执行命令章节
请注意,只有在应用了定时器、断言、前置处理器和后置处理器的采样器的情况下,才会对其进行处理逻辑控制器和采样器按照它们在树中出现的顺序进行处理。其他测试元素将根据发现它们的范围和测试元素的类型进行处理。[在一个类型中,元素按照它们在树中出现的顺序进行处理]。
同样根据JMeter Scoping规则,在预处理器的情况下,代码在每个采样器之前执行,在侦听器的情况下在每个采样器之后执行,不确定这是否是您正在寻找的
如果您不想影响所有线程组,只需将JSR移动到相关线程组下面
参见范围界定规则
测试树中的一些元素是严格分层的(监听器、配置元素、后处理器、前处理器、断言、定时器(