Jmeter Groovy, как я могу заменить эту строку на { - PullRequest
0 голосов
/ 29 мая 2018

В 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 голосов
/ 29 мая 2018

Замена значений в 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())

Демо:

JMeter Groovy Replace Value in JSON

Дополнительная информация:

0 голосов
/ 29 мая 2018

Рассмотрим:

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 мы обычно предпочитаем /\{/ (косая строка) вместо "\\{".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...