Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jmeter系列(26)- 详解 JSON 提取器

Jmeter系列(26)- 详解 JSON 提取器

作者头像
小菠萝测试笔记
发布于 2020-06-24 02:39:09
发布于 2020-06-24 02:39:09
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

为什么要用 JSON 提取器

  • JSON 是目前大多数接口响应内容的数据格式
  • 在接口测试中,不同接口之间可能会有数据依赖,在 Jmeter 中可以通过后置处理器来提取接口的响应内容
  • JSON 提取器是其中一个可以用来提取响应内容的元件
JSON 提取器的应用场景
  1. 提取某个特定的值
  2. 提取多个值
  3. 按条件取值
  4. 提取值组成的列表

JSON 提取器

我们通过实际栗子去讲述理论知识点

JSON 提取器界面介绍

字段含义

字段

结果

Apply to

应用范围,选默认的 main sample only 就行了

Names of created variables

接收提取值的变量名 多个变量用 ; 分隔 必传

JSON Path expression

json path 表达式,用来提取某个值 多个表达式用 ; 分隔 必传

Match No.(0 for Random)

取第几个值,多个值用 ; 分隔 0:随机,默认 -1:所有 1:第一个值 非必传

Compute concatenation var(suffix_ALL)

如果匹配到多个值,则将它们都连接起来,不同值之间用 , 分隔 变量会自动命名为 <variable name>_ALL

Default Values

缺省值,匹配不到值的时候取该值,可写error 多个值用 ; 分隔 非必传

  • 接收提取值的变量名
  • 多个变量用 分隔

;

  • 必传

JSON Path expression

  • json path 表达式,用来提取某个值
  • 多个表达式用 分隔

;

  • 必传

Match No.(0 for Random)

  • 取第几个值,多个值用 分隔

;

  • 0:随机,默认
  • -1:所有
  • 1:第一个值
  • 非必传

Compute concatenation var(suffix_ALL)

  • 如果匹配到多个值,则将它们都连接起来,不同值之间用 分隔

,

  • 变量会自动命名为

<variable name>_ALL Default Values

  • 缺省值,匹配不到值的时候取该值,可写error
  • 多个值用 分隔

;

  • 非必传

入门栗子

栗子的前提

这个栗子,我都会以这个地址的接口来完成 JSON 提取器的实战栗子,大家可以注册个账号玩一玩哦

http://api.yesapi.cn/docs.php?keyword=%E4%BC%9A%E5%91%98&channel=api

测试计划树结构

下面多个栗子都以这个测试计划为基础哦

提取某个特定的值的栗子

登录接口响应

登录是执行其他接口的前置接口,所以要获取用户登录后的 token、uuid

提取 token

相对路径的方式

提取 uuid

绝对路径的方式

其他接口调用 token、uuid

知识点

  • 提取某个特定值的方式有两种:绝对路径、相对路径
  • 提其他接口可以通过 这种格式,来获取提取到的值

${var}

综合栗子

  • 上面讲的是使用 JSON 提取器时的一个流程
  • 在实际项目中,接口的响应内容肯定是非常复杂的,而我们需要提取的值也是多样化的,需要通过各种实战栗子来讲述清晰

JSON 字符串

这也是某个接口返回的响应内容,后面的栗子也是以这个 JSON 字符串为基础来提取各种值

感兴趣也可以自己玩一玩:http://api.yesapi.cn/docs-api-App.User.GetList.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "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,可以设置为 -1,结果如下图

