在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}+'"}"');
但它无法正常工作。请帮忙,
答案 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中的值不是最好的主意,因为它会非常脆弱,任何额外的空格或换行符都会破坏您的测试。
我建议改为使用JsonSlurper和JsonBuilder类组合。此外,不要将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())
演示:
更多信息: