Как извлечь данные из API и создать массив для отправки в другой API в Jmeter?

#arrays #json #api #jmeter

Вопрос:

Пример:

API A:

 {
   "customer":[
      {
         "name":"Jane",
         "phone":"9999999",
         "email":"jane@test.com"
      },
      {
         "name":"John",
         "phone":"8888888",
         "email":"john@test.com"
      },
      {
         "name":"Joe",
         "phone":"7777777",
         "email":"Joe@test.com"
      }
   ]
}
 

Используя JSON extractor, я хочу получить имена всех клиентов
итак: Джейн, Джон, Джо

Как мне получить эти значения и преобразовать их в массив

[{"name":"Jane", "name":"John", "name":"Joe"}]

И передать его следующему API?

Примечание: Он должен быть динамическим, чтобы API A мог отображать разные 2 имени или 1 имя или более, и его необходимо настроить в массиве

Комментарии:

1. Сопоставьте их… код: input.customer.map(v => v.name) попробуйте это в консоли chrome

Ответ №1:

Прежде всего, ваш [{"name":"Jane", "name":"John", "name":"Joe"}] неверный JSON, вы можете проверить это сами:

введите описание изображения здесь

поэтому я сильно сомневаюсь, что это та строка, которую вам нужно сгенерировать.

Поэтому, если вам действительно нужно создать это значение, вы можете сделать что-то вроде:

  1. Добавьте постпроцессор JSR223 в качестве дочернего элемента запроса, который возвращает эти данные «клиентов»
  2. Поместите следующий код в область «Сценарий» :
     def response = new groovy.json.JsonSlurper().parse(prev.getResponseData())
    def payload = new StringBuilder()
    payload.append('[{')
    0.upto(response.customer.size - 1, { index ->
        payload.append('"name": "').append(response.customer[index].name).append('"')
        if (index != response.customer.size - 1) {
            payload.append(',')
        }
    })
    payload.append('}]')
    vars.put('payload', payload as String)
     
  3. ${payload} При необходимости обратитесь к сгенерированному значению

ДЕМОНСТРАЦИЯ:

введите описание изображения здесь

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