我已经在HTTP Sampler上添加了JSR223预处理器,以能够选择querystring参数并为其添加新值。 即:
之前
access_token
所选参数=大小
要添加的新值= 9999
之后
designer=17827&size=3350&color=1
为了做到这一点,我开发了以下Groovy代码:
designer=17827&size=3350|9999&color=1
我的输出是:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
def listing_page_filter_name = "size";
def filter_values_value = "9999";
def listing_filters = "designer=17827&size=3350&color=1";
def prefix = listing_page_filter_name;
Pattern r = Pattern.compile(prefix + '=(.+?)&|' + prefix + '=(.+?)\\$');
String pattern = r.toString();
//Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(listing_filters);
log.info("FILTER: " + listing_page_filter_name);
log.info("FILTER VALUE: " + filter_values_value);
if(m.find())
{
log.info("Found value ------> " + m.group(1));
def regex_match = m.group(1);
def replacement = regex_match + "|" + filter_values_value;
log.info('Replacing it by: $1' + replacement);
String str = m.replaceFirst(Pattern.quote(pattern),Pattern.quote(replacement));
log.info(str);
//log.info(m.replaceFirst(/=(.+?)&|/,"lalalalalalala"));
}
有人知道为什么吗?
谢谢!
答案 0 :(得分:0)
对我来说,更简单的是不使用regexp:
def q0 = "designer=17827&size=3350&color=1"
def q1 = q0.split('&').collect{
it.split('=').with{
if(it[0]=='size'){
it[1]=it[1] + '|6641'
}
return it.join('=')
}
}.join('&')
println q1
但是对于您而言,使用replaceAll或replaceFirst更为简单:
def q0 = "designer=17827&size=3350&color=1"
def key='designer'
def append = '|5555'
def q1 = q0.replaceAll('('+key+'=)([^&]*)', '$1$2'+append)
println q1