根据JMeter文档:
16.12 在线程和线程组之间共享变量
变量是线程的局部变量,在一个线程中设置的变量不能在另一个线程中读取。这是设计使然。有关可在测试开始之前确定的变量,请参阅参数化测试(上文)。如果在测试开始之前该值是未知的,则有多种选项:
- 将变量存储为属性 - 属性是 JMeter 实例的全局属性
- 将变量写入文件并重新读取它们。
- 使用 bsh.shared 命名空间 - 请参阅 16.8.2 共享变量
- 编写自己的 Java 类
在线程之间传递变量的另一种方法是使用jmeter插件,如Andrey Botalov下面所提到的。
但是我发现第一次使用它有点令人困惑,但它可以在线程之间传递期间完全控制变量。按照我的例子使用BeanShell,你会看到它是多么容易:
接下来参考图片中的部分:
(1.1)在这里,我在用户定义的变量中创建自定义变量(或者您可以使用BSF Proccessor执行此操作 - 在本例中禁用(1.2))
(2.1)(2.4)我在第一个线程中成功地使用了变量 - 没有什么特别:)
(2.2)添加了BeanShell后处理器并自定义了我的变量
(2.3)已将其添加到队列
(3.1) 在第二个线程中 - 变量取自队列 - 具有您想要的任何名称。但要小心,明智地使用超时,因为这个线程将等到以前的完成,所以它可以获得修改变量(尝试一些长响应)
(3.2)(3.3)(3,4)重复使用和修改变量的步骤
(3.5) 变量在新队列中再次发送 - 因此请为其提供新名称
(4.1)(4.2)(4.3) 从新队列中抓取修改后的变量就像 charm 一样工作
警告
-
如果添加更多线程,则使用变量向线程组添加一些计数器,并将此变量名称添加到队列名称 - 在线程组中尝试捕获队列以使其具有唯一的名称(如果需要更清晰的阐释,请写注释)
-
如果您在一个线程组中有多个 http 请求,则添加线程通信预处理器作为 last 的子级(或者,如果您想实现某些自定义操作,则添加其他)http 请求
播放,修改,自定义以获得最佳结果:)添加更多线程可能会导致不必要的行为,因此您需要保持警惕。