前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jmeter系列(27)- 详解正则提取器

Jmeter系列(27)- 详解正则提取器

作者头像
小菠萝测试笔记
发布2020-06-28 10:49:30
1.6K0
发布2020-06-28 10:49:30
举报
文章被收录于专栏:自动化、性能测试

有了 JSON 提取器为啥还要用正则提取器?

  • JSON 提取器只针对接口返回的响应内容
  • 如果想提取的是响应头、请求头的值,而非响应内容的值呢?
  • 这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值

需知

  • 正则表达式很多内容,在这篇文章中不会展开详细说的哦,主要还是说提取器的使用
  • 想详细学习正则表达式可以看这篇文章:待补充

正则提取器

我们通过实际栗子去讲述理论知识点

正则提取器界面介绍

字段含义

字段

含义

Apply to

应用范围,选默认的 main sample only 就行了

Field to check

可提取的字段

Names of created variables

接收提取值的变量名 必传

Regular Expression

正则表达式

Template

从找到的匹配项中创建字符串的模板

Match No.(0 for Random)

取第几个值 0:随机,默认 -1:所有 1:第一个值 非必传

Default Value

缺省值,匹配不到值的时候取该值 非必传

Use empty default value

勾选后,提取不到值时,则返回空字符串

  • 接收提取值的变量名
  • 必传

Regular Expression 正则表达式 Template 从找到的匹配项中创建字符串的模板 Match No.(0 for Random)

  • 取第几个值
  • 0:随机,默认
  • -1:所有
  • 1:第一个值
  • 非必传

Default Value

  • 缺省值,匹配不到值的时候取该值
  • 非必传

Use empty default value 勾选后,提取不到值时,则返回空字符串

Template

  • 如果一条正则表达式有多个提取结果,则提取结果是数组形式
  • 模板 12.....表示把解析到的第几个值赋给变量,从 1 开始匹配
  • 0 表示整个表达式匹配的内容(后续具体看栗子)
  • 若只有一个结果,只能是1

Field to check

属性

含义

Body

响应体,不包括响应头;最常用

Body (unescaped)

响应体,替换了所有HTML转义符;不建议使用

Body as a Document

从不同类型的文件中提取文本;影响性能

Request Headers

请求头

Response Headers

响应头

URL

URL

Response Code

响应码

Response Message

响应信息

Body
Request Headers
Response Headers
URL
Response Code、Message

入门栗子

栗子的前提

这个栗子,我都会以这个地址的接口来完成 JSON 提取器的实战栗子,大家可以注册个账号玩一玩哦

http://api.yesapi.cn/docs.php?keyword=%E4%BC%9A%E5%91%98&channel=api

测试计划树结构

下面多个栗子都以这个测试计划为基础哦

提取某个特定的值的栗子

登录接口响应

登录是执行其他接口的前置接口,所以要获取用户登录后的 token、uuid

提取 token
提取 uuid
其他接口调用 token、uuid

知识点

  • 提其他接口可以通过 这种格式,来获取提取到的值

${var}

  • 里面写匹配规则,用于解析正则表达式

( )

  • 表示匹配任意长度的任意字符,这也是最常用的正则表达式

.*?

  • 一般 和 (.*?) 能够满足我们 80%的使用场景

(.+?)

一般正则表达式都可以写成下面两种

左边界(.+?)右边界

左边界(.*?)右边界

举更多栗子前的一些话

  • 上面讲的是使用正则提取器时的一个流程,也是实际工作中最简单的栗子
  • 在实际项目中,我们可能会出现一条正则表达式有多个提取结果的情况
JSON 字符串

下面的栗子都以这个 JSON 字符串为基础,从里面提取结果

这 JSON 字符串也是某个接口的响应内容,货真价实,感兴趣也可以自己玩一玩:http://api.yesapi.cn/docs-api-App.User.GetList.html

代码语言:javascript
复制
{
    "ret": 200,
    "msg": "V2.5.1 YesApi App.User.GetList",
    "data": {
        "total": 4,
        "err_msg": "",
        "err_code": 0,
        "users": [
            {
                "role": "user",
                "status_desc": "正常",
                "reg_time": "2020-06-22 20:45:05",
                "role_desc": "普通会员",
                "ext_info": {
                    "yesapi_nickname": "",
                    "yesapi_points": 0
                },
                "uuid": "0564CE592B4CE914365D8922F6FC4CEC",
                "username": "luojunjiess286",
                "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": "luojunjiessa",
                "status": 0
            },
            {
                "role": "admin",
                "status_desc": "正常",
                "reg_time": "2020-03-23 22:48:32",
                "role_desc": "管理员",
                "ext_info": {
                    "yesapi_nickname": "",
                    "yesapi_points": 0
                    "yesapi_reg_source": ""
                },
                "uuid": "079BF6BB82AFCFC7084F96AECAF0519F",
                "username": "luojunjiess",
                "status": 0
            }
        ]
    }
}

一条正则表达式只有一个提取结果的栗子

什么叫只有一个提取结果

就是正则表达式里只有一个 ( ) ,且 Match No. 不是 -1

未填写模板

提取器
测试结果
代码语言:javascript
复制
uuid1=
uuid1_g=1
uuid1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid1_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点

如果正则匹配到值,但是没有填模板,则返回

$0$

提取器
测试结果
代码语言:javascript
复制
uuid2="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid2_g=1
uuid2_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid2_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
  • 模板其实返回的就是 uuid2_g0 的值

$0$

  • 返回了整个正则表达式,不只是 内匹配到的值

( )

$1$

