-
jmeter关联正则表达式
- Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
- Main sample only:仅作用于父节点的取样器
- Sub-samples only:仅作用于子节点的取样器
-JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
要检查的响应字段:需要检查的响应报文的范围 - 主体:响应报文的主体
- Body(unescaped):主体,响应的主体内容且替换了所有的html转义符,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用
- Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能
- Response Headers:响应信息头
- Request Headers:请求信息头
- URL:统一资源定位符,即Internet上用来描述信息资源的字符串
- Response Code:响应状态码,比如200、404等
- Response Message:响应信息
如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作(也就是常说的关联/将上一个请求的响应结果作为下一个请求的参数);
在Jmeter中,可以利用正则表达式提取器来帮助我们完成这一动作。
一、正则表达式
下面是常用的正则表达式操作符:
字符 | 作用 |
---|---|
$ | 匹配输入字符串的结尾位置。 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 配前面的子表达式一次或多次。 |
. | 匹配除换行符 \n 之外的任何单字符。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 |
|将下一个字符标记为或特殊字符、或原义字符。 | |
^ | 匹配输入字符串的开始位置。 |
\w | 匹配字母、数字、下划线或汉字 |
{n} | n 是一个非负整数。匹配确定的 n 次。 |
{n,} | n 是一个非负整数。至少匹配n 次。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
贪婪匹配和非贪婪匹配 | |
*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。 |
例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的章节标题。该文本在您的文档中如下:
<H1>Chapter 1 - 介绍正则表达式</H1>
贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。
<.*?>
非贪婪:如果您只需要匹配开始和结束 H1 标签,下面的非贪婪表达式只匹配<H1>。
<.*?>
如果只想匹配开始的 H1 标签,表达式则是:
<\w+?>
通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。
二、正则表达式提取器
右键添加后置处理器→正则表达式提取器,正则表达式提取器界面如下:
说明
后置处理器:在请求结束或者返回响应结果时发挥作用
正则表达式提取器:允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。
APPly to:作用范围(返回内容的断言范围)
引用名称(Reference Name):Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名
引用方法:引用方法:${引用名称}
正则表达式(Regular Expression):使用正则表达式解析响应结果,“()”表示提取字符串中的部分值,请不要使用“||”,除非你本身需要匹配这个字符。
模板(Template):从匹配的结果中创建一个字符串,这是通过正则表达式匹配出来的一组值,意为使用提取到的第几个值(可能有多个值匹配,因此使用模板);从1开始匹配,以此类推.
参数可以在取值模板组合使用,例如:“1-2”作为模板得到的值是使用“-”连接的第一个待匹配内容与第二个待匹配内容组合而成的字符串。
提取单个字符串:
假设我们想要匹配Web页面的如下部分:name = "file" value = "readme.txt">并要提取readme.txt。一个合适的正则表达式是:name = "file" value = "(.+?)">。我们可以这么写:
引用名称:file
正则表达式:name = "file" value = "(.+?)">
模板:$1$
readme.txt在需要引用的地方可以通过:${file}进行使用。
提取多个字符串:
假设我们想要匹配Web页面的如下部分:name = "file.name" value = "readme.txt">并要提取file.name和readme.txt。一个合适的正则表达式是:name = "(.+?)" value = "(.+?)"。这样就会创建2个组,分别用于$1$和$2$。我们可以这么写:
引用名称:file
正则表达式:name = "(.+?)" value = "(.+?)"
模板:$1$$2$
如下变量的值将会被设定为:
file : file.namereadme.txt
file_g0 : name = "file.name" value = "readme.txt"
file_g1 : file.name
file_g2 : readme.txt
在需要引用的地方可以通过:${file}, ${file_g0},{file_g1},{file_g2}进行使用。
匹配数字(Match No):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值。
缺省值:匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR