Ответ
Использовал Postman как основной инструмент для ручного, автоматизированного и документационного тестирования REST API.
1. Организация и ручное тестирование:
- Создавал Коллекции (Collections) для группировки запросов по функциональным модулям (например,
User API,Order API). - Активно использовал Переменные (Variables) на уровне коллекции, окружения и глобальные для управления конфигурацией (base URL, токены, тестовые данные).
- Настраивал Pre-request Scripts для автоматической подготовки данных (например, генерация уникального email) и Tests для валидации ответов.
2. Написание автоматизированных проверок (Tests):
Тесты пишутся на JavaScript с использованием встроенной библиотеки pm (Postman Sandbox).
Пример комплексного теста для эндпоинта создания пользователя:
// Проверка статус-кода и времени ответа
pm.test("Status is 201 Created", function () {
pm.response.to.have.status(201);
});
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Валидация структуры и данных JSON-ответа
pm.test("Response has correct JSON schema and data", function () {
const responseJson = pm.response.json();
const jsonData = responseJson.data;
// Проверка наличия обязательных полей
pm.expect(jsonData).to.have.property("id").that.is.a("number");
pm.expect(jsonData).to.have.property("email", pm.variables.get("testEmail"));
// Проверка по JSON Schema (альтернатива)
const schema = {
type: "object",
properties: {
data: {
type: "object",
required: ["id", "email", "createdAt"],
properties: {
id: { type: "number" },
email: { type: "string", format: "email" }
}
}
}
};
pm.expect(tv4.validate(responseJson, schema)).to.be.true;
});
// Сохранение ID пользователя в переменные окружения для последующих запросов
const userId = pm.response.json().data.id;
pm.environment.set("createdUserId", userId);
3. Автоматизация и интеграция в CI/CD:
- Запуск коллекций из командной строки с помощью Newman (CLI-раннер для Postman).
- Интеграция с Jenkins/GitLab CI для прогона API-тестов после каждой сборки.
- Генерация и публикация отчётов о выполнении тестов (HTML, JUnit).
4. Документирование и совместная работа:
- Генерация документации API из коллекций.
- Синхронизация коллекций через Postman Workspaces для командной работы.
- Импорт спецификаций OpenAPI (Swagger) для быстрого создания начального набора запросов.
Ответ 18+ 🔞
Ну, слушай, история такая. Я тут с этим Postman'ом, блядь, как с родным братаном, внатуре. Всё на нём делал: и ручками поковырять, и автоматом гонять, и документацию на коленке сварганить — одним словом, полный фарш для REST API.
1. Организация и ручное тестирование:
Ну, первым делом, конечно, Коллекции (Collections). Это ж святое! Раскидал все запросы по полочкам: вот это User API, а это — Order API, чтобы не искать, как хуй в проруби. А потом, блядь, додумался до Переменных (Variables). Ну, гениально же! Засунул туда base URL, токены, тестовые данные — и не надо, сука, каждый раз вручную менять. Жизнь стала проще, как три копейки. Ещё эти Pre-request Scripts и Tests — вообще песня. Перед запросом данные сам себе сгенерирует, а после — проверит, не накосячил ли сервер. Красота!
2. Написание автоматизированных проверок (Tests):
А вот это, блядь, где начинается магия. Пишешь на JavaScript, используешь ихнюю библиотеку pm — и понеслась. Смотри, какой я для создания пользователя тест накатал, просто чтоб ты понимал масштаб:
// Проверка статус-кода и времени ответа
pm.test("Status is 201 Created", function () {
pm.response.to.have.status(201);
});
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Валидация структуры и данных JSON-ответа
pm.test("Response has correct JSON schema and data", function () {
const responseJson = pm.response.json();
const jsonData = responseJson.data;
// Проверка наличия обязательных полей
pm.expect(jsonData).to.have.property("id").that.is.a("number");
pm.expect(jsonData).to.have.property("email", pm.variables.get("testEmail"));
// Проверка по JSON Schema (альтернатива)
const schema = {
type: "object",
properties: {
data: {
type: "object",
required: ["id", "email", "createdAt"],
properties: {
id: { type: "number" },
email: { type: "string", format: "email" }
}
}
}
};
pm.expect(tv4.validate(responseJson, schema)).to.be.true;
});
// Сохранение ID пользователя в переменные окружения для последующих запросов
const userId = pm.response.json().data.id;
pm.environment.set("createdUserId", userId);
Видишь? Сначала смотрю, статус 201 ли пришёл и не тормозит ли всё, как черепаха в сиропе. Потом выковыриваю из ответа JSON и начинаю его, блядь, допрашивать: «А ID где? А email тот ли, что я просил?». А ещё можно схемой придавить — вообще идеально. И в конце, хитрая жопа, сохраняю ID созданного юзера в переменные, чтобы потом его же и протестировать. Автоматизация, ёпта!
3. Автоматизация и интеграция в CI/CD: А это уже для больших пацанов. Коллекции накатал — теперь надо их в пайплайн воткнуть. Берёшь Newman (это такой консольный бегунок для Postman), и он всё за тебя прогоняет. Интегрировал с Jenkins'ом — теперь после каждой сборки эти тесты сами бегают и орут, если что-то пошло не так. А отчёты, блядь, какие красивые делает — хоть начальству показывай, хоть на стенку вешай.
4. Документирование и совместная работа: Ну и вишенка на торте. Postman умеет из коллекций документацию генерить — сиди и не парься. Для команды — Workspaces, где всё синхронизируется, чтобы не было, как в том анекдоте: «Я файл обновил, а ты где взял?». А если у тебя уже есть Swagger-спека, то её можно импортнуть — и половина запросов сама создастся. Вообще, ёперный театр, удобно до безобразия.
Вот так вот, простыми матерными словами. Инструмент — огонь, если знать, куда тыкать.