Lesson 21 of 26
Урок 21 — Postman: полное руководство для QA
Название: Postman — инструмент №1 для тестирования API
Описание: Полное руководство по Postman для QA-инженера: интерфейс, Collections, Environment, Variables, автоматические тесты, Pre-request Scripts, newman для CI/CD.
Почему это важно для QA: Postman — это стандарт в индустрии. Без его знания невозможно тестировать API. Он используется повсеместно — от стартапов до крупных корпораций.
1. Что такое Postman
Postman — это инструмент для тестирования, разработки и документирования API. Позволяет отправлять HTTP-запросы, проверять ответы и автоматизировать API-тесты без написания кода.
Что можно делать в Postman
- Отправлять любые HTTP-запросы (GET, POST, PUT, PATCH, DELETE)
- Проверять ответы (статус код, тело, заголовки)
- Писать автоматические тесты на JavaScript
- Организовывать запросы в Collections
- Управлять окружениями (dev, staging, production)
- Запускать тесты в CI/CD через newman
- Мокировать API (Mock Server)
2. Интерфейс Postman
┌─────────────────────────────────────────────────────────┐
│ [Collections] [Environments] [History] │ ← левая панель
├─────────────────────────────────────────────────────────┤
│ GET ▼ │ https://api.example.com/users │ [Send] │ ← строка запроса
├─────────────────────────────────────────────────────────┤
│ Params │ Authorization │ Headers │ Body │ Pre-request │ ← вкладки запроса
│ │ │ │ │ Scripts │ Tests│
├─────────────────────────────────────────────────────────┤
│ Status: 200 OK Time: 234 ms Size: 1.2 KB │ ← статус ответа
├─────────────────────────────────────────────────────────┤
│ Body │ Cookies │ Headers │ Test Results │ ← вкладки ответа
│ { "id": 1, "name": "John" } │
└─────────────────────────────────────────────────────────┘3. Первый запрос
Шаги для GET-запроса
1. Открыть Postman → New → HTTP Request
2. Выбрать метод: GET
3. Ввести URL: https://jsonplaceholder.typicode.com/users/1
4. Нажать Send
5. Получить ответ:
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz"
}Шаги для POST-запроса
1. Выбрать метод: POST
2. URL: https://jsonplaceholder.typicode.com/posts
3. Вкладка Body → выбрать "raw" → JSON
4. Ввести тело:
{
"title": "Тестовый пост",
"body": "Содержимое поста",
"userId": 1
}
5. Send → ожидаем 201 Created4. Collections — организация запросов
Collection — это папка для группировки связанных API-запросов.
Структура Collection
📁 Shop API (Collection)
├── 📁 Auth
│ ├── POST Login
│ ├── POST Logout
│ └── POST Refresh Token
├── 📁 Products
│ ├── GET All Products
│ ├── GET Product by ID
│ ├── POST Create Product
│ ├── PUT Update Product
│ └── DELETE Product
├── 📁 Orders
│ ├── GET My Orders
│ ├── POST Create Order
│ └── PATCH Cancel Order
└── 📁 Users
├── GET User Profile
└── PUT Update ProfileСоздание Collection
1. Left sidebar → Collections → + (New Collection)
2. Дать название: "Shop API"
3. Добавить описание: "API для интернет-магазина"
4. Save → внутри создать папки и запросы5. Environments и Variables
Проблема без Environments
URL для dev: http://localhost:3000/api/users
URL для staging: https://staging.shop.com/api/users
URL для prod: https://shop.com/api/users
Без Environments: нужно менять URL в каждом запросе вручную
С Environments: меняем одну переменную и все запросы обновляютсяСоздание Environment
1. Environments → + (New Environment)
2. Название: "Staging"
3. Добавить переменные:
Variable Initial Value Current Value
baseUrl https://staging.shop https://staging.shop
authToken (пусто) eyJhbGciOiJIUzI1NiJ9...
userId (пусто) 42Использование переменных в запросах
URL: {{baseUrl}}/api/users/{{userId}}
Header:
Authorization: Bearer {{authToken}}
В Body:
{
"email": "{{testEmail}}"
}Виды переменных в Postman
| Область | Синтаксис | Видимость |
|---|---|---|
| Global | {{var}} | Весь Postman |
| Environment | {{var}} | Текущий Environment |
| Collection | {{var}} | Вся Collection |
| Local (в скриптах) | pm.variables.get("var") | Текущий запрос |
6. Tests — автоматические проверки
Во вкладке Tests пишем JavaScript для автоматической проверки ответа.
Базовые проверки
// Проверка статус кода
pm.test("Статус код 200", () => {
pm.response.to.have.status(200);
});
// Проверка времени ответа
pm.test("Время ответа < 500мс", () => {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Проверка структуры ответа
pm.test("Ответ содержит поле id", () => {
const body = pm.response.json();
pm.expect(body).to.have.property("id");
pm.expect(body.id).to.be.a("number");
});
// Проверка наличия заголовка
pm.test("Заголовок Content-Type: application/json", () => {
pm.response.to.have.header("Content-Type");
pm.expect(pm.response.headers.get("Content-Type")).to.include("application/json");
});
Продвинутые проверки
// Проверка массива в ответе
pm.test("Список пользователей не пустой", () => {
const users = pm.response.json();
pm.expect(users).to.be.an("array");
pm.expect(users.length).to.be.greaterThan(0);
});
// Проверка структуры каждого элемента
pm.test("Каждый пользователь имеет id, name, email", () => {
const users = pm.response.json();
users.forEach((user) => {
pm.expect(user).to.have.keys(["id", "name", "email"]);
});
});
// Сохранение данных из ответа в переменную для следующего запроса
pm.test("Токен получен и сохранён", () => {
const body = pm.response.json();
pm.expect(body.token).to.be.a("string");
pm.environment.set("authToken", body.token); // сохраняем в Environment
});
7. Pre-request Scripts
Код, выполняемый до отправки запроса. Полезен для подготовки данных.
// Установка текущего времени
const timestamp = new Date().toISOString();
pm.environment.set("currentTimestamp", timestamp);
// Генерация уникального email для теста
const randomNum = Math.floor(Math.random() * 10000);
pm.environment.set("testEmail", `test_${randomNum}@test.com`);
// Динамическое вычисление даты (через 7 дней)
const futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 7);
pm.environment.set("futureDate", futureDate.toISOString().split("T")[0]);
8. Authorization — настройка авторизации
Bearer Token
Authorization вкладка → Bearer Token → вставить {{authToken}}
Basic Auth
Authorization → Basic Auth → Username: admin, Password: secret
Postman автоматически кодирует в Base64 и добавляет заголовок:
Authorization: Basic YWRtaW46c2VjcmV0Авторизация на уровне Collection
1. Нажать на Collection → Edit
2. Authorization → Bearer Token → {{authToken}}
3. Все запросы в Collection наследуют авторизацию
4. Отдельный запрос может переопределить или использовать "Inherit from parent"9. Collection Runner
Запускает все запросы в Collection последовательно.
Как запустить
1. Collection → Run collection (кнопка ▶)
2. Выбрать Environment
3. Задать количество итераций (1, 10, 100)
4. Delay между запросами (опционально)
5. Run → видим результаты всех тестовData Files — тестирование с разными данными
// data.csv:
email,password,expectedStatus
valid@test.com,ValidPass123,200
invalid@test.com,WrongPass,401
,ValidPass123,400
valid@test.com,,400
В Body:
{
"email": "{{email}}",
"password": "{{password}}"
}В Tests:
pm.test(`Статус ${pm.iterationData.get("expectedStatus")}`, () => {
pm.response.to.have.status(parseInt(pm.iterationData.get("expectedStatus")));
});
10. Newman — Postman в командной строке
Newman — CLI-инструмент для запуска Postman Collections в терминале и CI/CD.
Установка
npm install -g newman
npm install -g newman-reporter-htmlextra # для HTML-отчётовЗапуск Collection
# Простой запуск
newman run "Shop API.postman_collection.json"
# С окружением
newman run "Shop API.postman_collection.json" \
-e "Staging.postman_environment.json"
# С HTML-отчётом
newman run "Shop API.postman_collection.json" \
-e "Staging.postman_environment.json" \
-r htmlextra \
--reporter-htmlextra-export ./reports/api-report.html
# С данными для итераций
newman run "Shop API.postman_collection.json" \
-d test-data.csv \
--iteration-count 3Интеграция в GitHub Actions
# .github/workflows/api-tests.yml
name: API Tests
on: [push, pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Newman
run: npm install -g newman newman-reporter-htmlextra
- name: Run API Tests
run: |
newman run tests/Shop API.postman_collection.json \
-e tests/Staging.postman_environment.json \
-r htmlextra \
--reporter-htmlextra-export reports/api-report.html
- uses: actions/upload-artifact@v4
if: always()
with:
name: api-report
path: reports/api-report.html11. Mock Server в Postman
Позволяет создать фиктивный сервер для тестирования frontend без готового backend.
1. Collection → ... → Mock Collection
2. Задать имя: "Shop API Mock"
3. Postman создаёт URL: https://xxxxxxxx.mock.pstmn.io
Для каждого запроса добавить пример ответа (Example):
GET /users → 200 OK + { "users": [...] }
POST /users → 201 Created + { "id": 123 }12. Полезные встроенные переменные
// Динамические значения (используются в Body)
{{$guid}} → случайный UUID
{{$timestamp}} → текущий Unix timestamp
{{$randomEmail}} → случайный email
{{$randomFirstName}}→ случайное имя
{{$randomInt}} → случайное целое число
{{$randomBoolean}} → true или false
Итог
POSTMAN — инструмент для API тестирования
Основы:
├── HTTP-запросы: GET, POST, PUT, PATCH, DELETE
├── Collections: организация запросов по папкам
├── Environments: переменные для разных окружений
Автоматизация:
├── Tests (pm.test): автоматические проверки ответов
├── Pre-request Scripts: подготовка данных
├── Collection Runner: прогон всех тестов
└── Newman: запуск в CLI и CI/CD
Продвинутое:
├── Data Files: тестирование с разными данными
├── Mock Server: имитация API
└── GitHub Actions: интеграция в пайплайн