← Назад к вопросам

Расскажи про свой опыт работы с коллекциями в Postman

1.2 Junior🔥 131 комментариев
#Опыт и проекты#Инструменты аналитика

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Опыт работы с коллекциями в Postman

Контекст: необходимость документирования API

В одной компании я столкнулся с проблемой:

Проблема:

  • 200+ API endpoints
  • Документация в Word (устаревала)
  • Разработчики и тестировщики работали с API по-разному
  • Нет единого способа тестировать
  • Интеграция с внешними системами была сложной

Решение: Postman Collections

Я создал centralized коллекцию в Postman с документацией, примерами и автоматизацией.

Что такое Postman Collections

Postman Collection = набор API requests + документация + тесты

Структура:
MyAPI/
├── Authentication
│   ├── Login
│   ├── Refresh Token
│   └── Logout
├── Users
│   ├── Create User
│   ├── Get User
│   ├── Update User
│   └── Delete User
├── Orders
│   ├── Create Order
│   ├── Get Orders (list)
│   ├── Get Order Detail
│   └── Update Order
└── Reports
    ├── Generate Report
    └── Get Report Status

Мой путь с Postman

Фаза 1: Простое тестирование (начало)

Что я делал:

1. Создал folder для каждого endpoint
2. Добавил GET/POST/PUT/DELETE requests
3. Сохранил в Collection
4. Поделился с командой

Выглядело просто:
- GET {{base_url}}/users
- POST {{base_url}}/users with body
- etc.

Проблемы:

  • Нет документации
  • Нет примеров
  • Нет тестов
  • Нет environment variables
  • Люди не знали как использовать

Фаза 2: Добавляем переменные (Environments)

Что я сделал:

Окружение (Environments) = набор переменных

Дэлось так:

Environment: Development
- base_url: http://localhost:3000
- auth_token: dev_token_12345
- user_id: 123

Environment: Staging
- base_url: https://staging-api.example.com
- auth_token: staging_token_789
- user_id: 456

Environment: Production
- base_url: https://api.example.com
- auth_token: (получается из login request)
- user_id: (зависит от user)

В requests используем {{variable_name}}:

GET {{base_url}}/users/{{user_id}} Headers: Authorization: Bearer {{auth_token}}

Преимущества:

  • Один набор requests работает для всех окружений
  • Легко переключаться между dev/staging/prod
  • Безопасно (token не в исходном коде)

#### Фаза 3: Документирование (Description)

**Что я добавил:**

Для каждого request:

  1. Description: объясню что это делает "Creates a new user in the system.
    Required: email, password. 
    Returns: user object with ID."

  1. Path Parameters documentation: {{user_id}} - ID of the user (integer)

  2. Query Parameters: ?limit=20 - Max number of results ?offset=0 - Number of results to skip

  3. Headers: Authorization: Bearer token (from login) Content-Type: application/json

  4. Body example: {

     "email": "user@example.com",
     "password": "secure_password",
     "name": "John Doe"

}

  1. Response example: {
     "id": 123,
     "email": "user@example.com",
     "name": "John Doe",
     "created_at": "2024-01-15T10:30:00Z"

}

  1. Possible errors: 400 Bad Request - Invalid email format 409 Conflict - User already exists 500 Internal Server Error - Server error

**Как это выглядит:**

Новый developer открывает Postman:

  • Видит все requests
  • Читает описание
  • Видит примеры
  • Может сразу отправить request
  • Видит ожидаемый ответ

Нет нужды искать документацию!


#### Фаза 4: Тесты в Postman

**Добавил автоматизацию:**

