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

如何在JMeter中比较关联值与关联值列表?求修正Groovy代码

问题修正与解决方案

原代码核心问题

  • 变量名混乱:循环变量用i但判断时误用index;目标变量拼接错误(如应是C_Categories_${index}_g1而非C_Categories${index}g1,缺少下划线)
  • 字符串与代码混淆:把vars.get()调用用引号包裹,导致实际比较的是字符串字面量而非变量真实值
  • 循环范围错误:i < list会遗漏最后一个匹配项,应改为i <= list
  • 闭包嵌套冗余:代码2中多了一层大括号,导致逻辑无法正常执行
  • 变量未初始化:C_Category_uuid未从vars中读取,直接使用会报错
  • 未终止循环:找到匹配后未跳出循环,结果可能被后续项覆盖

修正后的Groovy代码

// 读取关键变量
def C_Category_uuid = vars.get("C_Category_uuid")
def matchNr = vars.get("C_Categories_matchNr") as int
def C_Category = ""

// 处理uuid为空的情况
if (C_Category_uuid == null || C_Category_uuid == "null") {
    vars.put("C_Category", "")
} else {
    // 遍历所有匹配项
    1.upto(matchNr) { index ->
        def currentG1 = vars.get("C_Categories_${index}_g1")
        if (C_Category_uuid.equals(currentG1)) {
            // 匹配成功,获取对应g2值并终止循环
            C_Category = vars.get("C_Categories_${index}_g2")
            vars.put("C_Category", C_Category)
            return // 跳出循环,避免后续覆盖
        }
    }
    // 无匹配时兜底设置为空字符串
    if (C_Category.isEmpty()) {
        vars.put("C_Category", "")
    }
}

代码说明

  • 先从vars中读取核心变量,确保变量存在可调用
  • 处理C_Category_uuid为空或字符串"null"的边界场景
  • 使用1.upto(matchNr)遍历所有索引,覆盖从1到matchNr的所有项
  • 正确拼接变量名,通过vars.get()获取真实变量值进行比较
  • 匹配成功后立即跳出循环,避免结果被后续项覆盖
  • 增加无匹配时的兜底处理,保证C_Category始终有有效值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:43:21