首页 > 解决方案 > 修改线程组之间的变量

问题描述

试图通过我想在线程组之间修改的变量来控制线程组(我按顺序执行 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

两个 ThreadGroup 都将使用 key 的最后一个值(上例中的 2)?如何修改线程组执行之间的变量?

标签: jmeter

解决方案


  1. 根据JMeter 文档的函数和变量章节:

    属性与变量不同。变量是线程本地的;属性对所有线程都是通用的,需要使用 __P 或 __property 函数来引用。

    这意味着您使用vars.put()函数设置的任何值都将保持在当前线程(虚拟用户)的本地,如果您需要在线程组之间传递值 - 您将需要切换到props简写方式或使用Inter-Thread Communication Plugin

  2. 根据JMeter 文档的执行顺序章节

    请注意,定时器、断言、预处理器和后处理器只有在它们适用的采样器时才会被处理。逻辑控制器和采样器按照它们在树中出现的顺序进行处理。其他测试元素根据发现的范围和测试元素的类型进行处理。[在一个类型中,元素按照它们在树中出现的顺序进行处理]。

    同样根据JMeter 范围规则,在 PreProcessor 的情况下,代码在每个采样器之前执行,在每个采样器之后的侦听器的情况下,不确定这是否是您正在寻找的东西


推荐阅读