Jmeter Groovy如何用{替换此字符串

时间:2018-05-28 23:07:15

标签: groovy jmeter

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

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

"ABC": {"seconds": ${myVal}}, (this way my value in seconds is variable)

我试过了

str1 = str1.replaceAll('"ABC": {"seconds": 20}', '"ABC": {"seconds": '+${myVal}+'"}"');

但它无法正常工作。请帮忙,

2 个答案:

答案 0 :(得分:0)

考虑:

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中转义字符时,我们通常更喜欢/\{/(一个斜线字符串)而不是"\\{"

答案 1 :(得分:0)

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

我建议改为使用JsonSlurperJsonBuilder类组合。此外,不要将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())

演示:

JMeter Groovy Replace Value in JSON

更多信息: