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

JMeter Groovy脚本vars.get返回null 无法提取result到HTTP采样器请求体

问题根源与修复方法

1. 现有脚本的核心错误

  • 错误1:在Groovy脚本中直接使用${signature_value}这类JMeter变量引用语法,JSR223元件建议用vars.get()方法获取变量,避免缓存问题和取值异常
  • 错误2:存储变量的写法错误:vars.put("signature", vars.get(result))中,result是Groovy本地变量,不是JMeter全局变量,不需要用vars.get获取,直接传变量本身即可。

2. 修正后的完整Groovy脚本

// 正确获取JMeter已有变量
def signatureValue = vars.get("signature_value")
def timestamp = vars.get("timestamp")
def appClientSecret = vars.get("APP_CLIENT_SECRET")

def signValue = "${signatureValue}.${timestamp}.${signatureValue}"
log.info("待签名内容为:" + signValue)

// 生成HmacSHA256签名
def signingKey = new javax.crypto.spec.SecretKeySpec(signValue.getBytes("UTF-8"),"HmacSHA256")
def mac = javax.crypto.Mac.getInstance("HmacSHA256")
mac.init(signingKey)
def hmac = mac.doFinal(appClientSecret.getBytes("UTF-8"))
def result = hmac.encodeBase64().toString()

// 关键:将Groovy本地变量存入JMeter全局变量,自定义变量名为signature
vars.put("signature", result)
log.info("生成的签名为:" + vars.get("signature")) // 可通过日志确认签名是否生成正确

3. HTTP采样器调用方法

直接在HTTP请求体中使用${signature}即可引用生成的签名值,无需写复杂的Groovy函数调用。

注意事项

  • 确保Groovy脚本所在的JSR223元件(如JSR223预处理程序)执行顺序在HTTP采样器之前,建议放在目标HTTP采样器的子节点
  • 生成字节数组时指定编码为UTF-8,避免不同环境默认编码不一致导致签名校验失败
  • 不要在JSR223元件中大量使用${}格式的变量引用,会导致脚本无法缓存,性能下降同时可能出现取值异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:45:03