Jmeter关联之正则表达式

如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作(也就是常说的关联/将上一个请求的响应结果作为下一个请求的参数);

在Jmeter中,可以利用正则表达式提取器来帮助我们完成这一动作。
 

一、正则表达式

下面是常用的正则表达式操作符:

字符 作用
$ 匹配输入字符串的结尾位置。
() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
* 匹配前面的子表达式零次或多次。
+ 配前面的子表达式一次或多次。
. 匹配除换行符 之外的任何单字符。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
将下一个字符标记为或特殊字符、或原义字符。
^ 匹配输入字符串的开始位置。
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:作用范围(返回内容的断言范围)

  • 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:响应信息

引用名称(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

原文地址:https://www.cnblogs.com/istart/p/11195561.html