zoukankan      html  css  js  c++  java
  • jmeter JSON 提取器

    为什么要用 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
    • 多个值用 ; 分隔
    • 非必传

    测试计划树结构

     

     响应结果:

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

    相对路径的方式

    提取 action

    绝对路径的方式

    其他接口调用 packageName、action

    知识点

    • 提取某个特定值的方式有两种:绝对路径、相对路径
    • 提其他接口可以通过 ${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.total 3
    $..total 3
    $..users[0].role user
    $..uuid 079BF6BB82AFCFC7084F96AECAF0519F
    $.data.users[0].ext_info.yesapi_points 0

    重点

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

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

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

    $..users..role_desc

    提取所有 role_desc 字段值

    $..reg_time

    提取所有 reg_time 字段值

    $..[*].username

    提取所有 username 字段值

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

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

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

    测试结果

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

    勾选 Compute concatenation var 的栗子

    JSON 提取器

    测试结果

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

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

    JSON 提取器

    测试结果

    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控制器遍历获取:

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

  • 相关阅读:
    性格-汉语-词语:坚忍
    汉语-词语:坚强
    品质-汉语-成语:坚持不懈
    was系统错误日志大量出现标识符缺失
    【iOS】UIWebView的HTML5扩展之canvas篇
    OA权限树搭建 代码
    linux下的环境文件设置说明
    怎样把多个Android Project打包成一个APK
    nyoj43 24 Point game(DFS)
    【西祠日志】【07】努力努力,找资料,思考,怎么做asp图片上传
  • 原文地址:https://www.cnblogs.com/uestc2007/p/14706081.html
Copyright © 2011-2022 走看看