Почтальон: как оценить массивы json


С помощью Postman можно сохранить специальное поле из тела ответа в переменную и использовать значение этой переменной в последовательном вызове.

Например: в моем первом вызове веб-сервиса в теле ответа возвращается следующее

[ {
  "id" : "11111111-1111-1111-1111-111111111111",
  "username" : "user-1@example.com",
}, {
  "id" : "22222222-2222-2222-2222-222222222222",
  "username" : "user-2@example.com"
} ]

Я добавил тест

postman.setGlobalVariable("user_0_id", JSON.parse(responseBody)[0].id);

Теперь я посылаю последовательный запрос на веб-сервис с URL

http://example.com/users/{{user_0_id}}

Почтальон оценивает {{user_0_id}} в 11111111-1111-1111-1111-111111111111.

Это прекрасно работает. Но теперь я добавлю к тесту: мой первый звонок

postman.setGlobalVariable("users", JSON.parse(responseBody));

Во втором запросе к веб-сервису я вызываю URL

http://example.com/users/{{users[0].id}}
Но теперь

Не может быть оценено, оно остается прежним и не заменяется 11111111-1111-1111-1111-111111111111.

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

1 3

1 ответ:

Чтобы сохранить массив в глобальной переменной / environment, вам потребуется JSON.stringify() it. Вот отрывок из документации почтальона об окружающей среде :

Окружение и глобальные переменные всегда будут храниться в виде строк. Если вы храните объекты / массивы, обязательно используйте JSON.stringify () их перед сохранением, и JSON.parse() их во время извлечения.

Если действительно необходимо сохранить весь ответ, сделайте что-нибудь подобное в своих тестах для первого звонка:

var jsonData = JSON.parse(responseBody);
// test jsonData here

postman.setGlobalVariable("users", JSON.stringify(jsonData));

Чтобы извлечь идентификатор пользователя из глобальной переменной и использовать его в URL запроса, вам нужно проанализировать глобальную переменную в скрипте предварительного запроса второго вызова и добавить значение к "временной переменной", чтобы использовать ее в URL:

postman.setGlobalVariable("temp", JSON.parse(postman.getEnvironmentVariable("users"))[0].id);

Следовательно, URL-адрес второго вызова будет:

http://example.com/users/{{temp}}

В тестах для второго вызова обязательно очистите переменную temp в конце:

postman.clearGlobalVariable("temp");
Это должно сделать трюк для вас. Насколько я знаю знайте, что в настоящее время нет возможности проанализировать глобальную переменную непосредственно в URL для доступа к определенным записям (как вы пытались сделать с {{users[0].id}}).