JMeter-JSON提取器(JSON Extractor)

前言

当取样器返回的数据是JSON格式时,可以用JSONPath提取所需要的值,通过JSON提取器(JSON Extractor)来实现。

一、JSONPath

JSONPath是一种用于在JSON数据结构中定位和提取数据的查询语言。

语法:

$表示根节点
. 代表绝对路径,表示选择子节点,即按照父子级关系进行查找,表达式实例:$.父级.子级.要定位的元素
..代表相对路径,表示选择任意子节点,即直接从子级关系(不考虑层级)进行查找,表达式实例:$..要定位的元素

示例:

假设有以下JSON响应数据:

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

提取store中的bicycle的color值:$.store.bicycle.color或$..color

提取第一本书的作者:$.store.book[0].author

提取所有书的作者:$.store.book[*].author

二、JSON提取器(JSON Extractor)

2.1添加JSON提取器

添加线程组-添加HTTP请求-添加-后置处理器-JSON提取器

2.2设置JSON提取器

(1)引用名称(Name of created variable):设置获取到值的变量名称,用于后期引用;多个变量时用分号分隔
(2)JSON路径表达式(JSON Path expressions): JSONPath表达式,用于查找对应值;多个表达式用分号分隔
(3)匹配数字(0代表随机)(Match No. (0 for Random)):0 代表随机取值,n取第几个匹配值,-1匹配所有,后续引用时采用 变量名_N 取指定的第N个值
(4)缺省值(Default Value):缺省值,当JSONPath表达式未匹配到值时取该值

2.3验证JSON Path表达式提取的值

方法一:在查看结果树中,选择JSON Path Tester查看

方法二:添加调试取样器后,在查看结果树中,查看调试取样器(Debug Sampler)

线程组-右键-添加-取样器-调试取样器

在查看结果树中,查看调试取样器

2.4引用JSON Path表达式提取的值

添加新的HTTP请求,引用JSON Path表达式提取的值。

格式:${引用名称}

出现错误:获取的值引用时是乱码

原因:HTTP请求,设置参数时,多勾选了编码,去掉勾选,即可得到正确结果

2.5JSON Path表达式提取的返回值是数组

JSON Path表达式匹配到多个值,匹配数字需要填写-1

添加新的HTTP请求,引用提取到的值。

### JMeterJSON 提取器的使用 在构建复杂的性能测试场景时,经常需要从服务器响应中提取特定的数据用于后续请求。对于返回 JSON 数据格式的情况,可以利用 **JSON Extractor** 来实现这一目标[^1]。 #### 配置 JSON Extractor 为了配置 JSON Extractor,在测试计划中的适当位置右键点击并选择 `Add` -> `Post Processors` -> `JSON Extractor`。设置如下参数: - **Name**: 给组件命名以便识别。 - **Apply to**: 定义此处理器应用于哪个采样器的结果,默认为主机样本及其子样本。 - **Variable Names**: 输入变量名来存储提取出来的值,多个名称间用逗号分隔。 - **JSON Path Expressions**: 使用 JSONPath 表达式定义要匹配的内容路径,同样支持多表达式的输入。 - **Match No. (0 for Random)**: 当找到多个匹配项时指定获取哪一个;设为 0 则随机选取其中一个。 - **Default Values**: 如果没有任何数据被成功解析,则赋予默认值给上述提到的变量。 ```json { "store": { "book": [ { "category": "fiction", "title": "The Lord of the Rings" }, { "category": "non-fiction", "title": "Sapiens" } ] } } ``` 假设上面是一个 HTTP 请求返回的 JSON 响应体,并希望从中抽取书籍类别作为下一个请求的一部分。那么可以在 JSON Extractor 设置里这样写: | 参数 | 取值示例 | |--| | Variable Names | bookCategory | | JSON Path Expressions | $.store.book[0].category | 这将会把 `"fiction"` 存入名为 `bookCategory` 的变量中供之后使用。 #### 实际应用案例 考虑这样一个实际应用场景:登录接口会返回用户的 token 字符串,而这个字符串将在接下来所有的 API 调用头部携带验证身份合法性。此时就可以通过 JSON Extractor 把 token 提取出存到环境变量里面去。 假设有如下形式的登录成功的反馈信息: ```json {"status":"success","data":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}} ``` 针对这种情况下的 JSON Extractor 应该这么设定: | 参数 | 取值示例 | |--| | Variable Names | authToken | | JSON Path Expressions | $.data.token | 完成以上操作后,就能方便地将 `${authToken}` 插入其他地方了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值