如何使用 JSON 提取器从请求响应中正确提取 .pem 密钥

How to correctly extract .pem key from request response with JSON extrator

我正在使用 jmeter JSON 提取器 JSON 看起来像这样

{"type":"rpc","tid":7,"action":"SecurityManager","method":"getAuthenticationKey","result":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydpVbheWPx4ZMbxJ8yCm\ndcP2EaRZD2R4PUmuFhdDdvpxT\/so00\/22orFQMgw8hrgEZ07ISzarOlclchm7DtF\nzxUzjGon1d5OJ2\/61niT+bAyuykn7y63\/BEtGS3KsR9ez3Ds+JR04Tca\/ajUYAIo\nrtAdCuvQuWkk4ZmZWywa7n899KOndL8S3G0R9Bex5XwfXJoE2BC6Ww75gwkzANFX\nIqkTYeepIMai3B8H31VIW2aJXURbjgN4yrk4sOy5a5JqnPEeCPKJR3nCrZDZGG06\ncoq0swW8oegNI9SFsiIqpDQ6Fi4WqqH5EMNu6FrkF3HAqwwyGljnogGNdnkwajiu\nCQIDAQAB\n-----END PUBLIC KEY-----\n"}

我正在尝试使用该值(例如只是显示它)

log.info("${key}")

,但我收到错误

    o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script26.groovy: 8: expecting anything but ''\n''; got it anyway @ line 8, column 39.
log.info("-----BEGIN PUBLIC KEY-----

有什么地方我做得不对吗?

你不应该在 JMeter 的 Groovy 脚本中使用 ${}。

改为这样做:

log.info("Got key:{}", vars["key"]);

前提是您的变量名为 key

这就是您配置的方式 JSON Extractor:

鉴于您已经使用了 JSR223 测试元素,因此您不需要 JSON 提取器,可以通过 JSR223 PostProcessor

一次性提取和打印 PEM 密钥
  1. 将 JSR223 PostProcessor 添加为 returns 以上 JSON
  2. 请求的子项
  3. 将以下代码放入"Script"区域:

    vars.put('key', new groovy.json.JsonSlurper().parse(prev.getResponseData()).result)
    log.info(vars.get('key'))
    
  4. 享受日志查看器中的打印变量window

  5. 当然你可以在其他测试元素

  6. 中作为${key}访问它

参考文献:


今后请避免在 Groovy 脚本中使用 JMeter 函数 and/or 变量,因为它们与 Groovy GString Templates 冲突,可能会被解析为导致编译或运行时的问题编译脚本的失败和不兼容 Groovy 缓存功能会对 JMeter 性能产生负面影响。