Jmeter利用正则表达式提取器提取登录cookie供下一步使用
最近在学Jmeter,遇到需要登录之后才能进行下一步操作的场景,网上查了各位大神的资料,东拼西凑总算是做好满足需求了,写一下经过和步骤吧。
一、正常调用
按正常流程添加线程组、HTTP请求(登录和添加)、HTTP请求默认值、HTTP信息头管理器等,然后跑看看能不能通过。
添加失败,试着在同一个线程组下添加HTTP Cookie 管理器,看看能不能成功:
通过了。但是现在线程数是和循环次数都是1,如果循环次数是1000次,那也登录接口也要调用1000次,影响性能测试结果,这个时候可以把登录单独放到另一个线程组中,然后在添加的接口中调用登录的Cookie。
报401(鉴权失败)了,没法调用上一个线程组登录的Cookie。下一步就看看怎么获取上一个线程组的返回数据,供别的线程组调用。
二、提取登录接口返回的cookie。
1、在登录的HTTP请求下添加正则表达式提取器
2、然后通过页面调用登录的接口,拿到登陆后获取的Cookie和添加需要用到的cookie值
登陆后获取的Cookie:
添加需要用到的cookie值:
3、按下图设置好正则表达式提取器
填写说明:
要检查的响应字段:现在是需要从信息头中获取数据,所以现在选中“信息头”
引用名称:下一个请求要引用的参数名称,如填写logincookie,则可用${logincookie}引用它。
正则表达式:
():括起来的部分就是要提取的。
模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
缺省值:如果参数没有取得到值,那默认给一个值让它取。
这个时候就把正则表达式提取器设置好了,但是经测试,不能跨线程组调用参数,所以还需要在登录HTTP请求下添加BeanShell PostProcessor关于这个组件的介绍可以自行查一下
三、设置跨线程组调用参数
1、在登录HTTP请求下添加BeanShell PostProcessor
2、设置参数如下图所示,填入参数名${logincookie}和脚本${__setProperty(logincookie,${logincookie})}
3、在登录HTTP请求下添加HTTP信息头管理器,加一行,名称填抓包抓到的信息头中的键(Cookie),值填BeanShell PostProcessor中往下传的参数(${__P(变量名)})
4、跑一下请求
已经可以成功添加了。
参考的博文或来源: