在 Groovy JSR223 Sampler 中访问计数器变量时不递增

Sou*_*onk 1 groovy jmeter jsr223

我有一个简单的循环控制器,其中有一个 Counter 配置元素和一个运行 Groovy 代码的 JSR223 Sampler。我的计数器设置为从 0 开始,递增 1,最多为 3,并设置为名为“idx”的变量。

在我的 JSR223 Sampler 中,我使用以下方式记录 idx 的值log.info(${idx});:对于每次循环迭代,它总是打印第一个迭代值(在我的例子中为 0)。

我禁用了这个 JSR223 采样器并添加了一个 BeanShell 采样器,执行相同的日志语句,log.info(${idx});并且它正确递增 - 我得到了迭代的值 0、1、2。

我需要获取一些 JSON,将它们映射到对象,进行一些调整,然后将它们映射回 JSON。JSONParser、JSONObject 和 JSONArray 类似乎可以在 BeanShell Sampler 中使用,但我对 Groovy 的 JsonSlurper 和 JsonBuilder 类更满意,并且更喜欢使用它们。

所有这些步骤都在测试片段中(如果有影响的话)。有人有主意吗?这是一个错误吗?

Dmi*_*i T 5

切勿在脚本中直接引用JMeter 函数或变量,或者使用“参数”部分,例如:

JMeter Groovy 参数

或者使用vars代表 JMeterVariables 类实例的简写,例如:

log.info(vars.get('idx'))
Run Code Online (Sandbox Code Playgroud)

JMeter Groovy Vars 打印值

原因在于:

  • 函数或变量可能会解析为导致编译失败或意外行为的内容
  • 引用变量和/或函数会阻止缓存已编译的 Groovy 脚本,因此会对性能产生负面影响
  • 引用函数和/或变量可能与Groovy GString 模板冲突

有关在 JMeter 测试中将 Groovy 脚本与JSR223 Elements结合使用的更多信息,请参阅Apache Groovy - 为什么以及如何使用它一文。