1、概述
关联,是Jmeter脚本中非常重要的一个设置,因为在测试过程中有些数据是经常发生变化的,要获取并使用这些数据,就一定要使用关联。在脚本中,将每次都动态变化的值进行关联,一个能正确执行的脚本,都需要进行关联(LoadRunner、Jmeter)。
2、方法说明
在脚本回放过程中,客户端发送请求,通过Jmeter中正则表达式提取器所定义的左右边界值,也就是关联规则,在服务器返回的响应内容中查找符合规则的值,以变量的形式替换录制过程中的静态值,从而向服务器发送正确的请求。
3、具体步骤
关联分两种:
提取单个字符串和提取多个字符串
第一步:添加后置取样器
接着上一个文档中的脚本,添加正则表达式提取器,如图所示:
提取单个字符串:
第二步:修改正则表达式提取器
在fiddler中查看请求响应内容,假如想要提取以上内容中的value值,那么正则表达式就是:
name=”userSession” value=”(.+?)”/>
在正则表达式提取器中如图所示:
第三步:修改脚本对应值
将脚本中的对应值改为如下:
第四步:添加debug sampler
可以在此线程中添加debug sampler,在脚本回放时,在查看结果树中可以看到debug sampler中的各种参数值,其中就有关联值。
运行脚本,查看debug sampler
提取多个字符串:
假如想要匹配如下部分并且想要提取userSession和value值
name="userSession" value="131620.683353584zHHAcDipQtAzcVptDDt"/>
将正则表达式内容修改为
在脚本对应值改为:
${userSession_g1}: 对应上图中模板的$1$
${userSession_g2}: 对应上图中模板的$2$
运行脚本,查看调试取样器:
会发现,取出来的值name=username,而value=”” size=”14” maxlength=”14”/>
这个值显然是不对的,我们返回fiddler中查看一下响应内容。
Fiddler响应内容如下图所示:
这样结果就很明显了,我们的正则表达式匹配错了,应该匹配①部分,但是由于这两个内容格式相似,就匹配到②的内容了
怎样修改呢?
我们需要去修改匹配规则,也就是修改左右边界值。
这是修改后的:(显然,我修改了左边界值)
再次运行,查看调试取样器:
这次就成功了,这就是提取多个字符串的方法。
4、正则表达式提取器详解:
先来看正则表达式提取器界面:
名称:最好有业务上的意义,方便区分
注释:没什么用。。。
Apply to:应用范围
Main sample and sub-samples:匹配范围包括当前父取样器并覆盖子取样器
Main sample only:匹配范围是当前父取样器(默认)
Sub-samples only:仅匹配子取样器
Jmeter variable name to use:支持对Jmeter变脸进行匹配
要检查的响应字段:
主体:响应数据的主体部分,不包括header部分,主体部分就是body(默认选择这个)
Body(unexcaped):针对替换了转义码的body部分
Body ad a document:返回内容作为一个文档进行匹配
信息头:只匹配信息头部分的内容
URL:只匹配URL链接
响应代码:匹配响应代码,例如状态码200
响应信息:匹配响应信息:例如“成功”、“OK”
引用名称:即下一个请求中要引用的参数名称,如果填写userSession,可用${userSession}来引用他。
正则表达式:
():括号括起来部分就是要提取的内容,在括号中写正则表达式
. :匹配任意字符
+ :一次或多次匹配
? :0次或1次匹配,不要太贪婪,在找到第一个匹配项后就停止
模板:用$$引用起来,如果在正则表达式中有多个正则表达式,就可以是$1$$2$类似这样的,表示匹配到的第几个值给userSession
匹配数字:用正则表达式匹配时,可能出现多个值的情况,为正数用来确定取一组值中的第几个,为0表示随机取匹配值,负数取所有值。
缺省值:如果没有匹配到可以制定一个默认值。