TL;DR

  • Postman — самый популярный инструмент API-тестирования с 30M+ разработчиков
  • Организуй запросы в Коллекции с папками для связанных эндпоинтов
  • Используй Окружения для переключения между dev/staging/production без изменения запросов
  • Пиши тесты на JavaScript используя pm.test() — выполняются после каждого запроса
  • Newman CLI запускает коллекции в CI/CD пайплайнах

Подходит для: QA-инженеров, изучающих API-тестирование, разработчиков, тестирующих свои API Пропусти, если: Предпочитаешь code-only инструменты (REST Assured, requests) или нужен сложный скриптинг Время чтения: 12 минут

Ты тестируешь API вручную. Копируешь токен из ответа логина, вставляешь в следующий запрос, меняешь URL для staging, повторяешь для production. Это быстро надоедает.

Postman решает эту проблему. Коллекции организуют запросы. Окружения хранят переменные. Тест-скрипты автоматически валидируют ответы. Newman запускает всё в CI/CD.

Начало работы

Установка

Скачай с postman.com/downloads. Доступен для Windows, macOS, Linux и как веб-приложение.

Твой первый запрос

  1. Нажми New → HTTP Request
  2. Введи URL: https://jsonplaceholder.typicode.com/posts/1
  3. Нажми Send
  4. Смотри ответ со статусом, временем и телом
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit..."
}

HTTP методы

МетодИспользованиеПример
GETПолучение данныхПолучить профиль пользователя
POSTСоздание ресурсаСоздать нового пользователя
PUTЗамена ресурсаОбновить всего пользователя
PATCHЧастичное обновлениеОбновить только email
DELETEУдаление ресурсаУдалить пользователя

Коллекции: Организация запросов

Коллекции группируют связанные запросы. Думай о них как о папках для твоих API-тестов.

Создание коллекции

  1. Нажми Collections в sidebar
  2. Нажми + для создания новой коллекции
  3. Назови “User API Tests”
  4. Правый клик → Add Request

Структура коллекции

User API Tests/
├── Authentication/
│   ├── Login
│   ├── Refresh Token
│   └── Logout
├── Users/
│   ├── Get All Users
│   ├── Get User by ID
│   ├── Create User
│   ├── Update User
│   └── Delete User
└── Posts/
    ├── Get User Posts
    └── Create Post

Окружения: Управление переменными

Окружения хранят переменные, которые меняются между контекстами (dev, staging, production).

Создание окружения

  1. Нажми Environments в sidebar
  2. Нажми + для создания нового
  3. Назови “Development”
  4. Добавь переменные:
ПеременнаяInitial ValueCurrent Value
base_urlhttps://api.dev.example.comhttps://api.dev.example.com
api_keydev_key_123dev_key_123

Использование переменных

Ссылайся на переменные двойными фигурными скобками:

GET {{base_url}}/users
Authorization: Bearer {{access_token}}

Области видимости переменных

ОбластьВидимостьИспользование
GlobalВсе коллекцииОбщие для всего
EnvironmentАктивное окружениеURL, credentials по окружениям
CollectionОдна коллекцияДанные конкретной коллекции
LocalОдин запросВременные значения

Установка переменных в скриптах

// Pre-request Script (выполняется до запроса)
pm.environment.set("timestamp", Date.now());
pm.environment.set("random_email", `user_${Date.now()}@test.com`);

// Tests tab (выполняется после ответа)
const response = pm.response.json();
pm.environment.set("user_id", response.id);
pm.collectionVariables.set("last_created_user", response.id);

Написание тестов

Тесты выполняются после каждого запроса. Используй JavaScript с API pm от Postman.

Базовые assertions

// Статус код
pm.test("Status code is 200", function() {
    pm.response.to.have.status(200);
});

