jmeter_06_用户参数_JSON 提取器_important

  • ---------------25---------------
  • 线程组下的用户参数 优先级高于 测试计划里的用户自定义变量
  • HTTP 请求下的用户参数 优先级高于 线程组下的用户参数
  • 若有重名参数,优先取优先级高的用户参数
  • 用户参数用户自定义变量重名,则优先取用户参数的值;因为配置元件执行完再到前置处理器,所以前置处理器的值会覆盖配置元件的值
  • 10个请求的响应内容都是不同;因为每次发送一次 HTTP 请求,都会调用一次用户参数,所以它的值是 动态生成
  • 拓展:如果想要全局生效的且只生成一次的用户自定义变量,可使用配置元件-用户自定义变量,可参考

----------------------------26_JSON 提取器

为什么要用 JSON 提取器

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

 

JSON 提取器的应用场景

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

 

--------------

 

 

 

 

 

 

 ------------------简单提取json 一个字段----使用 JSON 提取器时的一个流程

 

 

 

 

 

 

知识点

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

 ------------------------复杂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
            }
        ]
    }
}
View Code

 

 

 

重点

  • 如果匹配到多个值(像 $..uuid ),也只能提取到一个值       为什么回出现多个呢,因为前面的key 可以不一样哟;但实际上我通常会用绝对路径来匹配
  • 如果想提取匹配到的所有 uuid,可以设置为 -1,结果如下图

还会告诉你匹配了多少个值 ${uuid_matchNr} ,记住,调用变量时,不再是 ${uuid} 而是 ${uuid_1} 、 ${uuid_2}

 

 

提取多个值

  • 四种写法类似,选一种方法自己熟记即可
  • 重点:提取多个值,提取器的 Match No. 必须填 -1

 ------------

$.data.users[*].role

提取所有 role 字段值

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

$..users..role_desc

提取所有 role_desc 字段值

 

$..reg_time

提取所有 reg_time 字段值

 

$..[*].username

提取所有 username 字段值

 

 

按条件提取值

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

 

语法格式

[?(expression)]

 

 

栗子

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

 

@

代表当前节点,像上面的四个栗子,@代表 users 这个列表字段

 

=~

  • 后面跟正则表达式,如果想提取包含指定字符的值,可以使用此正则: /.*指定字符串.*?/i 
  •  i  代表大小写不敏感

 

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

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

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

 

测试结果

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

 

 

 

 

 

 

 

posted @ 2021-08-21 21:24  walkerpython  阅读(54)  评论(0编辑  收藏  举报