Последовательность запросов с меняющимися параметрами в Postman

postman
Теги: #<Tag:0x00007f7b621f9480>

(Валерия Кабаева) #1

И снова вопрос из серии “Помогите, люди добрые, я в постмане второй день”.

Дано: коллекция, состоящая из нескольких входных запросов/запросов для проверки и целой кучи post-запросов с одинаковой урл. По факту, у них меняются только два параметра в body (айдишник вопроса и айдишник ответа на этот вопрос).
Задача: оптимизировать коллекцию так, чтобы можно было подавать на вход массив с кучей значений для этих самых параметров.

Если бы в коллекции все запросы были одинаковые, решение было бы простое. В коллекции всего один запрос, при запуске ему задается необходимое количество итераций (например, 50), на вход - массив с 50 парами айдишников.
Но есть еще и другие запросы, которые должны выполнятся всего единожды.
И вот как это побороть (кроме как запихнуть в один элемент массива все 100 айдишников), я уже не знаю.


(Михаил Братухин) #2

Тут ещё не смотели?
https://www.getpostman.com/docs/v6/postman/scripts/postman_sandbox
Там есть про Data Files.

И если не секрет, то в чем глубинный смысл отправлять разные id’шники? Сотня тестов где отличается на входе и выходе только id, смотрится как-то необычно. Что за сервис такой в чем его суть и чем отличаются сценарии между собой?


(Валерия Кабаева) #3

К сожалению, там только структура json’а для множества итераций всей коллекции, а не для цикла запроса внутри одной итерации.

А сервис - что-то вроде анкетирования. Там сначала пользователь получает токен, авторизуется, переходит к вопроснику и последовательно отвечает на вопросы (каждый запрос - один ответ, в параметрах и передаются айдишник вопроса и айдишник ответа на него).


(Михаил Братухин) #4

Если честно, то от слов циклы, итерации и коллекции я еще больше запутался. То что я скинул - это пример Data Provider’а в Postman’е:
Working with data files
И вот тут ещё + комментарии снизу:
Using CSV and JSON data files in the Postman Collection Runner
Это точно не то что вам нужно?


(Валерия Кабаева) #5

Увы. Это самое простое решение, для моего случая оно не подходит.

На сайте постамана описано, как после запуска многократно гонять всю пачку запросов. Мне же нужно повторять один запрос, а остальные не трогать. И сделать это нужно в одном запуске.


(Artem Gonchar) #6

Что именно вы хотите проверить данным тестом? Какой ожидаемый результат? Я так понимаю, вам нужно обрабатывать полученный от пользователя массив данных, который будет включать список вопросов и ответов на них, а потом валидировать полученные ответы по принципу true/false и выводить результат на сколько вопросов пользователь ответил верно?


(Валерия Кабаева) #7

В общем-то, после выполнения кучи запросов нужно было подсчитать баллы, которые пользователь набрал за свои ответы.

Но вопрос уже не актуален, удалось самостоятельно разобраться.


(Vatslau) #8

ну и какое есть красивое решение - поделитесь


(Валерия Кабаева) #9

Красивого решения нет, есть работающее.

Нужно подготовить json в виде:

[
{ "question_id": "id1,id2,id3 ...",
"answer_id": "id1,id2,id3 ..." }
]

При запуске коллекции этот json будет использован как data-файл.
question_id и answer_id сохраняются как переменные в энвайронменте. У них строковый формат, поэтому преобразовывать ничего не надо.
Отдельно в энвайронмент записываются две переменные:

  1. i - порядковый номер айдишников. По умолчанию она задается равной нулю.
  2. max - количество элементов в массиве.

В пре-реквесте того запроса, который надо прогонять несколько раз, эти строки нужно вытащить из энвайронмента и преобразовать в массивы:

var qArr = question_id.split(',');

Задаются переменные qID и aID, равные i-м элементам массивов, они же записываются в энвайронмент:

pm.environment.set("qID", qArr[i]);
pm.environment.set("aID", aArr[i]);

В теле запроса достаточно будет просто записать эти переменные-айдишники с плейсхолдерами: {{qID}}, {{aID}}.

А дальше нужно зациклить этот запрос, чтобы он выполнялся. Для этого в пост-реквесте считываются переменные i и max, и пишется условие:

if (i <= max-1) {
    i++;
    postman.setNextRequest("answer");
}

Получается, что пока i меньше или равно (max-1), переменная i будет перезаписываться со значением, на единицу большим, а следующим запросом будет выполнятся этот же самый запрос.
Когда все элементы массива будут пройдены (i = max), цикл разорвется, и запросы снова будут выполнятся последовательно.