Делаем запрос с помощью браузера curl postman
Я начинаю цикл ознакомительных и обучающих статей по Postman. Цель данного цикла — помочь новичкам овладеть этим инструментом и начать применять его в работе. Первая из статей будет вводная, в которой я расскажу для чего нужен Postman, как начать им пользоваться, а так же разберу несколько простых запросов.
В настоящее время, тестировщики достаточно часто сталкиваются с ситуацией, когда задача звучит следующим образом: “Протестируй апиху, пожалуйста, тебе бэкенднер документацию скинул”. В этот момент у многих может случиться ступор. Но опытные тестировщики сразу же подумают о Postman.
Postman предназначен для проверки запросов с клиента на сервер и получения ответа от бэкенда. Можно описать общение Postman с бэкендом в виде диалога:
Postman: “Дай мне информацию по балансу именно этого пользователя”
Backend: “Да, конечно, запрос правильный, получи информацию по балансу этого пользователя”
Такой позитивный диалог происходит в том случае, если ошибок на бэкенде нет и разработчик сделал всё согласно документации. Но не всегда это происходит в таком успешном ключе. В моей практике случались следующие диалоги:
Postman: “Дай мне информацию по балансу именно этого пользователя”
Backend: “Кто я вообще?”
Postman: “Дай мне информацию по балансу именно этого пользователя”
Backend: “Пользователь не найден.”
Описанные выше ответы от бэкенда имеют свой код ошибки, которые приходят в ответе.
В первом случае — это ошибка с кодом 500 (Internal Server Error) внутренняя ошибка сервера, которая говорит о том, что сервер столкнулся с неожиданным условием, которое помешало ему выполнить запрос.
Именно для этого и предназначен Postman — для проверки запросов клиент → сервер по документации, чтобы убедиться, что всё работает на стороне бэкенда.
- Нужно нажать на кнопку “Download the App”
- Далее нужно выбрать свою ОС, скачать файл и установить его.
- После запуска программа предлагает создать запрос, коллекцию, среду, создать МОК-сервер и т.д. Но сегодня будет рассмотрена основная функциональность Postman — это как раз создание коллекций с запросами к API. Следовательно нужно выбрать “Collection”
- Далее нужно будет дать название своей коллекции. Например, это может быть название тестируемого проекта. В моём случае пример одного из запросов будет из Postman Echo, открытой документации от разработчиков Postman.
- Созданная коллекция, которая называется “POSTMAN ECHO”
- Вкладка с запросом , который будет использован для запроса
- URL адрес
- Кнопка отправки запроса
- Параметры запроса
- Параметры ответа
Итак, есть документация, есть Postman, коллекция создана. Что дальше?
Все виды документации по API выглядят примерно одинаково. В любом из видов можно увидеть какой метод нужно использовать, какой URL, какие body, params headers и так далее.
В данном примере через URL уже переданы параметры запроса, а именно: “foo1=bar1&foo2=bar2”. При вставке URL в поле для ввода URL, автоматически подставляются параметры запроса в вкладку “Params”:
Метод работает, данные приходят верные, валидные, всё получилось.
Всё так же, как и при предыдущем методе, только меняется немного параметр запроса:
“title”: “First POST request”,
“body”: “I hope, it’s gonna be work”,
Должно всё выглядеть следующим образом:
В ответе должен прийти текст, который был отправлен в текстовом редакторе из Body, к которому добавится id новой записи, которая была создана на сервере. Также код “201 Created” подтверждает то, что новая запись была создана.
В следующей статье будет рассмотрен менеджмент, структурирование, импорт и экспорт коллекций и запросов.
В этом разделе будем использовать curl для выполнения тех же запросов API сервиса прогноза, которые делали ранее с помощью Postman. Если curl еще не установлен, то читаем вводную инструкцию по установке curl.
👨💻 Создаем запрос к OpenWeatherAPI с помощью curl
- Предположим, что практическое занятие раздела Отправка запросов в Postman выполнено, возвращаемся в Postman.
- В любом запросе кликаем на кнопку Code под кнопкой Save
- В диалоговом окне “Generate Code Snippets” выбираем cURL из выпадающего списка и нажимаем на кнопку Copy to Clipboard
Код Postman для запроса прогноза погоды OpenWeatherMap выглядит в формате cURL следующим образом:
Postman добавил свою информацию о хедере (обозначено -Н) Тэги добавленного заголовка можно удалить. Также можно удалить знаки “", они добавлены для читаемости текста.
Кроме того, обратите внимание, что в Windows нужно изменить одинарные кавычки на двойные, потому что одинарные кавычки не поддерживаются в терминале Windows по умолчанию.
Вот запрос curl с удаленными символами -H и обратной косой чертой, а одинарные кавычки преобразованы в двойные кавычки:
- Curl доступен на MacOS по умолчанию. Если на Windows curl еще не установлен, то инструкции по установке по ссылке, нужно выбрать одну из бесплатных версий с правами Администратора.
- Открываем терминал
- на OS Windows нажимаем ctrl+R и вводим команду cmd , Правой кнопкой мыши вызываем меню и выбираем Paste для вставки запроса.
- на MacOS открываем iTerm или терминал, нажимая cmd+Пробел и вводим команду Terminal Вставляем запрос в командную строку и жмем кнопку Enter .
Ответ от OpenWeatherMap на наш запрос будет выглядеть так:
Этот запрос минимизирован. Вы можете развернуть его, например на сайте JSON pretty print или, на MacOS с установленным Python добавив | python -m json.tool в конец cURL запроса, чтобы минимизировать JSON в ответе (Для подробностей можно посмотреть ветку на Stack Overflow по этой теме).
- Самостоятельно сделаем curl запрос на 5-дневный прогноз, сохраненный в Postman. И третий API запрос OpenWeatherMap? сохраненный в Postman тоже выполняем в curl
Одинарные и двойные кавычки в запросах curl на Windows
При использовании curl на Windows могут возникнуть проблемы с одинарными и двойными кавычками.
Проблема в том, что содержимое тела запроса часто форматируется в JSON, что требует двойных кавычек. Поскольку вы не можете использовать двойные кавычки внутри других двойных кавычек, вы столкнетесь с проблемами при отправке запросов curl в этих сценариях.
Наш пример API прогноза погоды не позволяет использовать что-либо, кроме метода GET, поэтому для этого упражнения, чтобы использовать другие методы с curl, мы будем использовать API-интерфейс petstore. На самом деле мы не будем использовать интерфейс Swagger (о чем мы поговорим позже), на данный момент нам просто нужен API, с помощью которого мы можем создавать, обновлять и удалять контент.
В этом разделе мы создадим нового питомца с помощью Petstore API, обновим его, получим id питомца, удалим его, а затем попытаемся получить удаленного питомца.
Создание питомца
Создаем текстовый файл и пишем в нем следующий код (эта информация будет передана в параметре -d curl запроса):
Меняем значение в первом id и поменяем кличку с fluffy на какое-нибудь другое
Note: Лучше использовать уникальный id и такую кличку, которую вряд ли кто придумает. Также не стоит начинать id с 0 .Сохраняем наш файл в формате .json в каталоге, к которому можно легко получить доступ с терминала, например, в пользовательском каталоге (на Mac, Users / YOURUSERNAME - заменяем YOURUSERNAME реальным именем пользователя на вашем компьютере).
В Терминале /командной строке переходим в каталог с сохраненным файлом.
Для перехода по каталогам:
- На MacOS находим свой текущий рабочий каталог, набрав pwd . Переход на уровень выше при помощи команды cd ../ . Переход на уровень ниже при помощи команды cd pets , где pets - это имя каталога, в который нужно попасть. Вводим ls , чтобы просмотреть содержимое каталога.
- На Windows смотрим в строку пути, чтобы понять в какой директории находимся. Переход на уровень выше при помощи команды cd ../ . Переход на уровень ниже при помощи команды cd pets , где pets - это имя каталога, в который нужно попасть. Вводим dir чтобы посмотреть список директорий в текущей директории.
После того, как вы перешли в Терминале/командной строке в каталог с сохраненным JSON файлом, создаем нашего питомца следующим curl запросом:
Content-Type указывает тип контента, представленного в теле запроса. Accept указывает тип контента, который мы примем в ответе.
Ответ будет выглядеть примерно так:
Проверьте, что в ответе кличка именно вашего питомца.
Tip: Не стесняйтесь выполнить этот же запрос несколько раз. REST API являются «идемпотентными», что означает, что выполнение одного и того же запроса более одного раза не приведет к дублированию результатов (мы просто создаем одного питомца, а не нескольких питомцев). Тодд Фредрих объясняет идемпотентность, сравнивая ее с беременной коровой. Допустим, вы привели быка, чтобы забеременеть. Даже если бык и корова спариваются несколько раз, результатом будет всего одна беременность, а не беременность для каждого сеанса спаривания.Обновление питомца
А что если питомец не любит свое имя?
Изменим ему имя на другое используя метод обновления.
В файле .json сданными питомца изменим его имя.
Вместо метода POST используем метод PUT для обновления имени (в остальном запрос не меняется):
В ответе будет новое имя питомца.
Получение имени питомца при помощи ID
Теперь узнаем имя питомца, передав его ID в конечную точку /pet/:
В файле .json скопируем значение id питомца.
В команде curl заменим 51231236 на id своего питомца и узнаем информацию о нем:
В ответе будет информация о нашем питомце:
Можно отформатировать JSON, вставив его в инструмент форматирования JSON
Удаление питомца
“Извини, сынок, собака была бешеной, пришлось пристрелить” (© “Маска” фильм, 1994)
Для удаления питомца используем метод DELETE. В примере ниже меняем 5123123 на id своего питомца:
Теперь проверим, получилось удалить питомца. Используем метод GET в этой же команде
Ответ будет примерно таким:
Этот пример позволил нам увидеть, как можно работать с curl для создания, чтения, обновления и удаления ресурсов. Эти четыре операции называются CRUD и являются общими почти для каждого языка программирования.
Хотя Postman, вероятно, проще в использовании, curl используется на уровне мощности. Команды тестирования часто создают сложные тестовые сценарии, которые повторяют множество запросов curl.
Импорт curl в Postman
Можно импортировать команды curl в Postman выполняя следующее:
Открываем новую вкладку в Postman и нажимаем Import в левом верхнем углу.
В диалоговом окне выбираем вкладку “Paste Raw Text” и вводим команду:
Указываем свой Id питомца и проверяем, что нет лишних пробелов.
Нажимаем на кнопку Import
Закрываем диалоговое окно, если не закрылось автоматически.
Нажимаем кнопку Send (Если питомец был удален, то будет выдана ошибка “Pet not found”)
Экспорт Postman в curl
Можно экспортировать Postman в curl, выполнив следующие действия:
- При желании выбираем один из наших запросов API OpenWeatherMap в Postman.
- Нажимаем кнопку Code
- Выбираем curl в выпадающем списке.
- Копируем отрывок кода
Вы можете видеть, что Postman добавляет дополнительную информацию заголовка ( -H 'Postman-Token: de0da6b7-1dbc-44d6-acc1-9741f05a7bf1' \ -H 'cache-control: no-cache' ) в запрос. Эта дополнительная информация заголовка не нужна и может быть удалена.
- Удаляем обратный слэш и разрывы строк. На Windows еще меняем одинарные кавычки на двойные.
- Вставляем команду curl в терминал и смотрим результат.
Благодаря функциям импорта и кода Postman можно легко переключаться между Postman и curl.
Статья состоит из трех частей. В первой описаны первые шаги работы с запросами — откуда их брать и как добавить. Во второй — пример автоматизации создания юзеров. В третьей — отправка нескольких запросов и имитация действий пользователя в приложении.
Как работает Постман? Это программа, которая взаимодействует с приложением отправляя API запросы. Благодаря тому, что мы общаемся напрямую с сервером, это ускоряет работу и позволяет изменять сами запросы и смотреть, как сервер будет на это реагировать.
Для начала, нужно создать первый запрос.
Данные о запросах л у чше всего брать из документации или Сваггера (“Swagger”) и его аналогов. Там будут описаны все существующие запросы и их примеры. Если доступа к документации нет, можно взять запросы из логов приложения (из Андроид студии, Xcode, консоли разработчика в браузере).
Самый простой способ импортировать запросы из сваггера в постман — это использовать curl-ы. Их можно найти в сваггере и иногда в логах приложения (это зависит от системы логирования, которая используется в приложении). Для того, чтобы получить curl в сваггере, выполняем там запрос, ищем строку “Curl” и копируем ее.
В самом постмане нажимаем:
Import > Past row text > вставляем -curl > Import.
Постман сам преобразует -curl в готовый запрос, который дальше нужно просто сохранить.
Если нужно создать запрос вручную, то:
- Нажимаем New > Request > создаем или выбираем папку, в которой запрос будет храниться
- Выбираем тип запроса (GET, POST, DELETE, и т.д.)
- Заполняем Headers и Body, если необходимо
- Нажимаем Save
Теперь, когда есть первый запрос, можно автоматизировать его отправку на сервер. Чтобы это сделать, нужно:
1. Добавить запрос, который будем повторять, в отдельную папку
2. Рядом с папкой нажать кнопку “>”
3. Выбрать Run collection
4. Проверить окружение (“Environment”), задать кол-во раз, сколько нужно повторить действие (“Iterations”). Если нужно, чтобы между отправкой каждого запроса постман делал паузу, задаем время паузы в “Delays”
5. Нажимаем Run
6. Проверяем, что все наши запросы отработаны
Здесь появляется проблема, что на сервер мы отправляем 10 одинаковых запросов на создание пользователя с одинаковым мэйлом. И сервер обрабатывает только первый, на второй и последующие появляется ошибка.
Чтобы решить это, создадим переменную >. В самом запросе вместо почты прописываем ее. Также создаем новое окружение, в которое добавляем нашу переменную.
И создаем .csv файл в котором есть заголовок email (как наша переменная) и 10 адресов. Фейковые адреса и другие данные можно создавать с помощью сервиса Mockaroo.
Сохраняем наш измененный запрос и повторяем запуск коллекции. Только теперь в 4 пункте добавляем наш .csv файл в строку Data. Запускаем и ждем. Когда все отработано, опять проверяем, что в ответах сервера нет ошибок.
Допустим, что теперь нужно для наших десяти пользователей создать каждому профиль ребенка. Тогда нам нужно уже два запроса: логин и создание ребенка. Создаем эти запросы в отдельную папку, которую и будем запускать.
Дальше смотрим, какие данные могут понадобиться: почта и пароль пользователя, ключ доступа (X-Access-Token) для запроса создания ребенка. Эти данные будут меняться от запроса к запросу, поэтому вынесем их как переменные. Если почту и пароль можно вынести в отдельный .csv файл как в прошлом примере, то токен генерируется сервером в ответ на запрос на логин:
После замены данных переменными (и добавления новых переменных в окружение) запросы будут выглядеть так:
Для этих целей на странице запроса есть две вкладки: “Pre-request Script “и “Tests”. В них можно прописывать скрипты на JavaScript. Скрипты из вкладки “Pre-request Script” выполняются до того, как будет отправлен запрос, из второй (“Tests”) — после.
Теперь осталось только вставить нужный нам скрипт в запрос на логин. Во втором запросе можно ничего не добавлять — т.к. у нас есть переменная token, постман после копирования токена из запроса просто подставит ее в переменные и во втором запросе возьмет ее из окружения.
Во вкладке “Snippets” есть примеры запросов, но можно написать любой скрипт самому.
В моем примере скрипт читает ответ от сервера (первая строка), и копирует значение “accessToken” в созданную переменную > (вторая строка):
Сохраняем запросы, проверяем, все ли данные внесены. Все мои тестовые юзеры имеют одинаковый пароль, поэтому переменная > задана в окружении. В .csv файле прописываю значения для переменной email (как в предыдущем примере), а переменную > наш скрипт сам скопирует в окружение.
Запускаем коллекцию, добавляем файл с почтами, проверяем результат.
Итого, план действий, чтобы запускать коллекции с запросами, которые связаны между собой данными:
Вместо вывода вот несколько примеров, как можно автоматизировать процессы с помощью Postman:
Читайте также: