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