Jmeter系列(26)- 详解 JSON 提取器
果你想从头学习Jmeter,可以看看这个系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
为什么要用 JSON 提取器
- JSON 是目前大多数接口响应内容的数据格式
- 在接口测试中,不同接口之间可能会有数据依赖,在 Jmeter 中可以通过后置处理器来提取接口的响应内容
- JSON 提取器是其中一个可以用来提取响应内容的元件
json 提取器的应用场景
- 提取某个特定的值
- 提取多个值
- 按条件取值
- 提取值组成的列表
JSON 提取器

我们通过实际栗子去讲述理论知识点
JSON 提取器界面介绍

字段含义
| 字段 | 含义 |
| Apply to | 应用范围,选默认的 main sample only 就行了 |
| Names of created variables |
|
| JSON Path expression |
|
| Match No.(0 for Random) |
|
| Compute concatenation var(suffix_ALL) |
|
| Default Values |
|
入门栗子
栗子的前提
这个栗子,我都会以这个地址的接口来完成 JSON 提取器的实战栗子,大家可以注册个账号玩一玩哦
http://api.yesapi.cn/docs.php?keyword=%E4%BC%9A%E5%91%98&channel=api
测试计划树结构
下面多个栗子都以这个测试计划为基础哦

提取某个特定的值的栗子
登录接口响应
登录是执行其他接口的前置接口,所以要获取用户登录后的 token、uuid

提取 token
相对路径的方式

提取 uuid
绝对路径的方式

其他接口调用 token、uuid
知识点
- 提取某个特定值的方式有两种:绝对路径、相对路径
- 提其他接口可以通过 ${var} 这种格式,来获取提取到的值
综合栗子
- 接下来的栗子都是通过声明单个变量(Name of variable)讲述的栗子
- 上面讲的是使用 JSON 提取器时的一个流程,在实际项目中,接口的响应内容肯定是非常复杂的,而我们需要提取的值也是多样的,需要通过各种实战栗子来讲述清晰
Json 字符串
这也是某个接口返回的响应内容,后面的栗子也是以这个 JSON 字符串为基础来提取各种值
{
"ret": 200,
"msg": "V2.5.1 YesApi App.User.GetList",
"data": {
"total": 3,
"err_msg": "",
"err_code": 0,
"users": [
{
"role": "user",
"status_desc": "正常",
"reg_time": "2020-06-22 15:19:51",
"role_desc": "普通会员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
},
"uuid": "6D5EDCB459F0917A98106E07D5438C58",
"username": "fangjieyaossb",
"status": 0
},
{
"role": "user",
"status_desc": "正常",
"reg_time": "2020-06-22 14:27:17",
"role_desc": "普通会员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
},
"uuid": "0164DC0680F84DCE40D3DD4A36640ECA",
"username": "fangjieyaossa",
"status": 0
},
{
"role": "admin",
"status_desc": "正常",
"reg_time": "2020-03-23 22:48:32",
"role_desc": "管理员",
"ext_info": {
"yesapi_nickname": "",
"yesapi_points": 0
},
"uuid": "079BF6BB82AFCFC7084F96AECAF0519F",
"username": "fangjieyaoss",
"status": 0
}
]
}
}
提取单个值
| Jsonpath | 结果 |
|---|---|
| $.data.total | 2 |
| $..total | 2 |
| $..users[0].role | user |
| $..uuid | 079BF6BB82AFCFC7084F96AECAF0519F |
| $.data.users[0].ext_info.yesapi_points | 0 |
重点
- 如果匹配到多个值(像 $..uuid ),并不能通过取下标的方式( uuid[0] )来获取值,因为默认是获取 ASCII码大的那个值 ,除非提取器设置了 Match No.
- 如果想取匹配到的所有 uuid,可以设置为 -1,结果如下图

还会告诉你匹配了多少个值 ${uuid_matchNr} ,记住,调用变量时,不再是 ${uuid} 而是 ${uuid_1} 、 ${uuid_2}
利用切片提取单个值
和 Python 切片一样的原理
| JsonPath | 结果 |
|
$..users[2] |
第三个 users |
|
$..users[-2] |
倒数第二个users |
|
$..users[0,1] |
前面两个users |
|
$..users[:2] |
第一、二个users |
|
$..users[1:2] |
第二个users |
|
$..users[-2:] |
倒数两个users |
|
$..users[1:] |
第二个开始的所有users |
提取多个值
- 四种写法类似,选一种方法自己熟记即可
- 重点:提取多个值,提取器的 Match No. 必须填 -1
$.data.users[*].role
提取所有 role 字段值

[*] 表示取数组的所有元素
$..users..role_desc
提取所有 role_desc 字段值

$..reg_time
提取所有 reg_time 字段值

$..[*].username
提取所有 username 字段值

