Всем привет!
Хочу поделиться практическим кейсом: как быстро запускать свои тесты из Postman, не только целые коллекции, но и отдельные папки внутри коллекций.
Если надоело открывать Postman и вручную запускать каждую коллекцию или проверять эндпоинты по очереди, то решение есть — Newman, терминальный раннер от команды Postman. Его функционал позволяет:
автоматически выгружать все коллекции и окружения,
запускать их прямо из командной строки,
получать отчёты для анализа или интеграции в CI/CD.
В этом кейсе покажу путь от экспорта коллекций до автоматического прогона тестов через Newman CLI.
Что понадобится
Node.js и npm.
Аккаунт в Postman и API Key (чтобы выгружать коллекции/окружения через Postman API).
Powershell (или другой терминал) — я показываю примеры на PowerShell, но команды легко адаптируются для bash (можно переписать скрипты через любую нейронку).
Как получить API Key в Postman
Открой Postman Web или Desktop.
Перейди в Settings → API Keys.
Нажми Generate API Key, введи имя и скопируй ключ.

Важно: не храните ключ в публичных репозиториях. В CI используйте секреты (GitHub Secrets, GitLab CI variables и т.п.).
Установка Newman
В терминале проверь, что Node.js и npm установлены. Если нет, то нужно скачать по ссылке https://nodejs.org/en/download и установить.
node -v
npm -v
Установи Newman:
npm install -g newman
Проверь установку:
newman -v
Скрипт: выгрузка коллекций и окружений из Postman
Ниже — пример PowerShell-скрипта export-postman.ps1
, который получает все коллекции и окружения через Postman API и сохраняет их в папку postman_output
.
# =============================
# Скрипт для экспорта всех коллекций и окружений из Postman
# Использует Postman API Key
# =============================
param(
[string]$apiKey = "" # API ключ Postman. Можно передать через параметр при запуске: -apiKey "PMAK-..."
)
# Проверяем, что ключ передан
if (-not $apiKey) {
Write-Error "Передайте API key через параметр -apiKey или задайте переменную \$apiKey внутри скрипта."
exit 1
}
# Заголовки для запросов к API Postman
$headers = @{ "X-Api-Key" = $apiKey }
# =============================
# Создаем папку postman_output для вывода коллекций и окружений
# =============================
$outputDir = Join-Path -Path (Get-Location) -ChildPath "postman_output"
if (-not (Test-Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
Write-Host "Created output directory: $outputDir"
}
# =============================
# Получение списка всех коллекций
# =============================
$collectionsList = Invoke-RestMethod -Uri "https://api.getpostman.com/collections" -Headers $headers -Method Get
foreach ($col in $collectionsList.collections) {
$uid = $col.uid
# Очищаем имя файла от недопустимых символов для файловой системы
$fileName = "$($col.name).json" -replace '[\\/:*?"<>|]', ''
# Получаем полную коллекцию по UID
$collection = Invoke-RestMethod -Uri "https://api.getpostman.com/collections/$uid" -Headers $headers -Method Get
# Сохраняем коллекцию в формате JSON
$collection | ConvertTo-Json -Depth 20 | Out-File -FilePath (Join-Path $outputDir $fileName)
Write-Host "Saved collection: $fileName"
}
# =============================
# Получение всех окружений
# =============================
$envList = Invoke-RestMethod -Uri "https://api.getpostman.com/environments" -Headers $headers -Method Get
foreach ($env in $envList.environments) {
$uid = $env.uid
# Очищаем имя файла от недопустимых символов
$fileName = "$($env.name).json" -replace '[\\/:*?"<>|]', ''
# Получаем полное окружение по UID
$environment = Invoke-RestMethod -Uri "https://api.getpostman.com/environments/$uid" -Headers $headers -Method Get
# Сохраняем окружение в формате JSON
$environment | ConvertTo-Json -Depth 20 | Out-File -FilePath (Join-Path $outputDir $fileName)
Write-Host "Saved environment: $fileName"
}
# =============================
# Финальное сообщение
# =============================
Write-Host "Export finished. Files are in: $outputDir"
Пояснения:
Скрипт использует заголовок
X-Api-Key
для авторизации (Postman API принимает ключ в этом заголовке).
Запуск:
Для работы приведенной ниже команды нужно находиться в той же папке, что и запускаемый скрипт.
.\export-postman.ps1 -apiKey "ВАШ_КЛЮЧ_ЗДЕСЬ"
Далее в терминале вы увидите отчет о сохранении коллекций и окружений. Также появится папка postman_output
с .json-файлами коллекций и окружений.


Запуск тестов через Newman
Создадим run_tests.ps1
, который прогоняет все коллекции или выбранные папки с запросами. Нужно только указать свои названия json
файлов с коллекциями и окружениями.
# =======================================================
# Универсальный запуск Postman-коллекций через Newman
# Поддержка папок (folder)
# Скрипт продолжает выполнение при ошибках
# =======================================================
# Папка, где лежат выгруженные коллекции и .json окружения
$COLLECTIONS_DIR = "postman_output"
# Общий файл окружения
$envFile = Join-Path $COLLECTIONS_DIR "Test_env.json"
# Проверяем наличие файла окружения
if (-Not (Test-Path $envFile)) {
Write-Host "Файл окружения не найден: $envFile" -ForegroundColor Red
exit 1
}
# =======================================================
# Настройка коллекций и задач
# Каждая коллекция содержит:
# file = путь к JSON-файлу коллекции
# tasks = список задач внутри коллекции
# каждая задача может запускать:
# - всю коллекцию (если folder = "")
# - конкретную папку (если folder != "")
# =======================================================
$collectionsToRun = @(
@{
file = Join-Path $COLLECTIONS_DIR "user_authorization.json"
tasks = @(
# Прогон всей коллекции user_authorization
@{ folder = "" }
)
},
@{
file = Join-Path $COLLECTIONS_DIR "shop.json"
tasks = @(
# Прогон папки "orders" внутри коллекции shop
@{ folder = "orders" }
)
}
)
# =======================================================
# Проверка существования файлов коллекций
# =======================================================
foreach ($item in $collectionsToRun) {
if (-Not (Test-Path $item.file)) {
Write-Host "Файл коллекции не найден: $($item.file)" -ForegroundColor Red
exit 1
}
}
# =======================================================
# Определяем путь к Newman
# Сначала ищем локально в node_modules, потом глобально
# =======================================================
$localNewman = Join-Path $PSScriptRoot "node_modules\.bin\newman.cmd"
if (Test-Path $localNewman) {
$newmanCmd = $localNewman
} else {
# предполагаем, что глобально установлен
$newmanCmd = "newman"
}
# =======================================================
# Основной цикл по коллекциям и задачам
# =======================================================
$hasErrors = $false
foreach ($item in $collectionsToRun) {
$colPath = $item.file
foreach ($task in $item.tasks) {
$folder = $task.folder
# Формируем аргументы для Newman
$args = @("run", $colPath, "-e", $envFile)
if ($folder -ne "") {
# Добавляем флаг --folder, если указан
$args += @("--folder", $folder)
}
# Логируем текущую задачу
Write-Host "=== Running: $colPath | Folder: '$folder' ===" -ForegroundColor Cyan
try {
# Выполняем Newman
& $newmanCmd @args
# Проверка кода возврата
if ($LASTEXITCODE -ne 0) {
Write-Host "Ошибка при выполнении задачи." -ForegroundColor Red
$hasErrors = $true # отмечаем ошибку, но продолжаем
} else {
Write-Host "Задача выполнена успешно." -ForegroundColor Green
}
}
catch {
Write-Host "Ошибка при запуске Newman: $_" -ForegroundColor Red
$hasErrors = $true
}
}
}
# =======================================================
# Финальное сообщение
# =======================================================
if ($hasErrors) {
Write-Host "---- Завершено с ошибками ----" -ForegroundColor Yellow
exit 1
} else {
Write-Host "---- Все задачи выполнены успешно ----" -ForegroundColor Green
exit 0
}
После запуска тесты прогоняются в консоли и выводится результат по каждой коллекции:

Итог
Использование Postman + Newman позволяет автоматизировать процесс ручного запуска тестов. Также можно с его помощью:
получать удобные отчёты для анализа и хранения,
интегрировать тесты в CI/CD, чтобы они работали автоматически при каждом коммите.
В следующем кейсе рассмотрим, как настроить интеграцию тестов в CI и как эффективно выводить отчёты по результатам тестирования, что сделает процесс ещё более прозрачным и удобным для команды.