Jmeter Groovy如何用{

Jmeter Groovy如何用{,groovy,jmeter,Groovy,Jmeter,使用JSR223 Groovy在Jmeter中..我花了很多时间试图在JSON块中替换这个字符串 "ABC": {"seconds": 20}, 与 我试过了 str1 = str1.replaceAll('"ABC": {"seconds": 20}', '"ABC": {"seconds": '+${myVal}+'"}"'); 但它不起作用。请帮助,考虑: def s = ''' {"ABC": {"seconds": 20}, "DEF": {"seconds": 30},

使用JSR223 Groovy在Jmeter中..我花了很多时间试图在JSON块中替换这个字符串

"ABC": {"seconds": 20}, 

我试过了

str1 = str1.replaceAll('"ABC": {"seconds": 20}', '"ABC": {"seconds": '+${myVal}+'"}"');
但它不起作用。请帮助,

考虑:

def s = '''
{"ABC": {"seconds": 20}, 
 "DEF": {"seconds": 30}, 
 "IJK": {"seconds": 40}} 
'''

def myVal = 88
def oldRegex = /"ABC": \{"seconds": 20\}/
def newStr = '"ABC": {"seconds": ' + myVal + '}'
def s2 = s.replaceAll(oldRegex, newStr);

println s2

请注意,
replaceAll
的第一个参数是正则表达式,这意味着必须对
{
}
进行转义。在Groovy中转义字符时,我们通常更喜欢
/\{/
(一个slashy字符串)而不是
“\{”

使用正则表达式替换JSON中的值不是最好的主意,因为它非常脆弱,任何额外的空间或换行符都会破坏测试

我建议改为使用和类组合。此外,不要将JMeter变量称为
${myVal}
,更好的选择是
vars.get('myVal')

完整示例代码以防万一:

vars.put('myVal', '1234')

def foo = '{\n' +
        '  "ABC": {\n' +
        '    "seconds": 20\n' +
        '  }\n' +
        '}'

def json = new groovy.json.JsonSlurper().parseText(foo)
json.ABC.seconds = vars.get('myVal') as int
log.info(new groovy.json.JsonBuilder(json).toPrettyString())
演示:

更多信息:

vars.put('myVal', '1234')

def foo = '{\n' +
        '  "ABC": {\n' +
        '    "seconds": 20\n' +
        '  }\n' +
        '}'

def json = new groovy.json.JsonSlurper().parseText(foo)
json.ABC.seconds = vars.get('myVal') as int
log.info(new groovy.json.JsonBuilder(json).toPrettyString())