还会告诉你匹配了多少个值 {uuid} 而是 {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

提取多个值

  • 四种写法类似,选一种方法自己熟记即可
  • 重点:提取多个值,提取器的 必须填 -1

Match No.

$.data.users[*].role

提取所有 role 字段值

[*] 表示取数组的所有元素

$..users..role_desc

提取所有 role_desc 字段值

$..reg_time

提取所有 reg_time 字段值

$..[*].username

提取所有 username 字段值

按条件提取值

有时候只需要提取某个特定条件下的参数值

语法格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[?(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

提取数据指定字段的值的栗子

提取 users 第一条记录的 uuid、username 字段的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$..users[0].['uuid','username']
测试结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_1={"uuid":"6D5EDCB459F0917A98106E07D5438C58","username":"luojunjiessb"}

勾选 Compute concatenation var 的栗子

JSON 提取器
测试结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uuid_1=6D5EDCB459F0917A98106E07D5438C58
uuid_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid_ALL=6D5EDCB459F0917A98106E07D5438C58,0164DC0680F84DCE40D3DD4A36640ECA,079BF6BB82AFCFC7084F96AECAF0519F
uuid_matchNr=3

一个 JSON 提取器有多个 Jsonpath 的栗子

JSON 提取器
测试结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uuid1_1=6D5EDCB459F0917A98106E07D5438C58
uuid1_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid1_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid1_matchNr=3
uuid2_1=6D5EDCB459F0917A98106E07D5438C58
uuid2_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid2_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid2_matchNr=3
知识点
  • 如果有多个 Jsonpath 的时候,每个字段都必填值,且字段值的数量要一致(像上图,每个字段都填了两个值)
  • 勾不勾 Compute concatenation var 都行
  • 字段值数量不一致则无法提取值
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Jmeter系列(27)- 详解正则提取器
Regular Expression 正则表达式 Template 从找到的匹配项中创建字符串的模板 Match No.(0 for Random)
小菠萝测试笔记
2020/06/28
2.3K0
Jmeter系列(27)- 详解正则提取器
Jmeter之json条件提取实战(三)
之前写过2篇json提取的文章【Jmeter篇】后置处理器之正则提取器、Json提取器Jmeter之json提取器实战(二)有时我们想通过接口响应数据中的默写条件进行提取对应的字段,这时,就可以用到json条件提取,可以提取对应的值进行使用或迭代。
王大力测试进阶之路
2020/02/10
1.3K0
Jmeter之json提取器实战(二)
之前写过一篇文章【Jmeter篇】后置处理器之正则提取器、Json提取器 不是很完善,今天我们再来写一篇json提取器进行补充说明。
王大力测试进阶之路
2019/12/15
9440
【python接口自动化】- 使用json及jsonpath转换和提取数据
​ JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。简单说就是javascript中的对象和数组,通过这两种结构可以表示各种复杂的结构。
huofo
2022/03/18
2.5K0
【python接口自动化】- 使用json及jsonpath转换和提取数据
jmeter使用个人总结(很细很全)
Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。
魔都虫师
2020/05/21
4.7K0
jmeter使用个人总结(很细很全)
sqlmap命令详解pdf_SQLmap
服务型数据库(前提知道数据库用户名和密码) DBMS://USER:PASSWORD@DBMS_PORT/DATABASE_NAME (MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc)
全栈程序员站长
2022/11/01
2.8K0
sqlmap命令详解pdf_SQLmap
还不了解 etcd?一文带你快速入门(万字长文)
2018年12月 etcd 作为孵化项目 CNCF(云原生计算基金会),几天前 CNCF 宣布 etcd 正式毕业,成为 CNCF 顶级项目。CNCF 官方表示 etcd 项目的采用率持续增加,也有稳定的治理流程,功能已达一定成熟度。
aoho求索
2020/12/01
17.7K0
还不了解 etcd?一文带你快速入门(万字长文)
【测试SQLite】测试SQLite支持的SQL语句分类
为了全面测试SQLite支持的SQL语句,需要设计一个包含多种类型的表结构,并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试:
SarPro
2024/05/24
4630
【测试SQLite】测试SQLite支持的SQL语句分类
商业数据分析从入门到入职(9)Python网络数据获取
本文主要讲Python最常见的应用之一——网络数据获取,即爬虫: 先介绍了网页和网络的基础知识,为从网页中获取数据打好基础;接下来以两个案例介绍从网络中获取数据和处理数据的不同方式,以进一步认识Python爬虫和数据处理。
cutercorley
2020/10/09
2.7K0
商业数据分析从入门到入职(9)Python网络数据获取
Python与C++、Java区别对比学习
Java 的数组和变量在存储上是有区别的。在 Java 中,变量是一种基本的数据结构,用于存储单个值。而数组则是一种复合数据类型,用于存储一系列相同类型的值。
CtrlX
2023/03/21
2.2K0
Python与C++、Java区别对比学习
【RAG落地利器】向量数据库Milvus教程:如何实现MetaData检索过滤
Milvus 在 Milvus 存储库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus,只需运行
致Great
2025/01/21
5160
【RAG落地利器】向量数据库Milvus教程:如何实现MetaData检索过滤
MySQL 从入门到实践,万字详解!
数据库是往全栈发展不得不跨过的一道坎,大家不可避免会学到用到相关知识,最近查资料的时候发现网上很多内容要么就特别深,要么不成体系,对一些希望浅尝辄止仅仅是使用一下的人不太友好。最近刚好有机会学到 MySQL,集中一些时间学习了一下 MySQL 同时做了一些笔记,每个概念基本都有代码示例,每一行都是在下手打,读者可以直接复制了代码到命令行中运行,希望对大家有所帮助~ 😜 本文介绍的知识都不是特别深,目标用户是对 MySQL 零基础或弱基础的小伙伴们,可以帮助对 MySQL 建立一些概念,至少碰到相关问题知道
前端下午茶
2022/03/22
2.1K0
MySQL 从入门到实践,万字详解!
大数据存储技术之ClickHouse入门学习(二)
ClickHouse入门学习(一):https://blog.csdn.net/qq262593421/article/details/119514836
静谧星空TEL
2021/12/07
4.4K0
大数据存储技术之ClickHouse入门学习(二)
【建议收藏】历时一年的内网学习笔记合集
自 2020 年 11 月份至 2021 年 10 月份,在这近一年的时间里,笔者更新了自己在学习内网过程中的 30 余篇笔记,并将笔记同步更新到了自己的公众号、博客、CSDN 等平台,特在此整理成合集发布出来。
TeamsSix
2022/09/20
3.3K0
【建议收藏】历时一年的内网学习笔记合集
Java 编程问题:六、Java I/O 路径、文件、缓冲区、扫描和格式化
本章包括 20 个涉及文件 Java I/O 的问题。从操作、行走和观察流文件的路径,以及读/写文本和二进制文件的有效方法,我们将介绍 Java 开发人员可能面临的日常问题。
ApacheCN_飞龙
2022/07/11
2.6K0
小试牛刀—完整实例带你探究LR性能测试(PartA)
通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。
晴空SunnySky
2023/10/07
9600
SqlAlchemy 2.0 中文文档(七十五)
本指南介绍了 SQLAlchemy 1.1 版本的新功能,并记录了影响用户将其应用程序从 SQLAlchemy 1.0 系列迁移到 1.1 系列的变化。
ApacheCN_飞龙
2024/08/26
5060
【探花交友】day06—即时通信
如果是陌生人,通过《聊一下》功能进行打招呼,如果对方同意后,就成为了好友,可以进行聊天了。
陶然同学
2023/04/10
2K0
【探花交友】day06—即时通信
五万字 | Hive知识体系保姆级教程
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据社
2021/08/27
2.2K0
五万字 | Hive知识体系保姆级教程
Android Automotive Framework调试技巧
三次握手只是一个数据传输的过程,但是,我们传输前需要一些准备工作,比如将创建一个套接字,收集一些计算机的资源,将一些资源绑定套接字里面,以及接受和发送数据的函数等等,这些功能接口在一起构成了socket的编程
wizzie
2022/12/22
5.4K0
Android Automotive Framework调试技巧
推荐阅读
相关推荐
Jmeter系列(27)- 详解正则提取器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档