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

Почтальон также имеет возможность подготовить данные для запроса. Более того, это можно использовать не только для автоматизации, но и для ручного выполнения. Удобно, когда можно выполнить конкретный запрос для конкретного метода, и он будет успешно работать как с пустой базой данных, так и с заполненной базой данных.

Подготовка данных осуществляется с помощью функции pm.sendRequest() в скриптах предварительного запроса, и в этой статье я покажу, как ее использовать. Я покажу вам в стиле «взять и повторить» на примерах. бесплатная пользовательская система.

Содержание

  1. Как отправить предварительную заявку

  2. Как отправить несколько запросов в качестве предварительного запроса

  3. Общий

Как отправить предварительную заявку

Запрос строится следующим образом (пример Документация). Сначала сохраняем сам запрос в переменной postRequest, затем вызываем его через функцию sendRequest:

// Example with a full-fledged request

const postRequest = {
  url: '
  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());
});

Давайте попробуем это на пользователях. Допустим, мы тестируем метод getUser — получение информации о пользователе. Давайте подготовим наш запрос (если вы никогда раньше не встречали Почтальона, посмотрите видео «Как отправить REST запрос за 5 минут«и статья «Что такое JSON«):

Тип метода — POST
URL — 

Body в json:

{

  "email": "[email protected]"

} 

Но для получения информации необходимо сначала создать пользователя. Тем временем получаем ошибку: «Пользователь не найден» (если вы хотите выполнить действия с нуля, создайте свой уникальный адрес электронной почты, которого еще нет в системе):

Давайте позаботимся о том, чтобы запрос всегда выполнялся успешно. То есть перед вызовом метода мы сначала создаем пользователя.

ЧИТАТЬ   Virgin Voyages предлагает месячный круиз для удаленных работников по цене от 10 000 долларов на двоих

Самый простой способ — использовать метод дорегистра. Если это сделать через обычный запрос, а не предзапрос, то это будет выглядеть так:

Тип метода — POST
URL — 

Body в json:

{
    "name": "Хабр 1",
    "email": "[email protected]",
    "password": "1"
}

Теперь давайте перепишем это как предварительный запрос:

const postRequest = {
  url: '
  method: 'POST',
  body: {
    mode: 'raw',
    raw: JSON.stringify({ 
        email: "[email protected]",
        name: "Хабр 1",
        password: 1
    })
  }
};


pm.sendRequest(postRequest, function (err, res) {
  console.log(err ? err : res.json().message);
});

Добавьте этот код во вкладку «Скрипты → Предварительная заявка» и еще раз нажмите «Отправить». И вот, запрос успешно выполнен!

Но подождите… Что произойдет, если я отправлю запрос повторно? А что произойдет, если предварительный запрос не удастся? Давайте проверим это!

Отправляем запрос повторно — успешно. Что случилось с предварительным запросом? Вы можете проверить это в консоли. Давайте откроем его:

И мы видим, что наш запрос сначала вызвал метод doregister, который вернул в тело ошибку «email уже существует», а затем все равно произошел вызов getuser. Это значит, что вызов запроса не зависит от ошибок в предварительном запросе… Или нет?

Пользователи — это система тестирования, в которой любой из них запрос вернет код 200. Проверить это можно выдернув дорегистр отдельно. При попытке прервать запрос:

  • Отредактируйте URL-адрес, удалив последнюю букву — URL: http://users.bugred.ru/tasks/rest/doregiste.

  • Меняем тип запроса на GET (причем все методы работают только через POST, напомню, система находится на стадии тестирования)

В ответ мы всегда получаем «200 ОК». Давайте попробуем сломать систему. Для этого мы заменим в URL что-то совершенно другое, другой API, который может возвращать ошибки. И мы оставим тело пользователя, и оно упадет на него.

Я изменил URL-адрес на вызов JIRA и записал его как вторую переменную (постЗапрос2). То есть я просто добавил в предзапрос следующий блок кода:

const postRequest2 = {
  url: '
  method: 'POST',
  body: {
    mode: 'raw',
    raw: JSON.stringify({
        email: "[email protected]",
        name: "Хабр 1",
        password: 1
    })
  }
};

pm.sendRequest(postRequest2, function (err, res) {
  console.log(err ? err : res.json().message);
});

Отправляем запрос — да, ошибка!

