JMeter JSON提取器详解:从接口响应中精准提取与传递数据

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 参数间的联动关系与配置心法

理解这几个参数如何联动,是避免踩坑的关键:

  1. 变量名数量是“锚点” Names of created variables 的数量决定了整个配置的“维度”。你填了N个变量名,那么 JSON Path expressions Match No. (以及 Default Values )最好都提供N个值,用分号
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 ### 信号系统(郑君里 第三版)课后习题解析 #### 1. 信号系统中δ函数的尺度变换特性 在《信号系统》(郑君里 第三版)这一著作中,作者阐述了δ函数的尺度变换特性,并借助一个特定的习题进行了详尽的阐释。该习题的任务在于验证以下等式: \[ \delta(at) = \frac{1}{|a|}\delta(t) \] **论证:** 为了验证此等式,我们首先需要掌握δ函数的基本属性以及它如何响应自变量的变动。依据题目的指示,我们知道当自变量为\( t \)时,脉冲的底部长度为\( \tau \),而当自变量转变为\( at \)时,底部长度调整为\( |a|\tau \)。 我们能够借助图形化的手段来获得直观的认识。设想一个用三角形来逼近的δ函数图像,其底边长度为\( \tau \),高度为\( h \),那么三角形的面积计算为\( A = \frac{1}{2} \tau h \)。当自变量变为\( at \)时,为了维持三角形的高度恒定,底边长度必须更新为\( |a|\tau \),此时三角形的面积变为\( A = \frac{1}{2} |a|\tau h = |a|A \)。 由于δ函数的积分特性被定义为单位面积,即在任何区间\( [-\infty, +\infty] \)内的积分结果均为1,因此无论底部长度如何变化,积分值均保持恒定。这表明,当自变量转变为\( at \)时,为了确保积分值维持在1,δ函数的幅度必须相应地调整为原值的\( \frac{1}{|a|} \)倍。由此,我们得以证明该等式: \[ \int_{-\infty}^{+\infty}...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值