JMeter中的参考值未与请求标头一起发送


问题内容

我在JMeter中有一个HTTP请求采样器,用于发送登录请求。

我必须access_token从此HTTP请求的响应中获取,该响应必须与第二个HTTP请求
采样器的请求标头一起发送。

登录请求的响应数据如下所示:

{“status”:true,”access_token”:”91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM”}

Regular Expression Extractor

Reference Name: access_token
Regular expression: access_token":"(.*?)"
Template $1$
MatchNo:1

When I am checking this regular expression using View Results Tree- >RegExp
Test
, I am obtaining a result like this:

Match count: 1

Match[1][0]=
access_token”:”91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM”

Match[1][1]=
91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM

我需要获取Match [1] [1]。即只是access_token价值。

在 第二个HTTP请求采样器的HTTP标头管理器中引用表达式的值:

Name: Authorization
Value : Bearer ${access_token}

现在,当我运行JMeter测试并观察View Results Tree时,我可以看到第二个请求的响应是

Global Authentication Failed

and the Request Headers:

Connection: keep-alive

problem is in the following line: I have to get the access_token value
(91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM)
instead of ${access_token}:

Authorization: Bearer ${access_token}

Content-Type: application/json

Content-Length: 21

Host: localhost

User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_111)

如果不是给参考令牌,而是在HTTPHeader Manager中对令牌进行硬编码,则响应成功。

我该如何解决这个问题?


问题答案:

正则表达式提取器很可能由于多余的空间或换行符
或其他原因而失败。

请注意,从Apache JMeter 3.0开始,您就有了JSONExtractor,它设计用于 使用Json Path语言从JSON响应
类型获取数据。该 JSON提取相关的配置是一样简单:

JMeter JSON路径提取器

有关更多信息,请参见使用JMeter进行API测试和JSON提取器文章。

除此之外,测试计划中其余的元素配置看起来还不错。