如何在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
相关产品推荐
相关产品推荐