ЧИТАТЬ   Захарова рассказала об изысканном способе празднования Зеленским Дня смеха

Так что имейте в виду, что стрелять можно только так идемпотентный методкоторый не вылетит при вызове.

Если ваш запрос на создание завершается неудачно, когда «такой объект уже существует в базе данных», вам придется обернуть вызов всевозможными условиями «если объект уже существует, игнорировать его, в противном случае создать».

Но этот случай выходит за рамки нашей статьи. Сейчас наша цель — просто научиться использовать сценарии предварительного запроса в базовой версии. И понять, что с ними будет в том или ином случае. А как отправить запрос мы уже научились!


Как отправить несколько запросов в качестве предварительного запроса

Продолжаем изучать метод getUser. В его ответе много разных полей — было бы здорово, если бы их все заполнил тестовый пользователь. И как?

В общем у пользователей есть метод Создать пользователя, который решает эту проблему в одном запросе. Но давайте предположим, что такого метода не существует. И единственный вариант — сначала создать пользователя через регистрзатем заполните все поля через полное обновление пользователя.

Похоже, это будет легко. Давайте просто напишем 2 предварительных запроса подряд:

pm.sendRequest(req1, done);
pm.sendRequest(req2, done);

Но есть проблема. Функция pm.sendRequests асинхронный. Это означает, что он отправит оба запроса одновременно и не будет ждать завершения req1 перед выполнением req2. И тогда второй запрос прервется, потому что первый еще не обработан, пользователь еще не создан, кто тогда должен обновляться?

Если мы хотим, чтобы запрос req2 обрабатывался строго после выполнения req1, нам нужно вызвать его в sendRequest для req1 (источник этого метода):

pm.sendRequest(req1, function () {
  pm.sendRequest(req2, done);
});

Давайте сделаем именно это! Перепишите сценарий предварительного запроса:

const req_1_create = {
  url: '
  method: 'POST',
  body: {
    mode: 'raw',
    raw: JSON.stringify({ 
        email: "[email protected]",
        name: "Хабр 1",
        password: 1
    })
  }
};

const req_2_update = {
  url: '
  method: 'POST',
  body: {
    mode: 'raw',
    raw: JSON.stringify({ 
        email: "[email protected]",
        name: "Васенька",
        birthday: "01.01.1900",
        gender: "m",
        date_start: "11.11.2000",
        hobby: "Валяться на диване",
        name1: "Тестовый, ясен пень",
        surname1: "Иванов",
        fathername1: "Петров",
        cat: "Маруся",
        dog: "Ушастый",
        parrot: "Васька",
        cavy: "Кто ты?",
        hamster: "Хомяк",
        squirrel: "Белая горячка к нам пришла",
        phone: "333 33 33",
        adres: "адрес 1",
        inn: "123456789012"
    })
  }
};

pm.sendRequest(req_1_create, function () {
  pm.sendRequest(req_2_update, function (err, res) {
  console.log(err ? err : res.json().message); })
});

Отправляем запрос – да! В ответе у нас уже есть имя «Васенька», то есть исправленные данные:

ЧИТАТЬ   Израиль бомбит сектор Газа после того, как Байден обрисовал план прекращения огня

Общий

Postman имеет множество полезных функций, которые упрощают работу с API. Одной из таких функций является pm.sendRequest()который подготавливает тестовые данные для успешного выполнения метода.

Это очень полезно, если ранее вызванные методы идемпотентны и не аварийно завершают работу при повторном выполнении. Если у вас есть сопутствующий функционал, вам не нужно каждый раз ломать голову «как подготовить данные, чтобы этот метод работал?»

Вы можете создать отдельную коллекцию (папку с запросами), которая будет запускаться один за другим, и запускать ее. Или вы можете использовать pm.sendRequest() и запишите все предварительные шаги конкретного метода. Тогда выбор за вами.

Но используя Отправить запрос, помните: эта функция асинхронная! Итак, если вам нужно вызвать один запрос, а затем только второй, используйте эту конструкцию:

pm.sendRequest(req_1, function () {
  pm.sendRequest(req_2, function (err, res) {
  console.log(err ? err : res.json().message); })
})

На сегодня всё, увидимся в следующий раз =)

PS — ищите еще полезные статьи в моем блоге под тегом «полезно». И полезные видео идут мой канал на YouTube

Source

От admin