t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f7486b35ea0>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нужно подготовить 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), цикл разорвется, и запросы снова будут выполнятся последовательно.

1 Симпатия