#json #jmeter
Вопрос:
Используя JMeter, мне нужно отправить запрос, содержащий тело в таком формате:
{
"key1":"value1",
"key2":{
"key21":[
{
"key211_1":"valueA",
"key212_1":"valueToIncrement",
"key213_1":{
"key2131_1":"valueB",
"key2132_1":"valueC",
},
"key214_1":{
"key2141_1":"valueD",
"key2142_1":"valueE"
}
},
{
"key211_2":"valueA",
"key212_2":"valueToIncrement 1",
"key213_2":{
"key2131_2":"valueB",
"key2132_2":"valueC",
},
"key214_2":{
"key2141_2":"valueD",
"key2142_2":"valueE"
}
}
]
}
}
Внутри тела у меня может быть список из множества объектов json, и каждый объект будет иметь некоторое свойство с уникальным идентификатором внутри запроса.
Что-то вроде:
{
"key212_1":"1"
},
{
"key212_2":"2"
}
...
{
"key212_2":"n"
}
Поскольку у меня могут быть сотни объектов внутри тела запроса, могу ли я создать логику в Jmeter, чтобы при каждой отправке запроса каждое значение целевого свойства увеличивалось на 1 в каждом из этих свойств без необходимости вручную жестко кодировать значения?
Ответ №1:
Вам придется поддерживать Counter
. В запросе, в котором вы хотите увеличить значение, добавьте a JSR223 Pre Processor
. В этом случае вам придется закодировать, чтобы увеличить значение и сохранить его обратно в переменную, а также присвоить ему ваш объект Json.
ПРАВКА :- Я попытался смоделировать вашу настройку, как показано ниже.
Комментарии:
1. Я попробовал вашу настройку и заметил, что она увеличивает значения finalJsonObj только при увеличении итерации. В группе потоков, если я настрою 4 взаимодействия, результат будет таким, как на вашем снимке экрана, но если я выберу 1 итерацию и 4 потока, каждый образец получит один объект json, который не состоит следующим образом: finalJsonObj=[{«Значение»:»1″}] finalJsonObj=[{«Значение»:»2″}] finalJsonObj=[{«Значение»:»3″}] finalJsonObj=[{«Значение»:»3″}] finalJsonObj=[{«Значение»:»Значение»:»2″}]»:»4″}] Я ожидал, что finalJsonObj = [{«Значение»:»1″},»Значение»:» 2″}, «Значение»: «3»}. «Значение»: «4»}] четыре раза.
2. Понял. Всего одно изменение в твоем
JSR223 Preprocessor
. Обновите строку #10, как показано нижеfinalJsonObj = myObj
3. Я внес изменения, сохранил и повторно запустил, но в поведении нет изменений.
4. ОБНОВЛЕНИЕ: Ах, подождите, теперь я вижу изменение: если я помещу 4 потока и 2 итерации, в каждом запросе будет один объект json с увеличенным значением, что хорошо, это то, что я хотел. Тнх.
5. Мне нужно было использовать цикл for в PreProc для создания одного динамически изменяющегося «большого» объекта Json из 3 меньших объектов json (myObj1,myObj2,myObj3), используемых для ветвей более глубокого уровня, и в каждом цикле я просто увеличиваю переменную счетчика, объявленную непосредственно в сценарии препроцессора JSR223, до количества «больших» объектов, которые мне нужны. В конце каждого цикла я добавляю «большой» Json в один объект masterJsonObject, и как только все итерации заканчиваются, я помещаю динамически созданный главный объект в переменную. Затем эта переменная доступна для использования в теле HTTP-запроса в середине некоторого статического тела json.