文章目录
- 前言
- 一、Jmeter中使用正则表达式匹配
- 1、选择 RegExp Tester
- 2、在线程组------》添加------》后置处理器-------里面添加一个“正则表达式提取器”
- 二、关于正则表达式提取器里面字段的解释
- 参数说明
- 三、进一步解释Jmeter正则表达式提取器中的模板
- 1、当模板设置为$0$ 表示在匹配的结果中随机选择一个
- 2、使用Jmeter中正则表达式提取器模板匹配举例(详细讲解)
- 3、补充第二点的内容
- 4、网上另一种解释(目前没有实操过,先记录)
- 5、这里自己理解有一种说法
- 注意
- 总结
本章节主要讲解正则表达式提取器中的模板的含义和用法。
步骤:
1、选择 RegExp Tester
2、在线程组------》添加------》后置处理器-------里面添加一个“正则表达式提取器”:
注意:模板选项 和下面的 匹配数字选项 有点重复(理解起来有点重复),有时候可以不填写模板直接填写匹配数字,也是可以成功的。所以并不是两个都的填写。所以才觉得有点重复。
名称: 可以随意设置,最好有业务意义 注释: 可以随意设置,可以为空 Apply to: 应用范围,四个选项 Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器 Main sample only:匹配范围是当前的父取样器 Sub-sample only:仅匹配子取样器 JMeter Variable:支持对 Jmeter 变量值进行匹配 要检查的响应字段: 针对响应字段的不同部分进行匹配,共七个选项 主体:响应数据的主体部分,排除 Header 部分;Http 协议返回请求的主体部分就是 Body Body(unescaped):针对替换了转义码的 Body 部分 Body as a document:返回内容作为一个文档进行匹配 信息头:只匹配信息头部分的内容 URL:只匹配 URL 链接 响应代码:匹配响应代码,比如 HTTP 协议返回码 200 代表成功 响应信息:匹配响应信息,比如处理成功返回“成功”字样,或者“OK”字样 引用名称: 匹配出来的信息通过此名称进行访问,${引用名称} 正则表达式: 正则表达式提起器使用此串进行信息匹配 模板: 正则表达式可以设置多个模板进行匹配,在此指定运用哪个模板,$1$ 指第一个模板,$2$ 指定第二个模板,以此类推,$0$ 表示全文匹配 匹配数字: 在匹配过程中往往会出现多个值匹配的青睐,如果匹配数字为0,则代表随机取匹配值;不同模板可能会匹配一组值,那么可以用匹配数字来确定取这一组值中的哪一个;负数取所有值,可以与For Each Controller 一起使用来遍历 默认值: 如果没有匹配到可以指定一个默认值
下面是各参数值的含义:
模板(一个正则表达式就表示一个模板)
例如:一个句子当中含有3个正则表达式,
就表示有三个模板。
一个句子当中可以写很多个正则表达式
1、当模板设置为$0$ 表示在匹配的结果中随机选择一个
2、使用Jmeter中正则表达式提取器模板匹配举例(详细讲解)
例如要提取响应结果里的token字段及sex字段(响应内容为:
"token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0,"userName":"12548650"),提取器如下设置:
"token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0,"userName":"12548650"
在正则表达式里面可以写成:"token":"(.*?)","sex":(.*?),"userName"
正则表达式: 数据提取器,一般简单的通用语法就是:左边界(.*?)右边界,左右边界就是为了能准确定位到想匹配的内容,如最上面图的 "token":"(.*?)","sex":(.*?),"userName", 其中"token":"以及","sex": 和,"userName"这3个就是左右边界,(.*?) 是替换了想要提取的内容,里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)。建议均使用非贪婪匹配,除非特殊情况。
模板: 对应正则表达式提取器类型,样式为:$n$。
若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,即("token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0,"userName")。
若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,即(83EEAA887F1D2F1AA1CDA9E197810992) ,
若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容,即(0),
若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,即(83EEAA887F1D2F1AA1CDA9E1978109920)。
注意:这个模板的意思也就是把正则表达式看成模板,有几个正则表达式,就是几个模板。
匹配数字: 正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据。当为 1 时,表示返回匹配结果数组的第一个元素。当为负数(-1,-2,-100都可以)时,表示返回全部元素,并且同时会返回一个元素总数的变量token_matchNr,在引用时:通过${token_1}的方式来取第1个匹配的内容,${token_2}来取第2个匹配的内容。
缺省值: 匹配失败时的默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。正则结果查看:
如何查看提取到了想要的内容呢,这里就需要提到另外一个后置处理器: Debug PostProcessor
该元件就为调试所用,一般用于查看变量值,添加方法同正则表达式提取器。
3、补充第二点的内容:
正则表达式提取器说明:
Apply to: 应用范围(一般就选择默认的Main sample only),就算有重定向,一般也是提取最终那个请求的接口。
要检查的响应字段: 样本数据源。
主体: 接口响应主体内容,一般要提取普通http响应结果的数据,都勾选这个。
信息头:响应头的所有内容。
Request Headers:请求头的所有内容。
url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数(即只能匹配protocol(协议)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)。
响应代码:http响应代码,如101,200,302,404,501等。
响应信息:http响应代码对应的响应信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)。
引用名称: 其他地方引用时的变量名称,名称只能是一个,引用方法:${token}。如图
参考博主:jmeter 正则表达式学习(一)--使用详解_linapursue的博客-CSDN博客
参考博主:Jmeter—正则表达式提取器:模板&匹配数字详解_jmeter正则匹配_zhangkezkzk的博客-CSDN博客
4、网上另一种解释(目前没有实操过,先记录)
举例:有以下这些字段
{
"resCode": "000",
"resMsg": "ok",
"prize": "prize1"
}
{
"resCode": "000",
"resMsg": "ok",
"prize": "prize2"
}
{
"resCode": "000",
"resMsg": "ok",
"prize": "prize3"
}
正则表达式为:"prize": "(.*?)"
这个表达式可以匹配三个prize
现在如果我要拿取第二个prize,也就是要拿到prize2,那么模板的值应该填写:$2$
5、这里自己理解有一种说法:
【不要考虑个人返回体格式是什么,能够看出是能匹配到3个prize,那我填写了$1$表示将规则中第一个括号的模式匹配到的内容赋给变量prize】
因为在这里,匹配了3次,那么相当于这个括号里面的正则表达式被用了3次,$1$这里说的是将规则中第一个括号的模式匹配到的内容,匹配是从上到下的匹配,那么第一次肯定就会匹配到prize1
参考博主:jmeter正则表达式提取html,Jmeter 中正则表达式提取器Regular expression Extractor_刘二婷ttt的博客-CSDN博客
注意:
在其他例子中,正则表达式第一个或者第n个表达式匹配到的个数并不是唯一一个,那么这个时候,就要利用匹配数字来限定自己到底拿取的是哪一个。 那么这个时候就可以得出结论,匹配数字是可以是进一步的筛选。
参考博主: Jmeter—正则表达式提取器:模板&匹配数字详解_jmeter正则匹配_zhangkezkzk的博客-CSDN博客