如何将值从Thread Group传递给TearDown Thread Group?

时间:2018-04-11 07:26:22

标签: jmeter jmeter-4.0

我正在尝试实施负载测试测试脚本,该脚本应根据场景行事:

  • 会有几个“生产者”线程,它会通过网络服务将文件上传到数据库;

  • 将会有很少的“消费者”线程,它会下载“生产者”上传的文件。

目前,我一直坚持清理数据库。我可以在发送“producer”请求后使用JSON提取器获取记录ID,并使用此ID来模拟文件下载。但是这个ID在Tear Down Thread Group中不可见。

你能告诉我,我怎样才能将Thread上传文件的值传递给Tear Down Thread Group?

目前,我的JMeter 4项目使用具有以下配置的对象:

  1. 制作人线程组#1(此线程组上传和下载文件)
    • POST HTTP请求(此请求上传文件)
    • JSON提取器
      • 已创建变量的名称= id_to_delete
      • JSON路径表达式= $ .record-id
      • 比赛号码= -1
    • GET HTTP请求(此请求下载文件)
  2. 制片人主题组#2
  3. 制片人主题组#3
  4. ...
  5. TearDown Thread Group。

2 个答案:

答案 0 :(得分:1)

根据JMeter User Manual:

  

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

所以你必须去JMeter Properties传递线程组之间的值,比如:

  • 设置属性:使用__setProperty()功能
  • 要获取另一个线程组中的属性值,请使用__P() function
  • 要设置特定于用户的(每个线程)属性,请使用__threadNum()函数作为postfix的属性前缀

示例设置属性:

${__setProperty(foo_${__threadNum},${YOUR_VARIABLE_HERE})}

获取属性的示例:

${__P(foo_${__threadNum},)}

演示:

JMeter Property Sharing Between Thread Groups

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

答案 1 :(得分:0)

JMeter变量不能在Thread组(包括TearDown)之间共享,

您可以将变量值复制到JMeter属性并在Tear Down中使用它,例如在JSR223 Sampler内部

props.put("id_to_delete", vars.get("id_to_delete"));

或使用__setProperty函数将值复制到属性:

${__setProperty(id_to_delete, ${id_to_delete},)}