Урок по треку API и бэкенд для тестировщика 7 мин

Postman, Insomnia и curl за 7 минут

Коллекции, окружения и переменные, тест-скрипты, Newman в CI, curl и DevTools, прокси и моки.

На собесе на QA почти всегда просят рассказать, как вы тестируете API руками, а иногда дают Postman и живой эндпоинт. Разберём инструменты по задачам.

Postman: основа

  • Коллекция: папки с запросами. Можно экспортировать в JSON и положить в git.
  • Окружение (environment): набор переменных под стенд: baseUrl, логины, токены.
  • Переменные пишутся в двойных фигурных скобках: {{baseUrl}}/users/{{userId}}.

Области переменных от широкой к узкой: глобальные, коллекция, окружение, данные итерации, локальные. Узкая перекрывает широкую: если token есть и в коллекции, и в окружении, подставится значение из окружения. Путаница с областями частая причина «почему ушёл старый токен».

Скрипты

У запроса, папки и коллекции есть два вида скриптов на JavaScript:

  • Pre-request: до отправки. Сгенерировать данные, получить токен, подписать запрос.
  • Post-response (раньше вкладка Tests): после ответа. Проверки и сохранение значений.
pm.test("заказ создан", () => {
  pm.response.to.have.status(201);
  const body = pm.response.json();
  pm.expect(body.status).to.eql("new");
  pm.collectionVariables.set("orderId", body.id);
});

Следующий запрос использует {{orderId}}. Так строятся цепочки: создать, прочитать, изменить, удалить. Схему ответа проверяет pm.response.to.have.jsonSchema(schema).

Запуск пачкой и в CI

  • Collection Runner прогоняет коллекцию в Postman. С файлом данных CSV или JSON каждая строка становится итерацией, а колонки переменными: так делают data-driven тесты.
  • Newman запускает коллекцию из командной строки, его ставят в CI:
newman run api.postman_collection.json -e stage.postman_environment.json -d users.csv -r cli,junit

Есть и Postman CLI от самого Postman. Секреты в коллекцию не коммитят: передают переменными CI.

Insomnia и Bruno

Insomnia похож на Postman: коллекции, окружения, поддержка REST, GraphQL, gRPC и WebSocket. Bruno хранит коллекции обычными файлами в репозитории и работает офлайн, поэтому его выбирают команды, которым важно ревьюить тесты в git. Принципы везде одинаковы, на собесе важнее понимание, чем конкретная кнопка.

curl

Нужен, когда под рукой только терминал, и для баг-репортов: команда воспроизводит запрос однозначно.

curl -i -X POST https://api.shop.ru/orders \
  -H "Authorization: Bearer eyJ..." \
  -H "Content-Type: application/json" \
  -d '{"productId": 7}'
  • -i показать заголовки ответа, -I отправить HEAD, -v подробности, включая TLS.
  • -d тело. С ним curl сам шлёт POST, но с типом формы application/x-www-form-urlencoded. Для JSON добавляйте заголовок или используйте --json.
  • -L следовать за редиректами, -u user:pass Basic-авторизация.

DevTools браузера

Вкладка Network: все запросы страницы, заголовки, тело, тайминги. Copy as cURL копирует запрос с заголовками и cookie, его можно вставить в терминал или импортировать в Postman. HAR-файл удобно приложить к багу, но в нём ваши cookie и токены: чистите перед публикацией.

Прокси для мобильных

Charles, Fiddler, mitmproxy перехватывают трафик телефона. Нужно:

  1. Указать прокси в настройках Wi-Fi.
  2. Установить и сделать доверенным корневой сертификат прокси.
  3. На Android, начиная с 7-й версии, приложение по умолчанию не доверяет пользовательским сертификатам, нужна тестовая сборка с разрешением. SSL pinning тоже отключают в тестовой сборке.

Главная польза прокси не в просмотре, а в подмене: вернуть 500, пустой список, огромное поле, задержку, и посмотреть, как клиент это переживёт.

Моки

Когда зависимость не готова или нестабильна, её заменяют мок-сервером: моки Postman, WireMock, Mockoon, MockServer. Мок умеет то, чего не дождёшься от настоящего сервиса: таймаут, 503, битый JSON.

Частые ошибки

  • Хранить пароли и боевые токены в экспортированной коллекции.
  • Писать тесты, зависящие от порядка запуска.
  • Проверять только status, без тела и схемы.
  • Забыть Content-Type при отправке JSON через curl.

Что спросят на собесе

  • Как вы организуете коллекцию в Postman?
  • Как передать значение из одного запроса в другой?
  • Что такое окружения и области переменных?
  • Как запустить коллекцию в CI?
  • Как посмотреть запросы мобильного приложения?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.