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

有这样一个请求,目的是获取请求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,"=(.*?)&"是为匹配‘=’后面任意字符到第一个&为止,特别强调的是表达式中‘?’用法,加了这个问号,表示惰性写法,即尽量减少匹配,这样当第一次看到&符号时就会停止,如果不加这个?,匹配时就会匹配到最后一个&

加问号匹配结果

不加问号匹配结果

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

agrapea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值