为何无法在JSR223 Groovy断言中设置JMeter变量?
在JSR223 Groovy断言中把JMeter属性值转成变量的实现方案
没问题,我来帮你搞定这个需求!你已经有一批类似created_blob_A_6、created_blob_B_10这样的JMeter属性,现在要在JSR223 Groovy断言里把这些属性的值提取出来设置成JMeter变量对吧?下面给你两种常用的实现方式:
方式一:批量提取所有匹配前缀的属性
如果你想一次性把所有以created_blob_A_或created_blob_B_开头的属性都转成同名变量,可以用这段Groovy代码:
// 定义需要处理的属性前缀,你可以根据需求添加或删减 def targetPrefixes = ['created_blob_A_', 'created_blob_B_'] // 遍历所有JMeter属性 props.each { propKey, propValue -> // 检查当前属性是否匹配目标前缀 boolean isTargetProp = targetPrefixes.any { propKey.startsWith(it) } if (isTargetProp) { // 去掉属性值前后的空格(你的示例里值前面有空格,这步很重要) def cleanValue = propValue.trim() // 将属性值设置为同名的JMeter变量 vars.put(propKey, cleanValue) // 可选:打印日志确认,方便调试 log.info("已完成转换:属性${propKey} → 变量${propKey},值为${cleanValue}") } }
代码里的关键点:
props是JMeter内置的属性对象,能直接获取所有全局属性vars是JMeter内置的变量对象,用来设置当前线程组的变量trim()用来清理属性值前后的空格(你的示例中属性值前面带空格,比如created_blob_A_6= fde65de0...)
方式二:提取单个特定属性
如果你只需要提取某个特定的属性(比如只取created_blob_A_6的值),可以用更简洁的代码:
// 指定要提取的属性名 def targetPropKey = 'created_blob_A_6' // 检查属性是否存在 if (props.containsKey(targetPropKey)) { def cleanValue = props.get(targetPropKey).trim() // 设置成自定义名称的变量,比如这里叫selected_blob_A vars.put('selected_blob_A', cleanValue) log.info("已提取属性${targetPropKey}的值到变量selected_blob_A,值为${cleanValue}") } else { log.warn("未找到目标属性:${targetPropKey}") }
额外小技巧
如果想给变量重命名(比如把created_blob_A_6改成blob_A_6),可以在设置变量时调整键名,比如:
// 把属性名的前缀去掉,生成新的变量名 def newVarName = propKey.replace('created_', '') vars.put(newVarName, cleanValue)
这样就能灵活调整变量的命名啦!
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

