在Included Controller中设置变量在调用它的线程组中不可见

时间:2018-04-04 18:07:09

标签: jmeter

我有以下设置

login.jmx
...
- Thread Group
  - Transaction Controller
    - Http Sampler
      -Regex extractor (sets variable test)

other.jmx
-Thread Group
  - Transaction Controller
    - Include Controller (login.jmx)
    - Http sampler
      - Header using the test variable

问题出在other.jmx事务控制器变量测试中没有设置。如果我将Login线程组复制到另一个测试计划中,它可以正常工作。

如何在使用include控制器时设置变量。

2 个答案:

答案 0 :(得分:3)

在我的情况下,我瞥了一眼这条线......

  

include控制器旨在使用外部jmx文件。要使用它,请在测试计划下创建一个测试片段,并在其下面添加任何所需的采样器,控制器等。

一旦我在测试计划中的测试片段下添加了所有内容,一切正常。

Stepping Thread Group throws error

答案 1 :(得分:2)

根据JMeter Functions and Variables文档:

  

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

因此我不认为您可以在另一个线程组中的一个线程组中使用JMeter变量,因为JMeter变量的范围仅限于当前线程,因此它仅对当前线程中的当前虚拟用户可见组。

因此,如果您需要在线程组之间传递变量,则需要首先通过__setProperty() function将其转换为JMeter属性,如:

  • 设置属性:${__setProperty(foo,bar,)}
  • 获取财产:${__P(foo,)}

如果您希望该属性是特定于线程的,即每个虚拟用户都有自己的值,您可以添加__threadNum函数作为前缀或后缀:

  • ${__setProperty(foo_${__threadNum},bar,)}
  • ${__P(foo_${__threadNum},)}

    JMeter Properties across Thread GRoups

更多信息:Knit One Pearl Two: How to Use Variables in Different Thread Groups