如何使用 RegEx 捕获安全令牌以在 JMeter 中使用?

How can I use RegEx to capture a security token for use within JMeter?

我正在使用 JMeter 的正则表达式提取器从第一个 HTTP 响应 header 中捕获安全令牌,以在以后的请求中使用。

HTTP响应如下:

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw","sessionTimeoutSeconds":1800,"profileRequirements":null}

所以我试图捕获我写 RANDOMCHARS 的所有字符

{"token":"RANDOMCHARS","sessionTimeoutSeconds":1800,"profileRequirements":null}

我打算使用这个网站来测试任何建议:https://regexr.com/

任何帮助都将不胜感激! =)

代码

See regex in use here

"token"\s*:\s*"([^"]*)"

结果

输入

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw","sessionTimeoutSeconds":1800,"profileRequirements":null}

输出

下面的输出是捕获组 1

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw

说明

  • "token"字面匹配
  • \s*匹配任意数量的空白字符
  • :字面匹配
  • \s*匹配任意数量的空白字符
  • "字面匹配
  • ([^"]*) 捕获除 " 之外的任何字符到捕获组 1
  • "字面匹配

请注意,自从 JMeter 3.0 以来,您拥有 JSON Extractor which is designed for fetching values from JSON using JsonPath 比正则表达式更快、更简单和更稳定的语言。

相关配置为:

  • 变量名称:任何有意义的名称,即 token
  • JSON 路径表达式:$.token

就是这样,您可以在需要时将提取的值引用为 ${token}

演示:

更多信息:API Testing With JMeter and the JSON Extractor