jmeter JSON 提取器

摘要:
为什么使用JSON提取器JSON是目前大多数接口响应内容的数据格式。在接口测试中,不同接口之间可能存在数据依赖性。在Jmeter中,可以通过后处理器提取接口的响应内容。JSON提取器是可用于提取响应内容的组件之一。JSON提取器的应用场景提取特定值。提取多个值。根据条件提取值列表。JSON提取器接口引入了字段含义。现场结果适用于应用范围。选择默认主样本

为什么要用 JSON 提取器

  • JSON 是目前大多数接口响应内容的数据格式
  • 在接口测试中,不同接口之间可能会有数据依赖,在 Jmeter 中可以通过后置处理器来提取接口的响应内容
  • JSON 提取器是其中一个可以用来提取响应内容的元件

JSON 提取器的应用场景

  1. 提取某个特定的值
  2. 提取多个值
  3. 按条件取值
  4. 提取值组成的列表

JSON 提取器

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

测试计划树结构

 jmeter JSON 提取器第3张

 响应结果:

{
   "status":"1",
   "code":"1",
   "msg":"成功",
   "probeId":"10000005213103",
   "strategyVersion":null,
   "startTime1":null,
   "endTime1":null,
   "startTime2":null,
   "endTime2":null,
   "cycle":null,
   "heartCycle":null,
   "eventCycle":null,
   "kafkaParam":"iwdtv.iwangding.com:39091,iwdtv.iwangding.com:39092,iwdtv.iwangding.com:39093,iwdtv.iwangding.com:39094|32|gnsts2017",
   "ext":"1",
   "serverTime":1619432337,
   "enable":"0",
   "city":"2601",
   "area":"40303",
   "opt":"M",
   "province":"26",
   "itemList":null,
   "strategy":
   {
      "turnon":1,
      "excTime":8,
      "minMemRate":5,
      "packageName":"com.iwangding.monitorservicetest",
      "action":"com.iwangding.idle.test",
      "category":"",
      "broadcastAction":""
   }
}

调用接口后,所以要获取 packageName、action

提取 packageName

相对路径的方式

jmeter JSON 提取器第4张

提取 action

绝对路径的方式

jmeter JSON 提取器第5张

其他接口调用 packageName、actionjmeter JSON 提取器第6张

知识点

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

1)json提取数组

匹配到多个值的场景 ,一般会结合 ForEach控制器(遍历获取),可以循环将提取到的值赋予到 HTTP 请求中

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.total3
$..total3
$..users[0].roleuser
$..uuid079BF6BB82AFCFC7084F96AECAF0519F
$.data.users[0].ext_info.yesapi_points0

重点

  • 如果匹配到多个值(像 $..uuid ),也只能提取到一个值
  • 如果想提取匹配到的所有 uuid,可以设置为 -1,结果如下图

jmeter JSON 提取器第7张

还会告诉你匹配了多少个值 ${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 字段值

jmeter JSON 提取器第8张

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

$..users..role_desc

提取所有 role_desc 字段值

jmeter JSON 提取器第9张

$..reg_time

提取所有 reg_time 字段值

jmeter JSON 提取器第10张

$..[*].username

提取所有 username 字段值

jmeter JSON 提取器第11张

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

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

$..users[0].['uuid','username']

测试结果

new_1={"uuid":"6D5EDCB459F0917A98106E07D5438C58","username":"luojunjiessb"}

勾选 Compute concatenation var 的栗子

JSON 提取器

jmeter JSON 提取器第12张

测试结果

uuid_1=6D5EDCB459F0917A98106E07D5438C58
uuid_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid_ALL=6D5EDCB459F0917A98106E07D5438C58,0164DC0680F84DCE40D3DD4A36640ECA,079BF6BB82AFCFC7084F96AECAF0519F
uuid_matchNr=3

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

JSON 提取器

jmeter JSON 提取器第13张

测试结果

uuid1_1=6D5EDCB459F0917A98106E07D5438C58
uuid1_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid1_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid1_matchNr=3
uuid2_1=6D5EDCB459F0917A98106E07D5438C58
uuid2_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid2_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid2_matchNr=3

 利用 FOrEach控制器遍历获取:

jmeter JSON 提取器第14张

 将获取的值传递给请求参数

免责声明:文章转载自《jmeter JSON 提取器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发面试题整理Mac OS—苹果搭建Android开发环境下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用JMETER进行REST API测试

我确定你在这里是因为你需要加载测试Json Rest API。这并不奇怪,因为Rest API现在越来越受欢迎。 这本指南的目的:帮助您进行负载测试一个Json的REST API通过一个具体的例子,OctoPerf的Json的REST API。 本指南将完全为您提供以下知识: 使用Http POST请求处理Rest API API登录, 从Json...

jmeter服务器监控插件下载配置

jmeter想要监控服务器CPU、内存、磁盘、网络等相关资源需要借助plugins插件 下载jmeter性能监控插件 1.下载jmeterPlugins-Standard和jmeterPlugins-Extras https://jmeter-plugins.org/downloads/old/ 2.下载后两个压缩包解压后,将文件中的jar文件复制粘贴放...

Android 蓝牙开发(1)

普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道...

jmeter测试报告分析

Jmeter报告解析  1、Aggregate Report 解析  Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。  如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Re...

python 获取cookie,发送请求

获取cookie思路: 1、确认登录login接口,及登录所需参数(包括用户名、密码、uuid等参数); 2、确认uuid等参数的获取接口(一般是get请求); 3、凭借uuid等参数向login接口发起请求,获取响应报文中的cookie(不同的网站平台可能表示方法不一样,需区别对待); 示例代码: # -*- coding:UTF-8 -*- impor...

postgresql-无序uuid tps测试

# postgresql-无序uuid tps测试## 无序uuid对数据库的影响由于最近在做超大表的性能测试,在该过程中发现了无序uuid做主键对表插入性能有一定影响。结合实际情况发现当表的数据量越大,对表插入性能的影响也就越大。### 测试环境PostgreSQL创建插入脚本,测试各种情况的tps。数据库版本:PostgreSQL 10.4 (Arte...