参考资料:https://www.bbsmax.com/A/D854lmBw5E/

Jsonpath在线测试:http://jsonpath.com/


实际工作中用到的一些场景:

  1. 提取某个特定的值
  2. 提取多个值
  3. 按条件取值
  4. 阵列取值(返回所有元素的列表/数组)
  5. 提取多个值

Jsonpath提取器需要另外安装

  • 下载plugins-manager.jar加入其加入JMETER_HOME/lib/ext目录,
  • 重新启动JMeter,
  • 点击Options > Plugins Manager顶部菜单,
  • 选择Available Plugins标签,
  • 选择Json Plugins并双击应用更改并重新启动JMeter。

使用方法:

Json Path提取器应放在HTTP Sampler下。可设置的参数有:

  • 变量名称:分号单独的变量名称,
  • JSON Path Expressions:从json响应中提取内容的表达式,
  • 匹配数字:-1对于所有,0对于随机的,n对于第n个,
  • Compute concatenation var:创建一个${foo_ALL}包含所有提取值的串联的变量,
  • 默认值:如果表达式不适用于正在处理的json文档,使用此处给定的默认值。

接下来用一个实际案例来演示Json提取的一些用法:

示例:有如下json

{
"code": 0,
"data": {
"total": 10,
"pageNo": 1,
"pageSize": 100,
"items": [
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560056,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735865761759234,
"createTime": 1591169490879,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560056,
"id": 1268082870707040258,
"close": 0,
"status": 2
},
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560092,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735866185383938,
"createTime": 1591169491390,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560092,
"id": 1268082872854523906,
"close": 0,
"status": 2
},
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560126,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735867363983362,
"createTime": 1591169491862,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560126,
"id": 1268082874830041089,
"close": 0,
"status": 2
},
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560164,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735867825356802,
"createTime": 1591169492296,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560164,
"id": 1268082876654563330,
"close": 0,
"status": 2
},
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560310,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735867003273217,
"createTime": 1591169493876,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560310,
"id": 1268082883277369345,
"close": 0,
"status": 2
},
{
"friendHeadLogoUrl": null,
"msg": "你好,我仰慕你的才华!",
"shield": 0,
"star": 0,
"friendNickname": "Auto",
"origin": 202,
"black": 0,
"memo": null,
"updateTime": 1591169560376,
"type": 2,
"userId": 1268082752079560705,
"friendId": 1267735868571942913,
"createTime": 1591169494629,
"blackUpdateTime": 0,
"addUpdateTime": 1591169560376,
"id": 1268082886439874561,
"close": 0,
"status": 2
}
],
"timestamp": null
},
"codeMsg": "success"
}

1、提取某个特定的值

Jsonpath 结果
$.data.total 10
$..total 10
$..items[1].userId 1268082752079560705

2、提取多个值

  • 比如要提取items列表里所有的friendId

$..friendId

$..[*].friendId

$.data.items[*].friendId

三种写法都可以,结果为:

Result[0]=1267735865761759234
Result[1]=1267735866185383938
Result[2]=1267735867363983362
Result[3]=1267735867825356802
Result[4]=1267735864650268673
Result[5]=1267735865363300353
Result[6]=1267735866688700417
Result[7]=1267735867003273217
Result[8]=1267735868232204289
Result[9]=1267735868571942913

注意:

  1. 使用时,需要用下标读取,如${friend_id_1}、${friend_id_2}........

  2. 特别说明一下,如果想要获取返回元素的数量,可以用${friend_id_matchNr}

  3. 也可以使用foreach控制器循环读取,这里不再描述。

3、按条件提取值

有时候只需要提取某个特定条件下的参数,比如现在想要提取创建时间为1591169490879的friendId

$.data.items[?(@.createTime ==1591169490879)].friendId

4、阵列提取

提取任何节点的某个key的值,比如提取friendId

$..friendId

结果为:

friend_all_1=1267735865761759234
friend_all_10=1267735868571942913
friend_all_2=1267735866185383938
friend_all_3=1267735867363983362
friend_all_4=1267735867825356802
friend_all_5=1267735864650268673
friend_all_6=1267735865363300353
friend_all_7=1267735866688700417
friend_all_8=1267735867003273217
friend_all_9=1267735868232204289
friend_all_ALL=1267735865761759234,1267735866185383938,1267735867363983362,1267735867825356802,1267735864650268673,1267735865363300353,1267735866688700417,1267735867003273217,1267735868232204289,1267735868571942913
friend_all_matchNr=10

_ALL下标是将所有元素组成一个list,像后续接口有时候参数是以数组形式来传参,这个函数就很有用,如果需要返回此函数,需要在json提取器中,勾选Compute concatenation var

5、提取多个值

json表达式:

$..['msg','friendId']

返回的变量如下:

