JMeter中使用正则表达式提取器捕获响应头失败,请求排查
我尝试捕获响应头里的Authorization字段值,目标响应头示例如下:
Response headers: HTTP/1.1 200 OK Cache-Control: private Content-Type: application/json Server: Microsoft-IIS/8.5 Authorization: Bearer MMSArOve7c9NffH4oTqBMW1SiWLUbQi2nm0ryR- Wi5d_plLkk7xzTVo8b5_s1sg-Rut6vdDoTvlRju- X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Mon, 14 May 2018 03:50:47 GMT Content-Length: 484
我已经完成了相关配置(见配置截图),但得到的变量结果却不符合预期:
JMeterVariables: JMeterThread.last_sample_ok=true JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@33a6821 START.HMS=113828 START.MS=1526254708675 START.YMD=20180514 TESTSTART.MS=1526269844536 Token=test __jm__Thread Group__idx=0 __jmeter.USER_TOKEN__=Thread Group 1-1
可以看到Token变量的值是test,明显没有正确提取到目标字段。请问我哪里操作有误?
可能的错误点及修复方案
结合你的问题描述和JMeter的常见配置坑,我整理了几个最可能的原因:
正则表达式未正确匹配目标字段
从你的变量结果看,Token=test大概率是提取器的Default Value设置成了test,而正则表达式根本没匹配到Authorization字段。建议调整正则为:Authorization: Bearer (.*)同时勾选Dotall选项(让
.匹配换行符,因为示例里的Token值看起来有换行/空格拆分),确保能完整捕获整个Token字符串。提取器的作用域不正确
确认你的提取器(比如正则表达式提取器)是作为目标请求Sampler的子节点添加的,而不是直接放在线程组下。如果作用域不对,提取器会处理其他请求甚至没有请求的响应,自然拿不到正确的值。忽略了响应头字段的大小写
部分服务器返回的响应头字段名可能是小写的authorization,而你用大写Authorization匹配会失败。可以把正则改成兼容大小写的版本:[Aa]uthorization: Bearer (.*)未正确配置提取器的核心参数
检查提取器的以下参数是否正确:Reference Name:设置为Token(和你变量里的名称一致)Template:必须设置为$1$(表示取正则表达式中第一个分组的内容)Match No.:设置为1(取第一个匹配到的结果,因为响应头里只会有一个Authorization字段)
确认目标请求确实返回了该字段
先在JMeter的查看结果树中,查看目标请求的响应头,确认Authorization字段确实存在且格式和你提供的示例一致。有时候可能请求参数不正确,导致服务器没有返回这个字段。
快速验证步骤
- 清空提取器的
Default Value(或者改成NOT_FOUND) - 重新运行测试,查看
Token变量的值:- 如果是
NOT_FOUND,说明正则没匹配到,继续调整正则或检查响应头 - 如果能正确显示Token值,说明之前的默认值干扰了结果
- 如果是
内容的提问来源于stack exchange,提问作者Yu Jia
相关产品推荐
相关产品推荐

