Выполните запрос почтальона несколько раз, используя массив из предыдущего шага

Я работаю над некоторыми тестовыми сценариями и сценариями очистки данных с помощью почтальона, и мне было интересно, можно ли выполнить запрос по результату массива, полученному на предыдущем шаге.

Например, у меня есть API, который возвращает задачи в виде JSON, например:

[
    {
        "active": true,
        "_id": "5b2101244651a04a4907b094",
        "name": "Test Task",
        "updatedAt": "2018-06-13T11:33:56.911Z",
        "createdAt": "2018-06-13T11:33:56.911Z"
    },
    {
        "active": true,
        "_id": "5b2101244651a04a4907b067",
        "name": "Test Task 2",
        "updatedAt": "2018-06-13T11:33:56.911Z",
        "createdAt": "2018-06-13T11:33:56.911Z"
    }
]

Итак, в сценариях тестов я запускаю это, чтобы собрать массив идентификаторов:

var jsonData = JSON.parse(responseBody)
postman.setEnvironmentVariable('task_id_list', jsonData.map((i) => i._id))

Следующий запрос - удалить задачу, но API удаляет только одну за раз. Я пытаюсь сделать что-то вроде:

http://localhost:3000/api/v1/tasks/{{task_id_list}}

Я надеялся, что Почтальон увидит, что task_id_list был массивом и простой «работой», но, похоже, это не так. Можно ли выполнить шаг несколько раз на основе ввода массива?


person CodeChimp    schedule 14.06.2018    source источник
comment
Не могли бы вы добавить что-нибудь в сценарий предварительного запроса второго запроса и, возможно, извлечь элемент из списка? Каждая из них будет сохранена как новая переменная, на которую затем будет ссылаться URL-адрес для запроса на удаление. Никогда не пробовал делать это, поэтому меня интересует решение.   -  person Danny Dainton    schedule 14.06.2018


Ответы (1)


Решение из этой статьи

Получить массив идентификаторов в тестовом скрипте первого запроса (я предпочитаю хранить его в JSON, чтобы избежать ошибок):

let JsonData = pm.response.json();
let iDs = JsonData.map((i) => i._id)));
pm.environment.set("IdArray", JSON.stringify(iDs);
//and now check, if there was no objects returned, stop runner
if(iDs.length === 0)
{
    postman.setNextRequest(null);//next request will not be sent
}
else
{
    pm.environment.set("count", 0);
}

В сценарии предварительного запроса 2 запросов:

var count = +pm.environment.get("count");
var iDs = JSON.parse(pm.environment.get("IdArray"));
pm.variables.set("task_id_list", iDs[count]); //like one-request environment variable
count = count + 1; //next iteration
if(count < iDs.length)
{
    postman.setNextRequest("NAME OF THIS REQUEST");
}
else 
{
    postman.setNextRequest(null); // or next request name
} 
pm.environment.set("count", count)

Так что вы должны понять мою идею.

person Borys Fursov    schedule 14.06.2018
comment
Вы забыли увеличить счет во втором скрипте? - person Jonny; 19.12.2018