Всем привет!
Хочу поделиться практическим кейсом: как быстро запускать свои тесты из 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 и как эффективно выводить отчёты по результатам тестирования, что сделает процесс ещё более прозрачным и удобным для команды.
ссылка на оригинал статьи https://habr.com/ru/articles/938832/
Добавить комментарий