1. 项目概述:为什么你需要掌握JSON提取器?
如果你刚开始接触JMeter,或者已经用它发过一些HTTP请求,但一到处理接口返回值就头疼,那你来对地方了。今天我们不聊那些复杂的线程组、监听器,就聚焦一个看似简单、实则能让你测试脚本“活”起来的核心元件——JSON提取器。
想象一下这个场景:你测试一个登录接口,服务器返回了一串包含 token 的JSON数据。紧接着,你需要用这个 token 去调用查询用户信息的接口。难道你要手动复制粘贴那个长得要命的字符串,然后一个个请求去改吗?这显然不现实,尤其是在做性能压测,需要模拟成千上万个用户连续操作的时候。JSON提取器就是解决这个“数据传递”问题的钥匙。它能让JMeter自动从上一个请求的响应里,精准地“挖”出你需要的数据,并保存成一个变量,供后续请求直接使用。
现在绝大多数Web API和微服务的响应都是JSON格式,从简单的 {“code”: 200, “data”: “xxx”} ,到嵌套好几层的复杂数据结构。不会提取JSON里的数据,你的接口自动化测试和性能测试就永远停留在“单步操作”的原始阶段,无法构建真实的、有数据关联的业务流。所以,无论你是做功能测试、自动化测试还是性能压测,JSON提取器都是你必须点亮的技能树。
2. JSON提取器核心界面与参数全解
刚打开JSON提取器的配置界面,你可能会被那几个输入框搞得有点懵。别慌,我们一个个拆开看,它们其实都有明确的职责。
2.1 核心参数逐项拆解
Apply to(应用范围) 这个选项决定了提取器从哪个采样器的响应中提取数据。对于新手,记住99%的情况选 Main sample only 就够了。它表示只处理当前HTTP请求(主采样器)的响应。其他选项如 Sub-samples only 或 JMeter Variable 涉及更复杂的场景(比如嵌入的资源、前置处理器生成的变量),初期可以先忽略,避免增加不必要的复杂度。
Names of created variables(创建的变量名) 这是你给提取出来的数据起的“名字”,也就是后续要引用的变量名。 这是必填项 。
- 单个变量 :比如你想提取
token,就填token。 - 多个变量 :如果你想用同一个提取器同时提取多个值(比如
userId和userName),就用英文分号;分隔,写成userId;userName。这里填了几个名字,后面的JSON Path expressions和Match No.就必须对应提供几个值。
JSON Path expressions(JSON路径表达式) 这是整个提取器的灵魂,也是必填项。 它告诉JMeter:“按照我写的这个路径,去JSON里找数据。”JSON Path是一种查询语言,类似于文件路径或者XPath,专门用于在JSON结构中定位数据。
- 单个路径 :例如
$.data.token。 - 多个路径 :当
Names of created variables填了多个变量名时,这里也必须用;分隔填写对应数量的路径,顺序要一一对应。例如:$.data.userId;$.data.userName。
Match No.(匹配编号,0表示随机) 这个参数告诉JMeter,如果JSON Path找到了多个匹配项,你具体要哪一个。
-
0: 默认值 。随机取一个。这在模拟不同用户行为时可能有用,但通常我们不希望结果不可控。 -
1:取第一个匹配项。这是最常用的选项,尤其是当你知道路径只会匹配到一个结果时。 -
-1:取 所有 匹配项。这个功能非常强大!勾选后,提取器会返回一个数组。例如,变量名设为userId,匹配到3个值,那么你会得到userId_1,userId_2,userId_3三个变量,以及一个userId_matchNr=3的变量告诉你总数。 -
N:取第N个匹配项(N是正整数)。 - 多个值 :当提取多个变量时,这里也可以用
;分隔,为每个变量指定各自的匹配编号。例如1;-1表示第一个变量取第一个匹配值,第二个变量取所有匹配值。
Compute concatenation var(suffix _ALL)(计算连接变量) 这是一个复选框,不是输入框。 只有当 Match No. 设置为 -1 (提取所有值)时,它才有效。如果勾选,JMeter会额外生成一个变量,将匹配到的所有值用逗号 , 连接成一个字符串。变量名会在你定义的变量名后加 _ALL 。例如,变量名为 uuid ,勾选后你会得到 uuid_ALL=value1,value2,value3 。这在需要将ID列表一次性传递给另一个接口时很方便。
Default Values(默认值) 如果JSON Path没有找到任何匹配项,变量会取这个值。 这是保底策略,建议总是设置一个。 可以设置为 NOT_FOUND 、 ERROR 或者一个有意义的默认值(如 0 )。当测试失败时,查看这个变量值能帮你快速定位是提取逻辑错了,还是接口响应变了。多个变量时,同样用 ; 分隔。
2.2 参数间的联动关系与配置心法
理解这几个参数如何联动,是避免踩坑的关键:
- 变量名数量是“锚点” :
Names of created variables的数量决定了整个配置的“维度”。你填了N个变量名,那么JSON Path expressions和Match No.(以及Default Values)最好都提供N个值,用分号


4726

被折叠的 条评论
为什么被折叠?



