Использование сценария предварительного запроса в Postman

Ссылка на сайт к исходной статье.

Введение

Postman стал вариантом по умолчанию для создания и тестирования запросов API. Хотя мы можем быть знакомы с созданием базовых HTTP-запросов с помощью postman, это дает нам гораздо больше возможностей с точки зрения программирования вещей вокруг запроса API. В реальных сценариях есть три способа обработки параметров и их дальнейшей обработки.

Во-первых, это когда параметры — это просто ввод данных пользователем, и вы можете просто использовать их для дальнейшей обработки, такой как выборка из БД.

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

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

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

Введите сценарии предварительного запроса. Postman позволяет вам написать сценарий предварительного запроса, который будет выполняться перед фактическим вызовом API и выполнять все действия, которые выполнялись вручную. Давайте рассмотрим оба случая на подробном примере.

Генерация параметров в реальном времени

Существуют API, которые требуют, чтобы у вас был параметр (или заголовок), который генерируется в режиме реального времени, т. е. его значение будет меняться при каждом запросе API. Давайте посмотрим на пример:

Мы должны сделать вызов POST API для который будет успешным только в том случае, если запрос содержит заголовок hmacToken. Этот hmacToken генерируется путем подписания строки, содержащей ваш токен и временную метку, секретом. Если бы мы сделали это без сценария предварительного запроса, нам пришлось бы запустить этот алгоритм, использовать вывод в качестве заголовка и выполнить вызов. Мы можем автоматизировать это следующим образом:

  • Сделайте базовый запрос с помощью как URL и метод как POST.
  • Добавьте заголовок с hmacToken в качестве ключевого и {{auth}} как ценность. Этот auth является динамическим значением и будет генерироваться с использованием сценария предварительного запроса.

Запрос с динамическим заголовком

  • Сценарии предварительного запроса позволяют вам писать javascript, и, следовательно, мы можем написать код js для реализации функции пения. в Pre-request Script добавьте следующий фрагмент кода:
const crypto = require('crypto-js');
const token = "myLongLivedToken"
const secret = "iKillFascists"

const signToken = () => {
    const dateTime = (new Date).getTime().toString()
    const stringToSign = `${token}-${dateTime}`;
    const hash = crypto.HmacSHA256(stringToSign, secret)
    return crypto.enc.Base64.stringify(hash);
}

const signedToken = signToken()

console.log(`successfully generated token : ${signedToken}`)

pm.globals.set("auth", signedToken);
  • Это простой скрипт для генерации хэша HmacSHA256 с использованием crypto-js, который встроен в песочницу почтальона. Обратите внимание, что строка, которую мы подписываем с помощью секрета, содержит метку времени и, следовательно, всегда будет отличаться. Единственная часть, которая специфична для почтальона, это pm.globals.set("auth", signedToken); . Здесь мы присваиваем signedToken к переменной auth. Эту авторизацию теперь можно использовать в параметрах поста, заголовках, теле или даже URL-адресе.

  • Теперь мы можем продолжить и сделать вызов API. Теперь он должен использовать подписанный токен в hmacToken заголовок. Чтобы убедиться в этом, мы воспользуемся еще одной очень удобной вещью, которую предоставляет postman, Postman Console. Эта консоль покажет нам все журналы консоли в нашем скрипте, а также детали ответа на запрос. Использовать cmd+alt+c (ctrl+alt+c на окнах), чтобы открыть консоль и Send запрос апи.

Консоль почтальона

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

Цепочка запросов

Иногда для выполнения операции нам нужно связать несколько запросов API, т.е. ответ от первого вызова API используется в качестве параметров запроса для второго вызова API. Вместо того, чтобы делать два вызова API и копировать данные, мы можем использовать сценарий предварительного запроса для того же самого. Давайте посмотрим на пример

Мы должны сделать вызов POST API для который будет успешным, только если у нас есть запрос с заголовком app-token. мы получаем это app-token сделав еще один вызов GET http://www.mocky.io/v2/5e75f1ac2f00006b00985f62. Мы можем автоматизировать весь поток следующим образом:

  • Сделайте базовый запрос с помощью как URL и метод как POST.
  • Добавьте заголовок с app-token в качестве ключевого и {{token}} как ценность. Этот token является динамическим значением и будет получено с использованием сценария предварительного запроса.
  • в Pre-request Script добавьте следующий фрагмент кода:
const reqObject = {
  url: 'http://www.mocky.io/v2/5e75f1ac2f00006b00985f62',
  method: 'GET',
  header: 'Content-Type:application/json'
};

pm.sendRequest(reqObject, (err, res) => {
    const {token} = res.json()
    console.log(`fetched token ${token}`)
    pm.globals.set("token", token);
});
  • мы используем pm.sendRequest сделать запрос API, а затем назначить ответ переменной token который является значением динамического заголовка.
  • Теперь мы можем продолжить и сделать вызов API. Теперь он должен использовать извлеченный токен в app-token заголовок. Мы снова воспользуемся консолью почтальона, чтобы подтвердить это.

почтальон-цепочка.png

Нам удалось успешно объединить запросы и избавить нас от ручной работы по выполнению дополнительного вызова API. Это единовременное усилие по написанию сценария, но оно сэкономит вам массу сил и времени.

Как это работает?

Postman предоставляет нам среду выполнения JavaScript под названием Postman Sandbox. Эта песочница доступна нам в сценариях предварительного запроса и, следовательно, позволяет нам запускать javascript. Кроме pm.globals а также pm.sendRequest мы использовали в этой статье песочницу почтальона, которая предоставляет нам массу дополнительных возможностей песочницы. API чтобы помочь нам реализовать сложную логику в скрипте.

Вывод

Мы узнали, как автоматизировать использование динамических параметров путем их генерации или получения через другой вызов API. Это очень удобно, особенно при аутентифицированных вызовах, когда токены аутентификации очень недолговечны.

Нравится этот пост?
Вы можете найти больше в твиттере: @arbazsiddiqui_
Или посетите мой Веб-сайт
Или присоединиться к Новостная рассылка
Спасибо за чтение!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *