Почтальон: как оценить массивы 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 ответ:
Чтобы сохранить массив в глобальной переменной / 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 в конце:
Это должно сделать трюк для вас. Насколько я знаю знайте, что в настоящее время нет возможности проанализировать глобальную переменную непосредственно в URL для доступа к определенным записям (как вы пытались сделать сpostman.clearGlobalVariable("temp");
{{users[0].id}}
).