Это выдержка из статьи «Как подготовить данные для запроса в Postman через pre-request».
Метод pm.sendRequest нужен для того, чтобы асинхронно отправлять запросы в Postman до или после выполнения основного запроса (Pre-request или Post-response скрипты). Документация тут.
Зачем это нужно?
- Pre-request — подготовить данные для выполнения текущего запроса (перед поиском создаем объект с нужными полями)
- Post-response — чистим за собой (удаляем созданное в pre-request)
// Example with a full-fledged request
const postRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: {
'Content-Type': 'application/json',
'X-Foo': 'bar'
},
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
pm.sendRequest(postRequest, (error, response) => {
console.log(error ? error : response.json());
});
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
if (error) {
console.log(error);
} else {
console.log(response);
}
});
Попробуем на бесплатной системе Users. Допустим, что мы тестируем метод getUser — получение информации по пользователю. Подготовим наш запрос (если вы раньше не сталкивались с Postman, посмотрите видео «Как отправить REST-запрос за 5 минут» и статью «Что такое JSON»):
Тип метода — POST URL — http://users.bugred.ru/tasks/rest/getuser Body в json: { "email": "test_habr_1@mail.com" }
Но, чтобы информацию получить, пользователя вначале нужно создать. А пока мы получаем ошибку: «Пользователь не найден» (если хотите пройти шаги с нуля, то придумайте свой уникальный email, которого пока в системе нету):
Давайте сделаем так, чтобы запрос всегда проходил успешно. То есть перед вызовом метода сначала создадим пользователя.
Самый простой путь — через метод doregister. Если это делать через обычный запрос, а не pre-request, он будет выглядеть так:
Тип метода — POST
URL — http://users.bugred.ru/tasks/rest/doregister
Body в json:
{
"name": "Хабр 1",
"email": "test_habr_1@mail.com",
"password": "1"
}
Теперь перепишем его в pre-request:
const postRequest = {
url: 'http://users.bugred.ru/tasks/rest/doregister',
method: 'POST',
body: {
mode: 'raw',
raw: JSON.stringify({
email: "test_habr_1@mail.com",
name: "Хабр 1",
password: 1
})
}
};
pm.sendRequest(postRequest, function (err, res) {
console.log(err ? err : res.json().message);
});
Добавляем этот код во вкладку «Scripts → Pre-request» и снова нажимаем «Send». И вуаля, запрос выполнен успешно!
Но постойте… А что будет, если я повторно отправлю запрос? И что будет, если pre-request упадет? Давайте проверим!
Отправляем запрос повторно — он проходит успешно. А что было с pre-request? Можно проверить в консоли. Открываем её:
И видим, что наш запрос сначала вызвал метод doregister, который вернул в Body ошибку «email уже существует», а потом всё равно пошел вызов getuser. Значит, вызов запроса не зависит от ошибок в pre-request… Или зависит?
Users — тестовая система, в которой на любой запрос тебе вернется код 200. Это можно проверить, дергая doregister отдельно. При попытке сломать запрос:
Поменять URL, удалив последнюю букву — url: 'http://users.bugred.ru/tasks/rest/doregiste'
Поменять тип запроса на GET (а там все методы только через POST работают, напомню, что система тестовая)
…
Мы всегда получаем в ответе «200 ОК». Попробуем всё же сломать систему. Для этого в URL подставим что-то совсем другое, другое API, которое умеет возвращать ошибки. А тело оставим от Users, как раз на нем и свалится.
Я поменяла URL на вызов JIRA и записала это в виде второй переменной (postRequest2). То есть просто добавила в pre-request такой блок кода:
const postRequest2 = {
url: 'https://testbase.atlassian.net/rest/api/3/issue/TEST-18750',
method: 'POST',
body: {
mode: 'raw',
raw: JSON.stringify({
email: "test_habr_1@mail.com",
name: "Хабр 1",
password: 1
})
}
};
pm.sendRequest(postRequest2, function (err, res) {
console.log(err ? err : res.json().message);
});
Отправляем запрос — ага, ошибочка!
Так что учтите, что таким образом можно дергать только идемпотентный метод, который не будет падать при повторном вызове.
Если у вас запрос на создание падает, когда «такая сущность уже есть в базе», то нужно будет оборачивать вызов во всякие условия «если сущность уже есть, пропусти, если нет, создай…».
Но этот случай выходит за рамки нашей статьи. Сейчас наша цель — просто научиться использовать pre-request скрипты в базовом варианте. И понимать, что с ними будет в том или ином случае. И один запрос мы отправлять уже научились!
См также:
Как в pm.sendRequest() выполнить запросы в нужном порядке — о том, как вызвать 2 запроса подряд
Как подготовить данные для запроса в Postman через pre-request — удобная статья на хабре, состоящая из этих двух мини-статей
Комментариев нет:
Отправить комментарий