JMeter-用户定义的计数器不会为循环递增

时间:2018-11-20 23:23:56

标签: groovy jmeter

我对JMeter还是很陌生,我试图使用循环控制器和JSR223后处理器来增加用户定义变量中预定义的计数器变量,但它似乎无法正常工作。我查看了有关JMeter循环的各种示例和计数器示例,以解决此问题,但配置元素Counter也未随循环增加。 有人可以让我知道我在做什么错吗?

这是用户定义的变量计数器:

This is the user defined variable counter

这是我的循环方式:

This is how I do loop

这就是我尝试使用后处理器递增计数器的方式,并且日志显示计数器未针对每个循环递增。我想将计数器提高到5:

And this is how I am trying to increment the counter using post processor and the log displays that the counter is not incrementing for each loop. I want to get the counter upto 5

[编辑] 我猜不清楚我为什么要使用$ {counter}进行测试。我试图将另一个变量内的计数器变量评估为'$ {__ V(transaction _ $ {counter})}',因为这需要附加到文本文件中。例如,如果transaction_3的值为“ 110001”,如果我要附加'$ {__ V(transaction _'+ vars.get('counter')+')}',则存储的文本将显示为“ transaction_3”,如果执行'$ {__ V(transaction _ $ {counter})}',然后我得到存储在文本文件中的正确值“ 110001”,而在下一次迭代中,计数器不递增。有没有可能解决这个问题的方法?

This is how I was using the variable within variable and it shows that the values are not changing because the counter is not changing.

And this image is how I am trying to do with vars.get() and it shows that it is just putting the variable name instead of evaluating the value of each item.

2 个答案:

答案 0 :(得分:0)

根据JSR223 Sampler文档:

  

JMeter在将脚本字段传递给解释器之前先处理函数和变量引用,因此这些引用将只解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这可能会导致语法错误。为了使用运行时变量,请使用适当的props方法,例如

props.get("START.HMS");
props.put("PROP1","1234");

因此,将脚本的最后一行修改为:

log.info(vars.get('counter'))

演示:

enter image description here

另外请注意,它更容易使用:

  1. Counter测试元素或__counter() function,请查看How to Use a Counter in a JMeter Test文章以获取更多详细信息
  2. 循环控制器公开了${__jm__Loop Controller__idx} JMeter变量,该变量保存当前的迭代编号

答案 1 :(得分:0)

根据《 JMeter手册最佳做法》-> 16.12 JSR223 Elements

使用JSR 223元素时,建议检查Cache编译脚本是否具有可用属性,以确保在基础语言支持的情况下缓存脚本编译。在这种情况下,请确保脚本不使用${varName}使用任何变量,因为缓存将仅使用${varName}. Instead use: vars.get(“ varName”)`

的第一个值。

如果将log.info('${counter}')更改为log.info('${vars.get("counter")}'),应该可以解决问题!

或取消选中此选项:

JSR223 preprocessor screenshot