按条件提取值
有时候只需要提取某个特定条件下的参数值
语法格式
[?(expression)]
栗子
| Jsonpath | 结果 |
| $..users[?(@.uuid)] | 提取 users 里面包含 uuid 字段的记录 |
| $..users[?(@.reg_time > '2020-06-01')] | 提取 reg_time 字段大于 2020-06-01 的记录 |
| $..users[?(@.role_desc =~ /.*会员.*?/i)] | 提取 role_desc 字段包含会员的记录 |
| $..users[?(@.status == 0)] | 提取 status 字段等于 0 的记录 |
@
代表当前节点,像上面的四个栗子,@代表 users 这个列表字段
=~
- 后面跟正则表达式,如果想提取包含指定字符的值,可以使用此正则: /.*指定字符串.*?/i
- i 代表大小写不敏感
勾选 Compute concatenation var 的栗子
JSON 提取器

测试结果
uuid_1=6D5EDCB459F0917A98106E07D5438C58
uuid_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid_ALL=6D5EDCB459F0917A98106E07D5438C58,0164DC0680F84DCE40D3DD4A36640ECA,079BF6BB82AFCFC7084F96AECAF0519F
uuid_matchNr=3
Jmeter系列(26)- 详解 JSON 提取器的更多相关文章
- Jmeter系列(27)- 详解正则提取器
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 有了 JSON 提取器为啥还要用正则提 ...
- jmeter后置处理器之Json提取器详解
此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值 ...
- jmeter里面Dug Sampler 和json提取器的用法
1.编写用户详情请求 2.查看结果树 一级一级往上查找父集 3.添加json提取器 步骤:点击[用户详情]请求->添加->后置处理器->json提取器 把查看结果树里面的JSON P ...
- 【Vlog】Jmeter之使用beanshell将json提取器中的多个值拼接为一个列表
场景如下: json提取器返回了当前登录用户的所有好友id,然而下一个接口是把好友id拼成一个数组进行传参的,现需将所有的好友ID拼接起来,类似ID1,ID2,ID3......这样 beanshel ...
- 『动善时』JMeter基础 — 35、JMeter接口关联【JSON提取器】详解
目录 1.JSON提取器介绍 2.JSON提取器界面详解 3.JSON提取器的使用 (1)测试计划内包含的元件 (2)HTTP Cookie管理器内容 (3)用户登陆请求界面内容 (4)JSON提取器 ...
- jmeter之json提取器详解
Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...
- Jmeter之Json提取器详解(史上最全)
参考资料:https://www.bbsmax.com/A/D854lmBw5E/ Jsonpath在线测试:http://jsonpath.com/ 实际工作中用到的一些场景: 提取某个特定的值 提 ...
- Jmeter系列(8)- 参数化:JSON提取器、全局参数化、CSV文件导入
JSON提取器 同一个响应结果需要提取多个参数进行参数化,下方输入项用分号(;)进行间隔.请求引用时${变量名} 全局参数化 此处全局参数化用的是用户自定义的变量 CSV文件导入
- Jmeter(5)JSON提取器
Jmeter后置处理器-JSON提取器 JSON是一种轻量级数据格式,以"键-值"对形式组织数据. JSON串中{}表示对象,[]表示对象组成的数组.对象包含多个"属性& ...
随机推荐
- MVC案例之新增与修改Customer
新增Customer 添加的流程Add New Customer 超链接连接到 newcustomer.jsp新建 newcustomer.jsp: 在 CustomerServlet 的 addCu ...
- 一篇文章讲透Dijkstra最短路径算法
Dijkstra是典型最短路径算法,计算一个起始节点到路径中其他所有节点的最短路径的算法和思想.在一些专业课程中如数据结构,图论,运筹学等都有介绍.其思想是一种基础的求最短路径的算法,通过基础思想的变 ...
- 轻松实现记录与撤销——C#中的Command模式
Command模式属于行为模式,作为大名鼎鼎的23个设计模式之一,Command模式理解起来不如工厂模式,单例模式等那么简单直白.究其原因,行为模式着重于使用,如果没有编程实践,确实不如创造模式那么直 ...
- Vue3.0+ElementUI打包之后,为什么部分页面按钮图标找不到
有的页面可以显示这个按钮,有的页面不可以,找了好久,看这都webpack路径问题,到但是我这个没有webpack,没有build文件夹,最后发现是因为没有绑定点击事件 加上这个之后就好了
- Java实现 LeetCode 324 摆动排序 II
324. 摆动排序 II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]- 的顺序. 示例 1: 输入: n ...
- Java实现 LeetCode 303 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, ...
- java实现拼出漂亮的表格
/* * 在中文 Windows 环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来. 比如: ┌─┬─┐ │ │ │ ├─┼─┤ │ │ │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ...
- java实现取球博弈
今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球的数目必须是:1 ...
- java实现第五届蓝桥杯出栈次序
出栈次序 X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同,只能容一辆车通过,是临时的检查站,如图[p1.png]所示. ...
- 调优 | Apache Hudi应用调优指南
通过Spark作业将数据写入Hudi时,Spark应用的调优技巧也适用于此.如果要提高性能或可靠性,请牢记以下几点. 输入并行性:Hudi对输入进行分区默认并发度为1500,以确保每个Spark分区都 ...
