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

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

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/uestc2007/p/14706081.html
Copyright © 2011-2022 走看看