```javascript

// Test script для каждого request // После request выполнится, Postman запустит тесты

// Example 1: Check status code

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

// Example 2: Check response structure

pm.test("Response contains user_id", function () {
var jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('id');
});

// Example 3: Validate data

pm.test("User email is correct", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.email).to.equal("user@example.com");
});

// Example 4: Performance test

pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

// Example 5: Set variable для следующего request

pm.test("Store user_id for next requests", function () {
var jsonData = pm.response.json();
pm.environment.set("user_id", jsonData.id);
});

Практический пример:

Request 1: POST /login
Body: { email: "user@example.com", password: "pass" }
Response: { token: "abc123xyz" }

Test script:
pm.environment.set("auth_token", pm.response.json().token);

Теперь {{auth_token}} автоматически установлен для следующих requests!

Request 2: GET /users/me
Headers: Authorization: Bearer {{auth_token}} ← автоматически из login
Выполняется успешно!

Фаза 5: Pre-request scripts (автоматизация подготовки)

Выполнить логику до request:

// Example 1: Генерировать timestamp var timestamp = new Date().toISOString();

pm.environment.set("request_timestamp", timestamp);

// Example 2: Вычислить signature (для безопасности) var crypto = require('crypto'); var message = "user_" + Date.now(); var signature = crypto.createHmac('sha256', 'secret').update(message).digest('base64');

pm.environment.set("request_signature", signature);

// Example 3: Проверить что token есть var token = pm.environment.get("auth_token"); if (!token) { throw new Error("auth_token not set. Please run Login request first."); }

Мой реальный пример: API для e-commerce

Структура Collection:

E-commerce API/
│
├── Auth/
│   ├── Register
│   │   POST /auth/register
│   │   Description: Create new account
│   │   Body: {email, password, name}
│   │   Tests: check status 201, store token
│   │
│   ├── Login
│   │   POST /auth/login
│   │   Description: Login user
│   │   Body: {email, password}
│   │   Tests: check status 200, store token
│   │
│   └── Logout
│       POST /auth/logout
│       Headers: Authorization: Bearer {{token}}
│       Tests: check status 200
│
├── Products/
│   ├── List Products
│   │   GET /products?limit={{limit}}&offset={{offset}}
│   │   Query params: limit=20, offset=0, category, price_min, price_max
│   │   Tests: check array of products, check pagination
│   │
│   ├── Get Product
│   │   GET /products/{{product_id}}
│   │   Tests: check product details
│   │
│   ├── Search
│   │   GET /products/search?q={{search_query}}
│   │   Tests: check results match query
│   │
│   └── Reviews
│       GET /products/{{product_id}}/reviews
│       Tests: check reviews array
│
├── Cart/
│   ├── Add to Cart
│   │   POST /cart/items
│   │   Headers: Authorization
│   │   Body: {product_id, quantity}
│   │   Tests: check item added, check quantity
│   │
│   ├── Get Cart
│   │   GET /cart
│   │   Headers: Authorization
│   │   Tests: check cart items, check total price
│   │
│   ├── Update Cart Item
│   │   PUT /cart/items/{{item_id}}
│   │   Body: {quantity}
│   │   Tests: check update
│   │
│   └── Remove from Cart
│       DELETE /cart/items/{{item_id}}
│       Tests: check removal
│
└── Orders/
├── Create Order
│   POST /orders
│   Headers: Authorization
│   Body: {shipping_address, payment_method}
│   Pre-request: check cart not empty
│   Tests: check order created, store order_id
│
├── Get Orders
│   GET /orders
│   Headers: Authorization
│   Tests: check order list
│
├── Get Order Details
│   GET /orders/{{order_id}}
│   Headers: Authorization
│   Tests: check order details
│
└── Cancel Order
    POST /orders/{{order_id}}/cancel
    Headers: Authorization
    Tests: check order status changed

Workflow в Postman: полный сценарий

Как я использую коллекцию для тестирования:

1. Выбираю Environment: Development

2. Выполняю Auth/Register
   - Создаёт нового user
   - Сохраняет token в {{auth_token}}
   - Сохраняет user_id в {{user_id}}
   - Тест проверяет status 201

3. Выполняю Products/List Products
   - {{base_url}}/products
   - Видишь все продукты
   - Тест проверяет что это массив
   - Сохраняю {{product_id}} первого товара

4. Выполняю Cart/Add to Cart
   - POST {{base_url}}/cart/items
   - Body: {product_id: {{product_id}}, quantity: 2}
   - Authorization: {{auth_token}}
   - Тест проверяет item добавлен

5. Выполняю Orders/Create Order
   - POST {{base_url}}/orders
   - Body: {shipping_address: "...", payment_method: "card"}
   - Pre-request script проверяет что cart не пуст
   - Authorization: {{auth_token}}
   - Сохраняю {{order_id}}
   - Тест проверяет status 201

6. Выполняю Orders/Get Order Details
   - GET {{base_url}}/orders/{{order_id}}
   - Видишь детали заказа
   - Проверяю статус

Всё работает автоматически!

Collection sharing и версионирование

Как я делюсь коллекцией:

1. В Postman нажимаю Share
2. Выбираю "Generate public link"
3. Отправляю link разработчикам/тестировщикам
4. Они импортируют коллекцию
5. У них уже есть:
   - Все requests
   - Все примеры
   - Все тесты
   - Документация

Когда я обновляю коллекцию:
- Все получают обновление
- Версии синхронизированы

Git для версионирования:

// Экспортирую коллекцию как JSON // Коммит в git

{
  "info": {
"name": "E-commerce API",
"version": "1.2.0",
"description": "API for e-commerce platform"
  },
  "item": [
{
  "name": "Auth",
  "item": [
    {
      "name": "Login",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/auth/login",
        "body": {...}
      },
      "tests": "pm.test(...)"
    }
  ]
}
  ]

}

Тогда как Shared workspace:

  • Все видят один источник истины
  • Real-time updates
  • Комментарии и обсуждение

Интеграция с тестированием

Newman - CLI для Postman:

Запустить коллекцию в CI/CD

newman run collection.json \
  -e development.json \
  -r junit \
  --reporter-junit-export result.xml

Результаты видны в CI/CD pipeline

Использование в Continuous Integration:

GitHub Actions workflow:

1. Developer pushes code
2. Run unit tests
3. Deploy to staging
4. Run Postman tests (Newman)
5. If tests pass → merge to main
6. If tests fail → notify developer

Best Practices которые я применяю

1. Organization
   ✓ Logical folder structure
   ✓ Consistent naming
   ✓ Group related requests
   ✓ Keep collection clean

2. Documentation
   ✓ Every request has description
   ✓ Show parameter examples
   ✓ Document error cases
   ✓ Add links to swagger/docs

3. Testing
   ✓ Every request has tests
   ✓ Test happy path
   ✓ Test error cases
   ✓ Test performance
   ✓ Store variables for workflows

4. Environments
   ✓ Separate dev/staging/prod
   ✓ Use variables, not hardcoded URLs
   ✓ Protect sensitive data
   ✓ Document what each variable means

5. Collaboration
   ✓ Share with team
   ✓ Keep collection public
   ✓ Use workspace for team
   ✓ Add comments for complex flows

Результаты использования Collections

Когда я внедрил Postman Collections:

До:

  • Тестирование API: 2 часа на новый endpoint
  • Документация: отдельно в Word
  • Ошибки в интеграции: часто
  • Onboarding: неделя

После:

  • Тестирование API: 15 минут
  • Документация: в Postman, автоматически
  • Ошибки: снизились на 80%
  • Onboarding: 1 день (просто импорт коллекции)

Главный урок

Postman Collections = живая документация + автоматизация

Это не просто HTTP requests. Это:

  • Документация
  • Примеры
  • Тесты
  • Автоматизация
  • Версионирование

Всё в одном месте, и всё синхронизировано.