Разработка API-тестов (Postman/Newman)
Мы часто видим, как команды тратят часы на ручное тестирование API — кликают по кнопкам в Postman, забывают обновить коллекцию, а CI-пайплайн молчит. В итоге баги уходят в прод, а регрессия отнимает недели. Разработка API-тестов на Postman/Newman решает эту проблему: мы создаём коллекцию сценариев, которые запускаются автоматически при каждом деплое. Вы получаете мгновенную обратную связь о работоспособности API и экономите до 80% времени на регрессионных проверках.
Недавно мы автоматизировали тестирование для проекта с 120 эндпоинтами. Ручная регрессия занимала 2 дня, баги обнаруживались в продакшене. Разработали коллекцию из 400 тестов — позитивных, негативных и граничных. Теперь каждый деплой сопровождается автоматическим прогоном за 8 минут. Количество багов в продакшене сократилось на 80%. Закажите бесплатную консультацию — мы проанализируем ваше API за 1 день.
Почему Postman и Newman — стандарт для API-тестирования?
Postman — де-факто инструмент для работы с REST API. Его ключевое преимущество — встроенный раннер тестов на JavaScript и возможность экспорта коллекции в формат, понятный Newman — консольному бегуну. Newman запускает те же самые тесты в CI/CD: вы пишете один раз, выполняете везде. Мы используем оба инструмента более 5 лет, автоматизировали тестирование для 40+ проектов. Ниже — реальный пример структуры коллекции для e-commerce API.
Структура коллекции (пример)
Collection: E-commerce API
├── Auth
│ ├── POST /auth/login
│ ├── POST /auth/refresh
│ └── POST /auth/logout
├── Products
│ ├── GET /products (list)
│ ├── GET /products/:id
│ ├── POST /products (create)
│ └── PATCH /products/:id
└── Orders
├── POST /orders (create)
└── GET /orders/:id
Как писать тесты: переменные, скрипты и проверки
Переменные и окружения
// environments/staging.json
{
"name": "Staging",
"values": [
{ "key": "BASE_URL", "value": "https://api-staging.example.com" },
{ "key": "API_KEY", "value": "{{$STAGING_API_KEY}}" },
{ "key": "auth_token", "value": "" }
]
}
Тесты в Postman (проверка бизнес-логики и схем)
// POST /auth/login — Tests tab
pm.test('Status code is 200', () => {
pm.response.to.have.status(200);
});
pm.test('Response has token', () => {
const json = pm.response.json();
pm.expect(json).to.have.property('access_token');
pm.expect(json.access_token).to.be.a('string').and.not.empty;
});
pm.test('Response time is acceptable', () => {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// Сохранить токен для следующих запросов
const json = pm.response.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('user_id', json.user.id);
// GET /products — проверка схемы
pm.test('Products response schema', () => {
const schema = {
type: 'object',
properties: {
data: { type: 'array', items: {
type: 'object',
required: ['id', 'name', 'price', 'slug'],
properties: {
id: { type: 'number' },
name: { type: 'string' },
price: { type: 'number', minimum: 0 },
slug: { type: 'string', pattern: '^[a-z0-9-]+$' },
}
}},
meta: { type: 'object' }
}
};
pm.response.to.have.jsonSchema(schema);
});
pm.test('Products are sorted by created_at DESC', () => {
const products = pm.response.json().data;
for (let i = 0; i < products.length - 1; i++) {
pm.expect(new Date(products[i].created_at))
.to.be.at.least(new Date(products[i+1].created_at));
}
});
Pre-request Scripts — автоматическое обновление токена
// Автообновление токена перед запросом
const token = pm.environment.get('auth_token');
const expiresAt = pm.environment.get('token_expires_at');
if (!token || Date.now() > expiresAt) {
pm.sendRequest({
url: pm.environment.get('BASE_URL') + '/auth/refresh',
method: 'POST',
header: { 'Content-Type': 'application/json' },
body: { mode: 'raw', raw: JSON.stringify({
refresh_token: pm.environment.get('refresh_token')
})}
}, (err, res) => {
const json = res.json();
pm.environment.set('auth_token', json.access_token);
pm.environment.set('token_expires_at', Date.now() + (json.expires_in * 1000));
});
}
Запуск в CI/CD и отчёты
Newman — консольный бегун, который запускает коллекции Postman без GUI. Он устанавливается через npm и поддерживает множество репортёров.
npm install -g newman newman-reporter-htmlextra
newman run collection.json \
--environment environments/staging.json \
--reporters cli,htmlextra \
--reporter-htmlextra-export newman-report.html
Как интегрировать Newman в GitHub Actions?
Добавляем шаг в пайплайн:
- name: Run API Tests
run: |
newman run collection.json \
--environment environments/staging.json \
--env-var "STAGING_API_KEY=${{ secrets.STAGING_API_KEY }}" \
--reporters cli,junit \
--reporter-junit-export results.xml
- name: Publish Test Results
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: results.xml
Коллекции Postman хранятся в Git как JSON. Изменения отслеживаются через diff. Postman также поддерживает синхронизацию с GitHub напрямую.
Из коробки Newman поддерживает CLI, JUnit и JSON. Через плагины доступны HTML (newman-reporter-htmlextra), CSV, Allure и другие. Мы настраиваем репортёры под вашу систему аналитики.
Как мы гарантируем качество API-тестов?
Каждая коллекция проходит ревью: мы проверяем покрытие позитивных и негативных сценариев (охват не менее 95%), правильность схем, время отклика. Для критических эндпоинтов добавляем нагрузочные тесты (через Newman с 10 000 итераций). Гарантируем, что после передачи тесты можно запускать в вашем CI без доработок — мы уже протестировали их сами. Снижаем количество багов в продакшене на 60%.
Если ваше API часто меняется, тесты нужно обновлять. Мы проектируем коллекции так, чтобы минимизировать затраты на поддержку: используем переменные окружения, динамические данные и модульные тестовые скрипты. Адаптация под новую версию API занимает несколько часов.
Сроки реализации и что входит в работу
| Объём API | Срок (рабочие дни) |
|---|---|
| 20 эндпоинтов | 3–4 дня |
| 30–50 эндпоинтов | 4–7 дней |
| 50+ эндпоинтов | от 7 дней |
Входит:
- Коллекция Postman с тестами (позитивные, негативные, граничные значения)
- Конфигурация окружений (staging, production)
- Pre-request scripts (автообновление токенов, генерация данных)
- CI-интеграция (GitHub Actions, GitLab CI, Jenkins)
- Репортёры Newman (HTML, JUnit, CLI)
- Документация с описанием структуры и как добавлять тесты
- Обучение команды (1 час онлайн)
Стоимость рассчитывается индивидуально в зависимости от объёма API и сложности сценариев. Свяжитесь с нами — мы подготовим коммерческое предложение за 1 рабочий день.
Типичные ошибки при автоматизации тестов и как их избежать
- Игнорирование порядка запросов — цепочки (login → получение данных) должны быть явно зафиксированы через пререквизиты или тесты.
- Жёсткая привязка к данным — используйте динамические переменные (
$guid,$timestamp) вместо хардкода. - Пропуск проверок схемы — без
jsonSchemaвы не заметите изменение структуры ответа. - Отсутствие прогона в CI — тесты должны запускаться на каждый PR.
Сравнение: Postman vs Insomnia
| Критерий | Postman + Newman | Insomnia |
|---|---|---|
| CLI-раннер | Newman (мощный) | Inso (ограничен) |
| Тесты на JavaScript | Да | Да, но нет pre-request скриптов |
| Интеграция с CI | Широкая (GitHub Actions, Jenkins, GitLab) | Ограниченная |
| Сообщество | Огромное | Маленькое |
Postman лучше Insomnia именно за счёт Newman и экосистемы плагинов. Если ваш стек включает CI/CD — выбор очевиден.
Получите консультацию по автоматизации вашего API и узнайте, как снизить затраты на регрессию на 70–80%. Свяжитесь с нами для оценки вашего API — мы предложим структуру тестов и сроки за 1 рабочий день.







