一、什么时候需要关联
1、服务器返回中存在动态变化的值,一般是类似session的无规则数据
2、后面的操作或请求需要用到前面的请求返回的值
3、脚本运行之后没有报错,也没有产生什么数据
Jmeter可以通过“后置处理器”中的“正则表达式提取器”来处理关联
二、如何查找关联
1、Hidden标签
2、不规则的一段数字或数字与字母的组合
3、问开发人员哪些地方是需要动态捕捉数据的
三、简单的关联
比如在访问百度首页时响应数据里面有一个title标签
<title>百度一下,你就知道</title>, 我想在其他的请求中引用这个title
添加正则表达式提取器并设置如下:
说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${myref}引用它
(2)正则表达式:
括号扩起来的部分是要提取的
“.”:点代表匹配任何字符
“*”:星号代表匹配的字符0个或者多个
“+”:加号代表匹配的字符1个或者多个
“?”:问号代表找到第一个就不再找了
问号(?)放在星号(*)和加号(+)后面代表匹配尽可能少的字符
例如:<src="test.jpg" width="60px" height="80px"/>
正则src=".*"和src=".+"会匹配整个字符串
正则src=".*?"和src=".+?"匹配src="test.jpg"
*+没有这样的用法,除非是匹配星号本身,即: \*+ 表示一个或多个星号
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
(4)匹配数字:0代表随机取值,-1代表全部取值
(5)缺省值:如果正则表达式没有匹配到值,则给它一个默认值
添加一个关联请求来验证这个关联:
执行后我们看到关联成功了
四、正则表达式举例
1、提取单个字符串
匹配Web页面的如下部分:name = "file" value = "readme.txt">,并提取readme.txt
正则表达式:name = "file" value = "(.+?)">
2、提取多个字符串
匹配Web页面的如下部分:name = "file.name" value = "readme.txt">,并提取file.name和readme.txt
正则表达式:name = "(.+?)" value = "(.+?)",这样就会创建2个组,分别用于$1$和$2$
比如:
如下变量的值将会被设定:
MYREF: file.namereadme.txt
MYREF_g0: name = "file.name"value = "readme.txt" 模板{0}
MYREF_g1: file.name 模板{1}
MYREF_g2: readme.txt 模板{2}
事实上,MYREF_g0、MYREF_g1、MYREF_g2是正则表达式的结果组,而MYREF才是被模板控制提取出来结果,在需要引用地方可以通过:${MYREF_g1}, ${MYREF_g2进行使用。