一、为什么要设置关联?
http协议本身是无状态的,客户端只需要简单向服务器请求下载某些文件,无论是客户端还是服务端都不去记录彼此过去的行为,每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本,就必须设置关联,否则无法进行对应的操作。
举个例子,jmeter设置了3个线程组(登录、进入##查询页面、点击查询),如果未设置关联,线程组进入##查询页面、点击查询将无法继承用户成功登录的状态,响应一般会返回"用户未登录系统"
总结一波,关联的作用就是!!
(我自己是这么觉得的~)
(1)不同线程组之间传递同个值
(2)某传递值不在请求中,在响应文本/响应信息头中,而请求之间需要调用该值才能正常运行
(3)记得添加一个HTTP Cookie管理器(添加后同个线程组就不需要设置关联)
二、如何设置关联?
1、查找关联参数
要设置关联,不得不提到Cookie、Session机制
Session机制需要借助于cookie机制在客户端保存标识,是一种服务器端机制,服务器使用一种类似于散列表的结构来保存信息
做关联的时候可以用sessionid进行关联,下图举个例子帮助理解下Cookie、Session机制的区别与联系(理解不了就算了,咱继续往下看,成功设置关联就完事!)
具体取哪个关联值,可以询问开发,也可使用抓包工具/chrome-F12等方法,查看系统,是在什么时候提供token。
一般查看【点击登录】操作的请求可找到,大部分都是以seesionid/cookie/token来设置,下面的例子取得是token值
2、添加正则表达式提取器
路径:请求点击鼠标右键-添加-后置处理器- 正则表达式提取器
取到的值就是一个局部变量,可以在同一个线程组内调用:${token},设置如下
页面参数说明:
-Apply to默认选中"main sample only"即可,仅作用于父节点取样器;
-要检查的响应字段:由于需要关联的信息在响应结果头部,则选中"信息头"。若需要关联的信息在响应文本中返回,则选中"主体";
--引用名称:关联参数的名称;
--正则表达式:设置关联函数的左右边界值;
--模板:默认为 1 1 1
--匹配数字:若取到多个值,设置的匹配数字则能选择相应的值,默认为1
--缺省值:默认为空
正则表达式 的写法:
格式:左边界(匹配内容)右边界
():封装了待返回的匹配字符串;
. :匹配任何单个字符串;
*:取0至无限长度
? :找到第一个匹配项后停止
(更高深的匹配找度娘,不懂咱就问!)
3、添加调试取样器
调试取样器用于调试脚本,可查看关联参数的取值情况
路径:右键点击线程组-添加-取样器-调试取样器(Debug Sample)
放置在需要查看的事务(比如登录)后面,点击运行,查看察看结果树下的返回结果。
可以看见,正则表达式成功取值(这里没图啦!察看结果树中对比查看登录请求的响应文本token值和调试取样器的token值一致即可)。
4、设置全局变量
由于jmeter中的线程组是相对独立的,线程组1设置的函数,无法在线程组2中使用,因此,如果需要调用线程组1中的函数,则需要将该函数设置为全局变量。
菜单-工具-函数助手对话框,打开函数助手窗口
Name of property 设置的函数名称
Value of property 函数取的值
Return original value of property(default false)? 缺省值,默认为空
选择__setProperty函数,输入属性名称及函数取值,点击生成
Ps:点击【生成】就是复制
添加(BeanShell后置处理器)
将上一步复制的函数字符串粘贴在此处
此时全局变量则设置完成。
(注意:全局变量函数中,"__"是双下划线)
${__setproperty}为设置全局变量的函数
${__property}为调用全局变量的函数
5、调用全局变量
找到需要调用关联参数的请求,在HTTP信息头管理器中填入变量
6、检查调用情况
运行脚本,查看察看结果树
(1)查看关联参数取值处请求的响应信息的token
(2)查看调用关联参数请求的请求信息的token
(3)以上两个token一致,调用成功
(4)可以直接看断言是否成功
温馨提示:调试脚本可以将请求先集中在一个线程组中,先排除脚本本身的问题,再设置关联进行跨线程调试。
wuu~~
又是学到知识的一天!
为自己点个赞!