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}引用它。

正则表达式:

    ():括起来的部分就是要提取的。

    .:匹配任何字符串。
    +:一次或多次。
    ?:在找到第一个匹配项后停止。
    这里用到的是Cookie后面的值,所以只需要拿到登录接口返回的cookie中SESSIONID=E19055FDC13C1677B05AAE6C736A4A6E的值就好了

模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$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、跑一下请求 

 

 

 已经可以成功添加了。

参考的博文或来源:

Jmeter关联,正则表达式提取器使用

 Jmeter跨线程组调用变量

 

 

原文地址:https://www.cnblogs.com/liuzhzhao/p/10787502.html