Как увеличить значения свойств объекта json для динамического заполнения тела json запроса jmeter

#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.