提取器
测试结果
代码语言:javascript
复制
uuid3=0564CE592B4CE914365D8922F6FC4CEC
uuid3_g=1
uuid3_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid3_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点
  • 模板其实返回的就是 uuid2_g1 的值

$1$

  • 仅返回 内匹配到的值

( )

$2$

提取器
测试结果
代码语言:javascript
复制
uuid4=null
uuid4_g=1
uuid4_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid4_g1=0564CE592B4CE914365D8922F6FC4CEC
知识点

2 模板并不存在,其实就是 uuid4_g2 变量不存在,即使勾了使用空默认值,也返回 null,

总结

  • 其实 uuid 在 JSON 字符串中有三个可匹配到的值,如果不填写匹配数字 ,则会随机取一个 uuid 并返回

Match No.

  • 像上述的几个栗子,都填了 1 ,所以都返回了第一个匹配到的 uuid

一条正则表达式有多个提取结果的栗子

什么叫有多个提取结果

有两种情况

  • 一条表达式有多个

( )

  • 一个 匹配到多个值,且 Match No 填了 -1

( )

一个 ( ) 匹配到多个值

提取器
测试结果

手动分成四部分

代码语言:javascript
复制
uuid1_1=0564CE592B4CE914365D8922F6FC4CEC
uuid1_1_g=1
uuid1_1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC"
uuid1_1_g1=0564CE592B4CE914365D8922F6FC4CEC

uuid1_2=0164DC0680F84DCE40D3DD4A36640ECA
uuid1_2_g=1
uuid1_2_g0="uuid":"0164DC0680F84DCE40D3DD4A36640ECA"
uuid1_2_g1=0164DC0680F84DCE40D3DD4A36640ECA

uuid1_3=079BF6BB82AFCFC7084F96AECAF0519F
uuid1_3_g=1
uuid1_3_g0="uuid":"079BF6BB82AFCFC7084F96AECAF0519F"
uuid1_3_g1=079BF6BB82AFCFC7084F96AECAF0519F

uuid1_matchNr=3

知识点

  • 一个 ( ) 匹配到多个值的场景 ,一般会结合 ForEach控制器,可以循环将提取到的值赋予到 HTTP 请求中
  • 可以看看下图的小栗子,这里不展开讲,后面会再详细讲解
结构树 + ForEach 控制器
查看结果树

一条表达式有多个( ),且模板为空

提取器
测试结果
代码语言:javascript
复制
info1=
info1_g=2
info1_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info1_g1=0564CE592B4CE914365D8922F6FC4CEC
info1_g2=luojunjiess286

一条表达式有多个( ),且只有一个模板

提取器
测试结果
代码语言:javascript
复制
info2=0564CE592B4CE914365D8922F6FC4CEC
info2_g=2
info2_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info2_g1=0564CE592B4CE914365D8922F6FC4CEC
info2_g2=luojunjiess286
知识点
  • info2 拿的就是 info2_g1 的值
  • 获取的是第一个 ( ) 匹配到的值, 2 获取的是第二个 ( ) 匹配到的值,以此类推

$1$

一条表达式有多个( ),且有两个模板

提取器
测试结果
代码语言:javascript
复制
info3=0564CE592B4CE914365D8922F6FC4CECluojunjiess286
info3_g=2
info3_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info3_g1=0564CE592B4CE914365D8922F6FC4CEC
info3_g2=luojunjiess286

info4=0564CE592B4CE914365D8922F6FC4CEC,luojunjiess286
info4_g=2
info4_g0="uuid":"0564CE592B4CE914365D8922F6FC4CEC","username":"luojunjiess286"
info4_g1=0564CE592B4CE914365D8922F6FC4CEC
info4_g2=luojunjiess286

正则表达式中有多个 ( ) 时的总结

  • 如果其中一个 匹配不到元素,那也无法获取到值

( )

  • 引用名称、匹配数字、缺省值三个字段也只需要填一个值即可,不需要跟 的数量一致

( )

  • 多个模板( )的时候,可以用空格、, 、. 、 - 连接模板,最终会显示在变量上,如:info4

$1$$2$

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有了 JSON 提取器为啥还要用正则提取器?
  • 需知
  • 正则提取器
  • 正则提取器界面介绍
    • 字段含义
      • Template
        • Field to check
          • Body
          • Request Headers
          • Response Headers
          • URL
          • Response Code、Message
      • 入门栗子
        • 栗子的前提
          • 测试计划树结构
            • 提取某个特定的值的栗子
              • 登录接口响应
              • 提取 token
              • 提取 uuid
              • 其他接口调用 token、uuid
            • 知识点
              • 一般正则表达式都可以写成下面两种
              • JSON 字符串
              • 什么叫只有一个提取结果
          • 举更多栗子前的一些话
          • 一条正则表达式只有一个提取结果的栗子
            • 未填写模板
              • 提取器
              • 测试结果
              • 知识点
            • $0$
              • 提取器
              • 测试结果
              • 知识点
            • $1$
              • 提取器
              • 测试结果
              • 知识点
            • $2$
              • 提取器
              • 测试结果
              • 知识点
            • 总结
              • 什么叫有多个提取结果
          • 一条正则表达式有多个提取结果的栗子
            • 一个 ( ) 匹配到多个值
              • 提取器
              • 测试结果
            • 知识点
              • 结构树 + ForEach 控制器
              • 查看结果树
            • 一条表达式有多个( ),且模板为空
              • 提取器
              • 测试结果
            • 一条表达式有多个( ),且只有一个模板
              • 提取器
              • 测试结果
              • 知识点
            • 一条表达式有多个( ),且有两个模板
              • 提取器
              • 测试结果
            • 正则表达式中有多个 ( ) 时的总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档