jmeter 前置处理器提取用户cookie信息 比如jsessionid

时间:2021-10-20 14:35:28

一般登录过程分成两步,一步是打开登录页面, 一步是输入用户名和密码登录

现在B/S架构的系统好多时候都只在客户端的cookie信息保留一个jsessionId,然后每次请求的时候在请求的头信息的cookie中带上JsessionID,服务器根据jsessionId来判断是否是合法的输入,

那我们怎么样通过jmeter去提取JessionId呢?

1、首先添加在登录的请求接口中添加一个beanshell前置处理器(后置处理器也可以,可以判断是否登录成功,在决定是否保留这个jsessionid)

jmeter 前置处理器提取用户cookie信息 比如jsessionidjmeter 前置处理器提取用户cookie信息 比如jsessionid

对应的代码如下

import java.util.regex.Matcher;

import java.util.regex.Pattern;

String str=prev.getResponseHeaders();

log.info("head="+str);

// 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来

// 在这里,我们要提取最后一个数字,正则规则就是“一个数字加上大于等于0个非数字再加上结束符”

Pattern p = Pattern.compile("[A-Za-z0-9]{32}");

Matcher m = p.matcher(str);

log.info("m = "+m);

if(m.find()) {  

            Object result = m.group(0);

            log.info("head="+result);

}

第一步先找到前一次请求的头信息, prev.getResponseHeaders();, 再次知道我们要找的字符串的正则表达式规则"[A-Za-z0-9]{32}"),说明是32位的字符串,只包含数字和字母,通过匹配正则表达式,找到对应的jsessionID, 运行完的结果发现找到了正确的jsessionid

jmeter 前置处理器提取用户cookie信息 比如jsessionid

jmeter 前置处理器提取用户cookie信息 比如jsessionid

最后再调用Java代码保存这些jessionID就好

保存这些JessionId有什么用呢?

可以真正模拟多用户请求, 通过
CSV Data Set Config 组件把数据引用回来, 每一个请求都带上不同的jessionId, 每个请求就是不同用户了,

那为什么我们不用同一个用户开启多个线程去模拟多用户呢? 同一个用户调用同一个请求, 可能有些程序会拒绝这种不合理情况, 比如说下单,前一个线程下单还没有走完, 同一个用户的另一个线程又开始下单,这种第二个请求可能会被服务器给拒绝, 但是我们把每个线程使用不同jsessionId给带回来,就不会存在这个问题了