Как вы организуете API-тесты в Postman с помощью коллекций?

Ответ

В Postman коллекции — это основной инструмент для структурирования, выполнения и автоматизации API-тестов. Вот как я их организую:

1. Логическая структура: Коллекции группируются по бизнес-доменам или сервисам.

E-Commerce API Tests (Collection)
├── Auth (Folder)
│   ├── POST /login
│   ├── POST /logout
│   └── GET /profile
├── Products (Folder)
│   ├── GET /products
│   └── POST /products
└── Orders (Folder)
    ├── POST /orders
    └── GET /orders/{id}

2. Использование переменных: Для гибкости и поддержки разных сред.

  • Переменные коллекции: {{base_url}}, {{api_version}}.
  • Переменные окружения: Отдельные наборы для dev, stage, prod.
  • Динамические переменные: Генерация токенов и сохранение их через скрипты.

3. Пред- и пост-скрипты: Для автоматизации подготовки данных и проверок. Пример пред-скрипта для авторизации:

// Pre-request Script для запроса, требующего токен
const loginResponse = pm.sendRequest({
    url: pm.variables.get("base_url") + "/login",
    method: 'POST',
    header: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        email: pm.variables.get("test_user_email"),
        password: pm.variables.get("test_user_password")
    })
});
// Сохраняем полученный токен как переменную для текущего запроса
pm.variables.set("auth_token", loginResponse.json().access_token);

4. Автотесты в разделе Tests:

pm.test("Status is 200 OK", function () {
    pm.response.to.have.status(200);
});

pm.test("Response has JSON body", function () {
    pm.response.to.be.json;
});

pm.test("Response contains expected user ID", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.user.id).to.eql(pm.variables.get("expected_user_id"));
});

Коллекции экспортируются в JSON для версионирования в Git и запускаются через Postman CLI (Newman) в CI/CD пайплайнах.

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут архитектор API-тестов подъехал! Коллекции в Postman — это ж, блядь, как квартира в новостройке: если сразу не расставить папки по полочкам, потом сам в этом пиздеце не разберёшься. Вот как я эту кашу структурирую, чтобы не было мучительно больно.

1. Логика, а не бардак. Группирую всё по доменам, как будто это не тесты, а отделы в магазине. Чтобы не искать авторизацию между заказами на пиццу, понимаешь?

E-Commerce API Tests (Collection)
├── Auth (Folder)
│   ├── POST /login
│   ├── POST /logout
│   └── GET /profile
├── Products (Folder)
│   ├── GET /products
│   └── POST /products
└── Orders (Folder)
    ├── POST /orders
    └── GET /orders/{id}

2. Переменные — наше всё. Без них ты как без рук, будешь в каждом запросе урлы руками тыкать, а потом на проде хуйню отправишь.

  • В коллекции: {{base_url}}, {{api_version}} — фундамент, ёпта.
  • Окружения: Отдельные для dev, stage, prod. Чтобы на прод не насрать случайно, волнение ебать.
  • Динамические: Токены, которые сами себя генерируют и подставляют — магия, блядь!

3. Скрипты — мозги коллекции. Пред-скрипт — это как зайти в бар и сказать «как обычно», а тебе уже несут стакан. Автоматизация, сука! Вот, смотри, как токен перед запросом добывается:

// Pre-request Script для запроса, требующего токен
const loginResponse = pm.sendRequest({
    url: pm.variables.get("base_url") + "/login",
    method: 'POST',
    header: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        email: pm.variables.get("test_user_email"),
        password: pm.variables.get("test_user_password")
    })
});
// Сохраняем полученный токен как переменную для текущего запроса
pm.variables.set("auth_token", loginResponse.json().access_token);

4. А тесты — это наши охранники. Они стоят и проверяют, не пронес ли кто хуйню в ответе.

pm.test("Status is 200 OK", function () {
    pm.response.to.have.status(200); // Не 500, слава богу!
});

pm.test("Response has JSON body", function () {
    pm.response.to.be.json; // А то вдруг HTML-страницу с ошибкой прислали
});

pm.test("Response contains expected user ID", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.user.id).to.eql(pm.variables.get("expected_user_id")); // А пользователь-то тот ли?
});

И главный финал — всю эту красоту в JSON выгружаем и в Git пихаем. А потом в CI/CD пайплайне через Newman (это такой Postman без головы, CLI-версия) запускаем. Чтобы если что-то сломалось, мы об этом узнали первыми, а не от разъярённого продакта, у которого, блядь, терпения ноль ебать. Вот так-то, просто и с концами.