You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy JSR223 Sampler中Counter变量无法递增问题咨询

问题分析与解决方案

为什么JSR223 Sampler里的Counter变量不递增?

你碰到的这个问题,核心是JSR223和BeanShell的变量解析机制差异导致的:

  • JSR223 Sampler默认开启了「Cache compiled script if available」(脚本预编译),当你直接写log.info(${idx});时,JMeter会在第一次编译脚本的阶段就把${idx}替换成初始值0,之后每次循环执行的都是已经编译好、硬编码了0的脚本,所以日志里一直显示0。
  • BeanShell Sampler则是每次循环都会重新解析并执行脚本,每次都会读取当前最新的idx变量值,所以能正常显示递增的数字。

解决方法(按推荐程度排序)

  1. 使用JMeter内置vars对象获取变量(最推荐,性能最优)
    在JSR223 Sampler里替换成以下代码:

    log.info(vars.get("idx"));
    

    vars是JMeter提供的内置对象,专门用来访问当前线程的变量,每次调用vars.get("idx")都会实时获取最新的变量值,完全不受预编译影响。

  2. 关闭JSR223的脚本缓存(不推荐,影响性能)
    如果你坚持想用${idx}的写法,可以找到JSR223 Sampler的「Cache compiled script if available」选项,取消勾选。这样JMeter每次循环都会重新解析脚本,${idx}会被替换成当前的变量值,但这种方式会降低脚本执行效率,高并发场景下不建议用。

  3. 通过参数传递变量值
    在JSR223 Sampler的「Parameters」输入框中填写${idx},然后在脚本里通过args数组获取:

    log.info(args[0]);
    

    这种方式也能实时拿到最新的变量值,同时不影响脚本预编译的性能。

内容的提问来源于stack exchange,提问作者SourMonk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:05:19