尝试使用replaceFirst将值添加到querystring参数字段

时间:2019-05-15 10:50:44

标签: java groovy jmeter

我已经在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"));
}

有人知道为什么吗?

谢谢!

1 个答案:

答案 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