Jmeter书中不会教你的(89)——在beanshell中使用正则表达式提取参数值

Jmeter书中不会教你的(89)——在beanshell中使用正则表达式提取参数值,第1张

有这样一个请求,目的是获取请求url以及获取url中token的值

一/获取请求完整url方法

1)正则表达式

2)采用beanshell,利用方法getUrlAsString()

rh=prev.getUrlAsString();
log.info(rh);


二/需要再灵活一点,获取url中参数值

1)同获取响应头一样,可以采用正则表达式提取器,比如提取token,括号中为提取内容的表达式,可以理解成括号左右实际就是边界值

2)采用边界值提取器,比如提取userId,观察参数左右边界值

3)在beanshell中使用正则表达式提取

还是以这个请求的url为例,需要提取其中的token,观察下参数的特点,在‘=’后面‘&’前面为参数的值,若链接中含有多个参数,写一个公共的方法 getParamByUrl(),将参数名传递进去就可以获取相应参数的值。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

url=prev.getUrlAsString();
log.info(url);


public static String getParamByUrl(String url, String name) {
    //因为最后一个参数结尾没有&,为了统一规则
        url += "&";
       String pattern =name + "=(.*?)&";
        Pattern r = Pattern.compile(pattern);
        Matcher matcher = r.matcher(url);
     
        if (matcher.find()) {
              log.info(matcher.group(0));
              mch= matcher.group(0).split("=");
              log.info("拆分"+Arrays.toString(mch));
              log.info(matcher.group(0).split("=")[1]);
            return matcher.group(0).split("=")[1].replace("&", "");
        } else {
            return "";
        }
    }
    
String name="token";
v=getParamByUrl(url,name);
log.info(v);
 

这里需要注意的几点

1.由于url中最后一个参数值没有&,所以需要在结尾加‘&’用来匹配正则

2.name为传进去的参数值,如token,"=(.*?)&"是为匹配‘=’后面任意字符到第一个&为止,特别强调的是表达式中‘?’用法,加了这个问号,表示惰性写法,即尽量减少匹配,这样当第一次看到&符号时就会停止,如果不加这个?,匹配时就会匹配到最后一个&

加问号匹配结果

不加问号匹配结果

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/739772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存