jmeter之Json

本文详细介绍了如何在JMeter中使用JSON Path提取器进行数据提取,包括从JSON响应中提取单个值、多个值、按条件提取以及数组取值等,并提供了具体的JsonPath表达式示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON( Java Script Object Notation)是一种轻量级的数据交換格式,它是基于 Ecmascript的一个子集。

JSN语法规则——JSON语法是 Javascript:对象表示语法的子集。

  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON名称/值对——JSON数据的书写格式是:名称值对。

名称值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:

1 I"firstname": "John"

JSON值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

从结果中根据键值对获取响应的值

添加后置处理器,Jsom Path Extraot

分别填写变量名称,正则表达式(下图中表示为obj数组中第二个值的hostoomld的值

 

 

定制」SON响应结果断言

自己编写 Beanshell脚本,来解析接口返回的ison值

1、将json- -simple-11jlar存放在 Jmeter的ext/ib目录下

2、增加后置处理器 Bean Shell Postprocessor

3、根据自己潟要的规则,来获取son串中的值

 

json 提取器表达式:

$  :根节点

@  :当前节点

.or[ ] :子节点

..  :所有符合条件的节点

*  :所有节点

[ ] :迭代器标示,如数组下标

[,] :支持迭代器中做多选

?()  :支持过滤操作

()  :支持表达式计算

0

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

  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": 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值