Тестирование бэка: Swagger. Postman
Что такое Swagger?
Postman: посмотреть, как отправлять запросы, настраивать url, метод, заголовки и тело запроса.
Виды авторизации: API токен, Bearer token, basic auth
Вкладка Tests/Scripts в Postman: как добавить в запрос дополнительную проверку на код ответа, на время ожидания ответа.
Переменные в Postman: как добавить переменную окружения и использовать в запросе.
Как в целом можно тестировать бэк: статья от Ольги Назиной.
Чек-лист из этой статьи перенеси себе в шпаргалку и желательно запомнить несколько пунктов оттуда
Тестовый API https://petstore.swagger.io/
1️⃣ Что такое API 🖥️
Описание:
API (Application Programming Interface) — это контракт, который предоставляет программа.
«Ко мне можно обращаться так и так, я обязуюсь делать то и это».
Пример:
Если переводить на русский — это как договор на покупку машины:
Функции API:
API — это набор функций, может быть одна функция или много.
2️⃣ Зачем тестировщику знать API 🔍
Даже если вы тестируете GUI, API всегда есть в системе:
Пример:
Создание пользователя через Postman вместо ручного заполнения формы — экономит много времени.
3️⃣ Контракт и интерфейс 📝
Контракт API = интерфейс. Пользователь работает с GUI, программа — с API.
Пример:
Нажимаете кнопку «загрузить отчет», система вызывает API-функции, которые собирают данные из 10 разных функций, пользователь видит готовый отчет, не зная внутренней реализации.
4️⃣ Вызовы API 🔗
- Система вызывает функции внутри себя
- Система вызывает метод другой системы
- Человек вызывает метод через Postman
- Автотесты дергают методы
5️⃣ Тестирование API ✅
Тестирование API = проверка функциональности через API, чаще Remote API (интеграция двух систем).
6️⃣ Инструменты для тестирования API 🛠️
- Postman — создание, отправка, тестирование HTTP-запросов
- Swagger — документация и тестирование API
- SoapUI — SOAP-сервисы
- Fiddler — анализ HTTP-трафика
- JMeter — нагрузочное тестирование
7️⃣ Swagger 📄
- лёгкость использования
- автоматическая генерация документации
- поддержка разных языков и открытых стандартов
- тестирование и валидация API
8️⃣ HTTP-методы 🌐
POST /pets
{
"name": "doggie",
"status": "available"
}
9️⃣ Postman 🧰
- Создание коллекций запросов
- Тестирование API
- Переменные и окружения
- Collection Runner
- Документирование API
🔟 Скрипты и тесты в Postman 📝
Pre-request Script: выполняется перед запросом
Tests: выполняется после запроса, проверяет ответ
pm.test("Status is ok", function () {
pm.response.to.be.ok;
});
1️⃣1️⃣ Переменные ⚙️
Использование: {{variable_name}}
pm.environment.set("userId", 777);
pm.environment.get("userId");
1️⃣2️⃣ Collection Runner ▶️
1️⃣3️⃣ Консоль Postman 🖥️
console.log(pm.response.json());
1️⃣4️⃣ Практика: создание цепочки запросов 🔄
- GET
https://postman-echo.com/get?userId=777→ сохранитьuserId - POST
https://postman-echo.com/postс телом:
{"userId": {{userId}}, "username": "Bob"}
- Тест на совпадение
userId - Проверка схемы JSON через tv4
- Запуск через Collection Runner с файлом данных
users.json
1️⃣5️⃣ Полезные команды 💻
// Переменные
pm.environment.set("key", "value");
pm.environment.get("key");
// Ассерты
pm.test("value is true", function() {
pm.expect(true).to.be.true;
});
// GET-запрос
pm.sendRequest("https://postman-echo.com/get", (err, res) => console.log(res));
1️⃣6️⃣ Заключение 🏁
Коллекции Postman — живая интерактивная документация, ускоряющая тестирование и разработку.
1️⃣ Введение в тестирование REST API 🛠️
- Ручной тестировщик часто пугается API: «Что проверять, как, с чего начать?»
- Принцип: тестирование API похоже на GUI — сначала тест-дизайн и проверки, потом технические детали (заголовки, тело, параметры).
- Чек-лист: помогает систематически проверять функционал, ничего не упустить.
- Практика будет на методе
doRegisterсистемы Users.
2️⃣ Общий чек-лист проверок ✅
- Тело запроса: соответствует примеру и ТЗ
- Бизнес-логика: позитивные и негативные сценарии
- Параметры: обязательность, корректность, работа разных значений
- Перестановка элементов: заголовки, тело
- Регистрозависимость: заголовки и тело
- Ошибки: не well formed XML / JSON
3️⃣ Тестирование параметров 🧩
Проверки для каждого параметра:
- Корректный параметр (по примеру или документации)
- Обязательность (что если параметр не передан?)
- Бизнес-логика (например, проверка валидных/невалидных комбинаций)
- Регистрозависимость (для текстовых параметров)
- Перестановка параметров (влияет ли порядок на работу метода)
Принцип: тестируем параметры REST так же, как GUI-поля формы.
4️⃣ Тестирование заголовков 📬
- Заголовки из документации должны работать
- Проверка обязательности заголовка (что если не передан)
- Проверка неправильных значений (текст ошибки)
- Позитивные тесты по документации
- Регистронезависимость заголовков
5️⃣ Проверка ответа API 📡
6️⃣ Позитивное vs негативное тестирование 🌈⚠️
- Начинаем с позитивного теста: работает система при нормальных данных
- Негативное тестирование иногда важнее (интеграция с внешними системами)
7️⃣ Порядок тестирования ⏱️
- Примеры из ТЗ → проверяем, что метод работает
- Основной позитивный сценарий → проверяем рабочую цепочку
- Альтернативные сценарии → дополнительные условия
- Негативные сценарии → проверка ошибок и нестандартных данных
- Проверка параметров, заголовков, тела, URL и типа метода
8️⃣ Практика: Users — doRegister 👩💻
{
"email": "milli@mail.ru",
"name": "Машенька",
"password": "1"
}
- Тип запроса: POST
- URL:
http://users.bugred.ru/tasks/rest/doregister - Если пример не уникален → редактируем данные
С Postman (динамический email и имя):
{
"email": "milli{{$randomInt}}@mail.ru",
"name": "Машенька{{$randomInt}}",
"password": "1"
}
9️⃣ Проверка основного позитивного сценария 🎯
- Проверяем, что пользователь реально создан: GUI → поиск пользователя
- Проверяем поля: email, автор, дата изменения
- Проверяем авторизацию: данные работают → регистрация успешна
🔟 Альтернативные сценарии 🔄
- Дополнительные условия из ТЗ:
- Проверяем GUI и SOAP UI, чтобы убедиться, что ограничения соблюдаются
- Маленькие баги: например, регистр автора не совпадает с ТЗ → фиксируем или обновляем документацию
1️⃣1️⃣ Негативные сценарии ❌
- Проверка сообщений об ошибках
- Сначала бизнес-логика, потом API (well-formed JSON/XML)
- Примеры проверки уникальности:
Цель: понять, что ошибка понятна, статус-код корректный
1️⃣2️⃣ Параметры запроса ✍️
- Проверка обязательности
- Перестановка элементов
- Бизнес-логика: если параметры изменены, система корректно реагирует
Принцип: тестируем REST-поля так же, как GUI-поля формы
1️⃣3️⃣ Email: тестовые проверки 📧
- Корректный email → позитивный тест
- Верхний регистр, цифры → TEST77@mail9.ru
- С дефисами, подчеркиваниями, точками
- Некорректные:
1️⃣4️⃣ Name: тестовые проверки 🏷️
- Простая строка
- Разный регистр, спецсимволы
- Максимальная длина: 1 000 / 1 000 000 символов
- Проверка отображения в GUI после запроса
- Проверяем позитивные сценарии
1️⃣5️⃣ Password: тестовые проверки 🔑
- Простой пароль → позитивный тест
- Разные регистры, спецсимволы
- Длинные значения → проверяем верхние границы
- Проверка отображения и функциональности GUI
1️⃣6️⃣ Остальные тесты 🧪
Принцип: API-тестирование проверяет все особенности работы метода, а GUI помогает визуально убедиться, что данные корректно обработаны.
1️⃣ Тестирование заголовков (Headers) 📬
1.1 Основная идея
- Заголовки должны обрабатываться либо на сервере, либо на клиенте.
- Если заголовок никем не обрабатывается → лишний трафик, который не нужен.
- Принцип: меньшее зло — либо заголовок используется, либо не нужен.
1.2 Поведение при отсутствии заголовка
- Используется дефолтное значение (в коде разработчика)
- Заголовок не нужен (например, Postman может сам подставлять hidden-headers)
- Язык (
Accept-Language) важен, иначе сервер может вернуть данные не на том языке
⚠️ Пример: если разработчик зашил русский язык по умолчанию, даже Accept-Language: en-USможет вернуть русский.1.3 Возможные сценарии
1.4 Регистронезависимость
Accept: application/json Accept: APPLICATION/JSON ACCEPT: application/json ACCEPT: APPLICATION/JSON ACcePT: APPlicATIon/JSon
1.5 Подводные камни
- Прокси (например, Nginx) может менять регистр заголовков → система должна корректно обрабатывать
- Hidden-headers в Postman → не тестируем, отправляем запрос чистым curl
1.6 Практика (Users API)
2️⃣ Тестирование тела запроса (Body) 📝
2.1 Основные проверки
- Правильное тело (по примеру ТЗ)
- Различные параметры:
- Бизнес-логика
- Ошибки в бизнес-логике
- Перестановка мест слагаемых
- Регистрозависимость
- Ошибки: не well formed JSON / XML
2.2 Перестановка мест слагаемых 🔀
- API передает пары «ключ:значение», порядок не должен влиять
- Проверяем, что система читает по названию ключа
- В GUI переставить поля нельзя → только в API
{
"name": "Машенька{{$randomInt}}",
"email": "test{{$randomInt}}@mail.com",
"password": "1"
}
2.3 Регистрозависимость 🔠
- Названия ключей чувствительны к регистру (например,
NAMEвместоname→ ошибка) - В Users: регистрозависимость есть → критично для тестирования
2.4 Well formed JSON ✅❌
{
"email": "test@mail.com",
"name": "Машенька",
"password": "1",
}
{
"email": "test@mail.com",
"name": "Машенька",
"password"
}
{
"email": "test@mail.com"
"name": "Машенька"
"password": "1"
}
[ "email": "test@mail.com", "name": "Машенька", "password": "1" ]
3️⃣ Тестирование параметров в URL 🌐
3.1 Общие принципы
3.2 Практика (Jira Cloud API)
- Правильное значение → базовый позитивный тест
- Не передан параметр → проверка обязательности
- Разные состояния объекта:
- свежесозданная
- несколько раз изменённая
- минимально / максимально заполненная
- закрытая / удалённая / несуществующая
- Регистрозависимость ключа (для issue key):
/rest/api/3/issue/test-1 /rest/api/3/issue/TEst-1
1️⃣ Тип метода (HTTP Method) ⚡
1.1 Основная идея
⚠️ Хорошая практика — ловить “неправильные” методы сразу, особенно при интеграции, чтобы потом обновления релиза не тормозились.
1.2 Практика (Users API)
- POST → GET → успешно
- POST → PUT → проверить корректность ответа
- Вывод: иногда API “терпимо” к методу, но это нужно фиксировать для надёжности.
2️⃣ Тело ответа (Response Body) 📦
2.1 Чек-лист проверки
- Поля: какие вернулись, сравнить с ТЗ
- Значения: соответствие ожидаемым
- Текст ошибок: читаемость, информативность
2.2 Сравнение SOAP и REST
2.3 Особенности проверки
- Отсутствие данных на входе (поле не пришло / пустое)
- Пустые поля на выходе → проверяем, соответствует ли документации
2.4 Практика (Users API)
- Базовый запрос → REST и SOAP
- Различие: SOAP возвращает все поля, REST — только основные
- Проверяем бизнес-логику один раз → API-проверка идентична
3️⃣ Перестановка полей и регистрозависимость 🔀🔠
3.1 Перестановка мест слагаемых
- В REST: порядок ключей не должен влиять → проверка “ключ:значение”
- В SOAP: проверка на порядковые номера тегов
3.2 Регистрозависимость тегов (XML)
<EMAIL>ggg55555@mail.com</EMAIL> → работает <EMAIL>ggg55555@mail.com</email> → Bad Request
3.3 Well-formed XML
<wrap:doRegister> <email>ggg5555@mail.com</email <name>Имечко 666</name> <password>1</password> </wrap:doRegister>
- Ответ:
<faultcode>SOAP-ENV:Client</faultcode><faultstring>Bad Request</faultstring> - 🔹 Идея: проверяем адекватность ошибки при некорректной структуре
4️⃣ Статус-коды HTTP 🟢🔴
4.1 Основная схема
4.2 Возможные “нестандартные” коды
4.3 Практика (Users API)
🔹 Итоговый чек-лист проверки doRegister
В первую очередь проверяем бизнес-логику, затем API-аспекты: регистрозависимость, перестановку параметров, корректность JSON/XML, тип метода.
1️⃣ Базовый тест (Пример из ТЗ)
{
"email": "milli{{$randomInt}}@mail.ru",
"name": "Машенька{{$randomInt}}",
"password": "1"
}
- Статус: 200 OK
- Поля ответа:
name: отправленное имяavatar: стандартная аватаркаpassword: хэш пароляbirthday: 0email: отправленный emailgender: ""date_start: 0hobby: ""- Дополнительно:
6️⃣ Тело запроса (Body)
6.1 Перестановка мест параметров
{
"name": "Машенька{{$randomInt}}",
"email": "test{{$randomInt}}@mail.com",
"password": "1"
}
✅ Статус 200, корректный ответ
6.2 Регистрозависимость
{
"email": "test{{$randomInt}}@mail.com",
"NAME": "Машенька{{$randomInt}}",
"password": "1"
}
✅ Статус 200, корректный ответ
6.3 Подмена метода
7️⃣ Вывод
- Тестирование API ≈ тестированию GUI, но с доп. возможностями:
- Всегда начинаем с бизнес-логики (проверка по ТЗ, классы эквивалентности, граничные значения)
- Добавляем API-часть: