有这样一个请求,目的是获取请求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,"=(.*?)&"是为匹配‘=’后面任意字符到第一个&为止,特别强调的是表达式中‘?’用法,加了这个问号,表示惰性写法,即尽量减少匹配,这样当第一次看到&符号时就会停止,如果不加这个?,匹配时就会匹配到最后一个&
加问号匹配结果
不加问号匹配结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)