JMeter后置处理器之正则提取
一、背景
在接口自动化或者性能测试中,当请求发送后,需要判断请求发送后,返回的内容是否与预期一致,所以需要进行断言,断言的方法很多,其中正则提取信息,应用非常广泛,具体如下。
二、正则提取器简介
1、正则提取器
启动jmeter
,添加线程组,右键线程组->添加->后置处理器->正则表达式提取器。
参数名称 | 描述 |
---|---|
Apply to | 作用范围的意思。选项详解如下所示: Main sample only - 仅作用于主节点的取样器Main sample(默认选择这个); Sub-samples only - 仅作用于子节点的取样器Sub-sample; Main sample and sub-samples - 作用于主节点的取样器及其子节点的取样器; JMeter Variable name to use - 仅作用于输入框中输入的变量,从指定变量值中提取需要的值。 |
Field to check | 要检查的响应字段,也就是在响应内容的哪个区域进行正则匹配。选项详解如下所示: Body :响应内容的主体内容(默认选择这个); Body (unescaped):所有html转义字符都被替换后的响应体。需要注意的是,jmeter不会根据上下文处理html转义字符,所以可能会有不正确替换,另外,该选项很影响性能,一般不建议选择; Body as a Document:通过Apache Tika,从各种类型的文档中提取文本。注意,该选项很影响性能,一般不建议选择; Response Headers:响应头; Request Headers: 请求头; URL:请求的url地址; Response Code :响应状态码; Response Message :响应消息。 |
Name of created variable | 引用名称,也就是用于存储正则表达式匹配的结果的变量名称,方便后续操作调用。 |
Regular Expression | 正则表达式,用于分析响应数据的正则表达式,除非使用$0$组,否则必须至少包含一组括号。 |
Template | 模板。如果正则表达式有多个提取结果,则结果是数组形式,模板$1$,$2$等,表示把解析到的第几个值赋给变量,并且从1开始匹配。 $1$ 表示 group1 $2$ 表示 group2 $0$ 表示整个匹配的整个表达式 |
Match No. (0 for Random) | 正则表达式匹配数据的结果可以看作一个数组,表示如何取值。 0代表随机取值; -1代表全部取值; 大于0的正数N-表示选择第N个匹配的值(1表示取第一个值)。 |
Default Value | 缺省值,如果表达式没有取得到值,就使用这个默认值 |
Use empty default value | 勾选此项后,如果未提取到值,则给变量赋予空字符串,而不是null |
2、正则表达式
注意正则表达式解析的响应结果,至少包含一组(),以捕获匹配的字符串,除非模板使用$0$。
字符 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
? | 匹配前面的子表达式零次或一次。 |
n 是一个非负整数。匹配确定的 n 次。 | |
n 是一个非负整数。至少匹配n 次。 | |
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 | |
^ | 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。 |
$ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
详情可以见参考中的链接。
三、实例演示
这里以请求百度为例,并提取出百度搜索的标题“百度一下,你就知道”。具体配置如下:
1、配置请求头
2、配置请求
3、配置正则提取
其结果如下图所示:
四、参考
1、官网:http://jmeter.apache.org/usermanual/regular_expressions.html
2、官网:http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor
3、天气预报:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getRegionCountry
4、正则表达式:https://www.w3cschool.cn/zhengzebiaodashi/regexp-syntax.html