two_1={"msg":"你好,我仰慕你的才华!","friendId":1267735865761759234}
two_10={"msg":"你好,我仰慕你的才华!","friendId":1267735868571942913}
two_2={"msg":"你好,我仰慕你的才华!","friendId":1267735866185383938}
two_3={"msg":"你好,我仰慕你的才华!","friendId":1267735867363983362}
two_4={"msg":"你好,我仰慕你的才华!","friendId":1267735867825356802}
two_5={"msg":"你好,我仰慕你的才华!","friendId":1267735864650268673}
two_6={"msg":"你好,我仰慕你的才华!","friendId":1267735865363300353}
two_7={"msg":"你好,我仰慕你的才华!","friendId":1267735866688700417}
two_8={"msg":"你好,我仰慕你的才华!","friendId":1267735867003273217}
two_9={"msg":"你好,我仰慕你的才华!","friendId":1267735868232204289}
two_ALL={"msg":"你好,我仰慕你的才华!","friendId":1267735865761759234},{"msg":"你好,我仰慕你的才华!","friendId":1267735866185383938},{"msg":"你好,我仰慕你的才华!","friendId":1267735867363983362},{"msg":"你好,我仰慕你的才华!","friendId":1267735867825356802},{"msg":"你好,我仰慕你的才华!","friendId":1267735864650268673},{"msg":"你好,我仰慕你的才华!","friendId":1267735865363300353},{"msg":"你好,我仰慕你的才华!","friendId":1267735866688700417},{"msg":"你好,我仰慕你的才华!","friendId":1267735867003273217},{"msg":"你好,我仰慕你的才华!","friendId":1267735868232204289},{"msg":"你好,我仰慕你的才华!","friendId":1267735868571942913}
two_matchNr=10

Jmeter之Json提取器详解(史上最全)的更多相关文章

  1. jmeter之json提取器详解

    Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...

  2. jmeter后置处理器之Json提取器详解

    此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值 ...

  3. Java集合中List,Set以及Map等集合体系详解(史上最全)

    https://blog.csdn.net/zhangqunshuai/article/details/80660974

  4. JMeter 后置处理器之正则表达式提取器详解

    后置处理器之正则表达式提取器详解   by:授客 QQ:1033553122 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 ...

  5. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

  6. Jmeter之JSON提取器应用

    在接口测试中有一个这样的场景:登录之后,需要进行昵称修改,怎么实现? 首先我们分别看下登录.昵称修改的接口说明: 以上业务中补充一点,昵称修改,还需要添加请求头Authorization传登录获取的t ...

  7. SpringBoot 默认json解析器详解和字段序列化自定义

    前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...

  8. [转载]DOS循环:bat/批处理for命令详解 (史上虽详尽的总结和说明~~)

    --本文来源于TTT BLOG: http://www.yoyotao.net/ttt/, 原文地址:http://www.yoyotao.net/ttt/post/139.html 前言: 虽然以前 ...

  9. 【转】htop使用详解--史上最强(没有之一)

    在管理进程时通常要借助一些工具,比较常用的就是ps和top了:不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法.一.安装htop htop工具在epel源中提 ...

随机推荐

  1. CompletableFuture的使用例子

    1. CompletableFuture的介绍 在Java8时被引入,在包java.util.concurrent下,是Java多线程编程中的一个类,扩展了Future中很多功能,Completabl ...

  2. DVWA-File Upload

    0x01 文件上传 File Upload,即文件上传漏洞,通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得可以通过上传webshell获取服务器权限,因此文件上传漏洞带来的危害常常是毁 ...

  3. android 百度地图v3.2.0获取实际地址

    百度地图升级到v3.2.0后,api发生挺大的变化的,但是下载的Demo却不是最新版本的. 在v3.2.0之前获取详细地址只要:option.setIsNeedAddress(true); 但是升级后 ...

  4. React:form

    表单控件: input 文档在介绍控件之前,先提到了react组件自身的一个特点:状态由state掌控,改变组件状态只能用setState方法. 而在html的表单里,input.radio.chec ...

  5. 一个导致JVM物理内存消耗大的Bug

    概述 最近我们公司在帮一个客户查一个JVM的问题(JDK1.8.0_191-b12),发现一个系统老是被OS Kill掉,是内存泄露导致的.在查的过程中,阴差阳错地发现了JVM另外的一个Bug.这个B ...

  6. Spring 中基于 AOP 的 @AspectJ

    Spring 中基于 AOP 的 @AspectJ @AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格. 通过在你的基于架构的 XML ...

  7. 【python爬虫】scrapy入门1--环境搭建

    Scrapy Day01 (1) 进入主目录,右键打开终端,创建项目 scrapy startproject xicidailiSpyder 进入项目目录 cd xicidailiSpyder/ 创建 ...

  8. JUC(4)---java线程池原理及源码分析

    线程池,既然是个池子里面肯定就装很多线程. 如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁 线程,如此一来会大大降低系统的效率.可能出现服务器在为每个请求创建新线程和销毁 ...

  9. 监控-zabbix

    1:什么是监控? 监控:安防的监控  看监控,事后追责 linux监控: 事前预警,数据分析 2:常见的linux监控命令 cpu             1 top 2 htop 3 uptime ...

  10. AES实现财务数据的加密解密存储

    需求背景 众所周知,金融行业有各种各样的财务报表,有些报表涉及到公司财务或经营相关的敏感数据,需要进行加密存储,只有掌握密钥的用户才能看到解密后的数据.注意,这里所说的加密并不是针对整个数据库或者表全 ...