// Время ответа
pm.test("Response time is less than 500ms", function() {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// JSON тело
pm.test("Response has correct user ID", function() {
    const response = pm.response.json();
    pm.expect(response.id).to.eql(1);
    pm.expect(response.name).to.be.a('string');
});

// Заголовки
pm.test("Content-Type is JSON", function() {
    pm.response.to.have.header("Content-Type", "application/json; charset=utf-8");
});

Распространенные паттерны тестов

// Проверка длины массива
pm.test("Returns 10 users", function() {
    const users = pm.response.json();
    pm.expect(users).to.be.an('array');
    pm.expect(users.length).to.eql(10);
});

// Проверка структуры объекта
pm.test("User has required fields", function() {
    const user = pm.response.json();
    pm.expect(user).to.have.property('id');
    pm.expect(user).to.have.property('email');
    pm.expect(user).to.have.property('name');
});

// Проверка вложенных свойств
pm.test("Address has city", function() {
    const user = pm.response.json();
    pm.expect(user.address.city).to.be.a('string');
});

// Валидация ответа об ошибке
pm.test("Error response has message", function() {
    if (pm.response.code === 400) {
        const error = pm.response.json();
        pm.expect(error).to.have.property('message');
    }
});

Валидация JSON Schema

const schema = {
    "type": "object",
    "required": ["id", "email", "name"],
    "properties": {
        "id": { "type": "integer" },
        "email": { "type": "string", "format": "email" },
        "name": { "type": "string", "minLength": 1 }
    }
};

pm.test("Response matches schema", function() {
    pm.response.to.have.jsonSchema(schema);
});

Аутентификация

Bearer Token

Authorization: Bearer {{access_token}}

Или во вкладке Authorization:

  1. Выбери Bearer Token
  2. Введи {{access_token}}

Автоматическое обновление токена

// Во вкладке Tests запроса Login
pm.test("Login successful", function() {
    pm.response.to.have.status(200);

    const response = pm.response.json();
    pm.environment.set("access_token", response.access_token);
    pm.environment.set("refresh_token", response.refresh_token);

    // Установить время истечения
    const expiresIn = response.expires_in * 1000;
    pm.environment.set("token_expiry", Date.now() + expiresIn);
});

Data-Driven тестирование

Запускай один запрос с разными данными используя CSV или JSON файлы.

CSV файл (users.csv)

email,name,age
john@test.com,John Doe,30
jane@test.com,Jane Smith,25
bob@test.com,Bob Wilson,35

Использование данных в запросе

// Тело запроса
{
    "email": "{{email}}",
    "name": "{{name}}",
    "age": {{age}}
}

Запуск с данными

  1. Нажми Run на коллекции
  2. Выбери Data → Укажи CSV файл
  3. Установи количество итераций
  4. Нажми Run

Newman: CLI Runner

Newman запускает коллекции Postman из командной строки — необходим для CI/CD.

Установка

npm install -g newman

Базовое использование

# Запустить коллекцию
newman run collection.json

# С окружением
newman run collection.json -e environment.json

# С итерациями
newman run collection.json -n 5

# С файлом данных
newman run collection.json -d users.csv

Интеграция с CI/CD

# .github/workflows/api-tests.yml
name: API Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Newman
        run: npm install -g newman newman-reporter-htmlextra

      - name: Run API Tests
        run: |
          newman run postman/collection.json \
            -e postman/staging.json \
            -r cli,htmlextra \
            --reporter-htmlextra-export reports/api-report.html

      - name: Upload Report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: api-test-report
          path: reports/

AI-Assisted разработка в Postman

AI-инструменты могут ускорить твой workflow в Postman.

Что AI делает хорошо:

  • Генерация тест-скриптов из документации API
  • Создание JSON-схем из примеров ответов
  • Написание скриптов трансформации данных
  • Объяснение ошибок API
  • Конвертация cURL команд в запросы Postman

Что всё ещё требует людей:

  • Проектирование стратегии и покрытия тестов
  • Решение, какие edge cases тестировать
  • Понимание валидации бизнес-логики
  • Отладка периодических сбоев

Полезный промпт:

У меня есть такой ответ API:
{
  "user": {
    "id": 123,
    "email": "test@example.com",
    "profile": {
      "name": "John",
      "age": 30
    }
  },
  "token": "eyJ..."
}

Напиши Postman тесты, которые:
1. Валидируют статус 200
2. Проверяют, что user имеет id, email и profile
3. Проверяют, что profile имеет name и age
4. Сохраняют token в переменную окружения
5. Валидируют время ответа менее 500ms

FAQ

Postman бесплатный для API-тестирования?

Да. Бесплатный тариф Postman включает неограниченные запросы, коллекции, окружения и тест-скрипты. Можно запускать коллекции вручную и использовать Newman для CI/CD. Платные планы добавляют командные workspace, мониторинг, mock-серверы и продвинутые функции.

Как писать тесты в Postman?

Используй вкладку Tests в любом запросе. Пиши JavaScript с API pm от Postman:

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

pm.test("Has user ID", function() {
    const data = pm.response.json();
    pm.expect(data.id).to.exist;
});

Тесты автоматически выполняются после каждого запроса и показывают pass/fail в результатах.

Что такое Newman в Postman?

Newman — CLI-раннер коллекций Postman. Установи через npm install -g newman, затем запускай newman run collection.json. Необходим для интеграции с CI/CD — работает в headless-окружениях, генерирует отчеты и возвращает exit-коды для статуса пайплайна.

Может ли Postman тестировать GraphQL API?

Да. Postman имеет встроенную поддержку GraphQL:

  • Редактор запросов с подсветкой синтаксиса
  • Интроспекция схемы для автокомплита
  • Поддержка переменных для динамических запросов
  • Те же возможности скриптинга, что и для REST

Выбери GraphQL как тип body и пиши свой запрос.

Когда выбирать Postman

Выбирай Postman когда:

  • Команде нужен визуальный инструмент API-тестирования
  • Хочешь быстрое создание тестов без кодирования
  • Нужен шеринг коллекций и коллаборация
  • Создаешь документацию API вместе с тестами
  • Предпочитаешь GUI вместо code-only инструментов

Рассмотри альтернативы когда:

  • Нужна сложная программная логика тестов (REST Assured)
  • Хочешь тесты в том же репо, что и код (pytest + requests)
  • Команда предпочитает TypeScript (Playwright API testing)
  • Нужно нагрузочное тестирование (k6, JMeter)

Официальные ресурсы

Смотрите также