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

JMeter嵌套变量问题:如何正确引用循环计数器i?

解决JMeter tearDown循环中动态获取属性的问题

问题核心在于:${__P(ah_i,)}是JMeter内置函数,它会在脚本运行前完成解析替换,而循环里的变量i是脚本运行时才生成的动态值,函数解析阶段根本识别不到i的实际数值,所以只会固定去找名为ah_i的属性,自然拿不到正确结果。

直接用Groovy原生方式调用JMeter属性API就能解决,修改后的循环代码如下:

// Loop
log.info("Loop is starting!");
for (int i = 1; i <= 2; i++) {  
    // 用Props对象动态拼接属性名,第二个参数是属性不存在时返回的默认值(可选)
    def propValue = Props.get("ah_" + i, "属性不存在");
    log.info("Property of thread '" + i + "' in tearDown is: " + propValue);
}
log.info("Loop is ending!");

额外优化建议

你脚本里其他地方的写法也可以改成更可靠的Groovy原生方式,避免函数解析的潜在问题:

  • 替换${__threadNum}为ctx.getThreadNum()(ctx是JMeter上下文对象,可直接获取当前线程号)
  • 替换${__P(ah_${__threadNum},)}为Props.get("ah_" + ctx.getThreadNum())

修改后的完整示例:

def threadNum = ctx.getThreadNum();
def threadPropValue = Props.get("ah_" + threadNum);
log.info("Property of thread '" + threadNum + "' in tearDown is: " + threadPropValue);

log.info("Property of thread '2' in tearDown is: " + Props.get("ah_2"));
vars.put("assertionResults", threadPropValue);
log.info("assertionResults = " + vars.get("assertionResults"));

// Loop
log.info("Loop is starting!");
for (int i = 1; i <= 2; i++) {  
    def propValue = Props.get("ah_" + i, "属性不存在");
    log.info("Property of thread '" + i + "' in tearDown is: " + propValue);
}
log.info("Loop is ending!");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:05:21