Vars.get returns 空值

Vars.get returns a null value

def signValue = '${signature_value}.${timestamp}.${signature_value}'
def token_secret = '${APP_CLIENT_SECRET}'
log.info("token is " + signValue)
def signingKey = new javax.crypto.spec.SecretKeySpec(signValue.getBytes(),"HmacSHA256");
def mac = javax.crypto.Mac.getInstance("HmacSHA256")
mac.init(signingKey);
def hmac = mac.doFinal(token_secret.getBytes());
def result = hmac.encodeBase64().toString()
---- I want to use the above "result" variable into a Http sampler request body------
---- I tried many possible ways but I end up is getting value as null or some error--
//${__groovy(vars.get("result"))}
//vars.put("signature", vars.get(result))

我一直在尝试提取变量“result”的值并在 HTTP 采样器结果中使用它。但我最终得到了一个空值或其他一些错误。谁能帮我解决这个问题。

谢谢!

我没明白,result应该是一个String对象,这不是你期望的吗? 无论如何,signValuetoken_secret 可能与您的期望不同:使用单引号而不是双引号您没有使用 GStrings(例如 token_secret 的值将始终恰好 '${APP_CLIENT_SECRET}',无论 APP_CLIENT_SECRET)

的值如何

输入vars结果:

 vars.put("signature", hmac.encodeBase64().toString());

并且在 HTTP 中使用 ${signature}

更改此行:

vars.put("signature", vars.get(result))

对此:

vars.put("signature", result)

也不要像这样将 JMeter 变量内联到 Groovy 脚本中:

def token_secret = '${APP_CLIENT_SECRET}'

使用 vars shorthand 代替:

def token_secret = vars.get('APP_CLIENT_SECRET')

因为:

  • Groovy GStrings

    冲突
  • 为了获得最佳性能,建议缓存编译脚本(默认启用)

    在这种模式下,JMeter 仅解析第一个值并将其缓存,这意味着您将在每次迭代中获得相同的值

更多信息: