Jmeter基础入门教程【10】--常用功能详解:JSON提取器

前言
作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

一、JSON提取器

前言:比较复杂,学会了给自己加个鸡腿儿~~~

1. 作用

JSON是目前大多数接口响应内容的数据格式

在接口测试中,不同接口之间可能会有数据依赖,在Jmeter中可以通过后置处理器来提取接口的响应内容,JSON提取器是其中一个可以用来提取响应内容的元件
在这里插入图片描述

2. 参数详解

在这里插入图片描述

  • 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):如果匹配到多个值,则将它们都连接卡里,不同值之间用都好分割;变量会自动命名为_ALL
  • Default Values:缺省值,匹配不到值的时候取该值,可写error;多个值用分号分割;非必传

初学者一开始可能不太理解这些参数,下面我们来举例子啦~~

3. JSON 提取器实栗
入门实栗:

下面以这个地址的接口举例:http://api.yesapi.cn/docs.php?keyword=%E4%BC%9A%E5%91%98&channel=api (可以在这个网站注册账号免费使用上面的测试接口)

我们一次调用【会员注册】->【会员登录】->【会员登录检测接口】->【获取会员个人资料】->【会员退出登录】这几个接口。

【会员登录】是后面几个接口的前置接口,需要提取获取用户的token、uuid这两个字段给后面几个接口使用

创建的测试计划如下(应用之前学到的知识,请求默认值里设置了服务器以及下面几个请求都需要的请求参数app_key;用户自定义变量里定义了两个变量username和password用于会员注册及会员登录时使用):
在这里插入图片描述

我们来重点关注JSON提取器提取的内容:

会员登录的响应信息如下:

{
    "ret":200,
    "data":{
        "err_code":0,
        "err_msg":"",
        "uuid":"AAC71046CFA51B8A55D4367652791D66",
   "token":"8BDE45E59ABB1D8651CB80C73283A49133EA628BAE8BE423215C1DE8ECC40810",
        "role":"user"
    },
    "msg":"V3.3.0 YesApi App.User.Login 2022-03-19 13:22:24 hd215"
}

提取token(相对路径方式):
在这里插入图片描述
提取uuid(绝对路径方式):
在这里插入图片描述

其他接口调用token、uuid
在这里插入图片描述

进阶实栗

测试接口:http://api.yesapi.cn/docs-api-App.User.GetList.html

创建测试计划:
在这里插入图片描述
查看会员列表的响应结果如下:

{
    "ret":200,
    "data":{
        "err_code":0,
        "err_msg":"",
        "users":[
            {
                "uuid":"AAC71046CFA51B8A55D4367652791D66",
                "username":"xey04",
                "role":"user",
                "role_desc":"普通会员",
                "status":0,
                "status_desc":"正常",
                "reg_time":"2022-03-19 13:22:24",
                "ext_info":{
                    "yesapi_avatar":"",
                    "yesapi_nickname":"",
                    "yesapi_email":"",
                    "yesapi_sex":"",
                    "yesapi_real_name":"",
                    "yesapi_points":0,
                    "yesapi_reg_source":"",
                    "yesapi_reg_note":"",
                    "yesapi_mobile":"",
                    "yesapi_expiration_time":""
                }
            },
            {
                "uuid":"97F22D1CD99D17C2CF29510C728F6570",
                "username":"xey03",
                "role":"user",
                "role_desc":"普通会员",
                "status":0,
                "status_desc":"正常",
                "reg_time":"2022-03-19 13:18:56",
                "ext_info":{
                    "yesapi_avatar":"",
                    "yesapi_nickname":"",
                    "yesapi_email":"",
                    "yesapi_sex":"",
                    "yesapi_real_name":"",
                    "yesapi_points":0,
                    "yesapi_reg_source":"",
                    "yesapi_reg_note":"",
                    "yesapi_mobile":"",
                    "yesapi_expiration_time":""
                }
            },
            {
                "uuid":"770A6910AF264AEB73F6ECAFEB5BBFB6",
                "username":"xey02",
                "role":"user",
                "role_desc":"普通会员",
                "status":0,
                "status_desc":"正常",
                "reg_time":"2022-03-19 13:15:35",
                "ext_info":{
                    "yesapi_avatar":"",
                    "yesapi_nickname":"",
                    "yesapi_email":"",
                    "yesapi_sex":"",
                    "yesapi_real_name":"",
                    "yesapi_points":0,
                    "yesapi_reg_source":"",
                    "yesapi_reg_note":"",
                    "yesapi_mobile":"",
                    "yesapi_expiration_time":""
                }
            },
            {
                "uuid":"690815A62298F01009010BA062773A9F",
                "username":"xey01",
                "role":"user",
                "role_desc":"普通会员",
                "status":0,
                "status_desc":"正常",
                "reg_time":"2022-03-19 13:14:03",
                "ext_info":{
                    "yesapi_avatar":"",
                    "yesapi_nickname":"",
                    "yesapi_email":"",
                    "yesapi_sex":"",
                    "yesapi_real_name":"",
                    "yesapi_points":0,
                    "yesapi_reg_source":"",
                    "yesapi_reg_note":"",
                    "yesapi_mobile":"",
                    "yesapi_expiration_time":""
                }
            },
            {
                "uuid":"24249E71ABBD72D7C1DE8B3E95A0FBBE",
                "username":"xey",
                "role":"user",
                "role_desc":"普通会员",
                "status":0,
                "status_desc":"正常",
                "reg_time":"2022-03-19 13:08:25",
                "ext_info":{
                    "yesapi_avatar":"",
                    "yesapi_nickname":"",
                    "yesapi_email":"",
                    "yesapi_sex":"",
                    "yesapi_real_name":"",
                    "yesapi_points":0,
                    "yesapi_reg_source":"",
                    "yesapi_reg_note":"",
                    "yesapi_mobile":"",
                    "yesapi_expiration_time":""
                }
            }
        ],
        "total":5
    },
    "msg":"V3.3.0 YesApi App.User.GetList 2022-03-19 13:44:53 hd215"
}

提取单个值:

JSON Path expressions提取结果
$.data.total3
$…total3
$…users[0].roleuser
$…uuid24249E71ABBD72D7C1DE8B3E95A0FBBE
$.data.usersp[0].ext_info.yesapi_poins0

注意:

  • 如果匹配到多个值(如:$…uuid),也只能提取到一个值

  • 如果像提取到所有uuid,可以将JSON提取器中的参数“Match No.(0 for Random)”设置成-1

    还会返回匹配到了多少个值${uuid_matchNr},调用变量时,应使用${uuid_1}、${uuid_2}…

利用切片提取单个值:

JSON Path expressions提取结果
$…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

下面有四种写法,记住一种即可

JSON Path expressions提取结果
$.data.users[*].role提取所有users下面的role值
$.data.users…role提取所有users下面的role值
$…reg_time提取所有reg_time值
$…[*].reg_time提取所有reg_time值

按条件提取值:

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

JSON Path expressions提取结果
$…users[?(@.uuid)]提取users里面包含uuid字段的记录
$…users[?(@.reg_time>‘2020-06-01’)]提取reg_time字段大于2020-06-01的记录
$…users[?(@.role_decs=~/.*会员.*?/i)]提取role_decs字段包含会员的记录
$…users[?(@.status == 0)]提取status字段等于0的记录

@ 代表当前节点,像上面四个例子,@代表users整个列表字段

=~ 后面跟正则表达式,如果想提取包含指定字符的值,可以使用此正则/.*指定字符串.*?/i

(i 代表大小写不敏感)

提取指定的多个字段:

JSON Path expressions提取结果
$…users[0].[‘uuid’,‘username’]提取user里第一个value里的uuid和username

一个JSON提取器提取多个JSON Path:
在这里插入图片描述

测试结果如下:

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:
在这里插入图片描述
测试结果如下:

多了一个变量uuid_ALL,其值为所有提取到的uuid用逗号拼接

uuid_1=6D5EDCB459F0917A98106E07D5438C58
uuid_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid_ALL=6D5EDCB459F0917A98106E07D5438C58,0164DC0680F84DCE40D3DD4A36640ECA,079BF6BB82AFCFC7084F96AECAF0519F
uuid_matchNr=3
  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值