我在JMeter中有一个HTTP请求采样器,它发送一个登录请求。
我必须从此HTTP请求的响应中获取access_token
,该请求必须与第二个HTTP请求采样器的请求标头一起发送。
登录请求的响应数据如下:
{"状态":真," ACCESS_TOKEN":" 91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM"}
正则表达式提取器
Reference Name: access_token
Regular expression: access_token":"(.*?)"
Template $1$
MatchNo:1
当我使用查看结果树 - > RegExp测试检查此正则表达式时,我得到的结果如下:
比赛数:1
匹配[1] [0] = 的access_token":" 91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM"
匹配[1] [1] = 91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM
我需要的是获得Match [1] [1]。即只是access_token
值。
在第二个 HTTP请求采样器 的 HTTP标头管理器 中引用表达式的值:< / p>
Name: Authorization
Value : Bearer ${access_token}
现在,当我运行JMeter测试并观察查看结果树时,我可以看到第二个请求的响应是
全局身份验证失败
和请求标题:
连接:保持活力
问题出在以下几行:我必须获取access_token
值(91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.91kLM68tdMBoDFRURArvdmwYgWV9Nr2sHYDwivTM.Arvdm_M68-BoDFRURArvdmwYgWV9Nr2sHYDwivTM
)而不是${access_token}
:
授权:持票人$ {access_token}
Content-Type:application / json
内容长度:21
主持人:localhost
User-Agent:Apache-HttpClient / 4.5.3(Java / 1.8.0_111)
如果不是给出引用令牌,而是在HTTP头管理器中对令牌进行硬编码,那么响应就会成功。
注意:我已经检查了[How to get Response Data and parse it to HTTP Header Manager in JMeter
我该如何解决这个问题?
答案 0 :(得分:1)
很可能你的正则表达式提取器由于额外的空间或换行或其他原因而失败。
请注意,自Apache JMeter 3.0以来,您有JSON Extractor,它旨在使用JSON从Json Path language响应类型中获取数据。相关的JSON Extractor配置非常简单:
有关详细信息,请参阅API Testing With JMeter and the JSON Extractor文章。
除此之外,测试计划中的其余元素配置看起来还不错。