Postman + Newman — как быстро запускать свои тесты

от автора

Всем привет!
Хочу поделиться практическим кейсом: как быстро запускать свои тесты из Postman, не только целые коллекции, но и отдельные папки внутри коллекций.

Если надоело открывать Postman и вручную запускать каждую коллекцию или проверять эндпоинты по очереди, то решение есть — Newman, терминальный раннер от команды Postman. Его функционал позволяет:

  • автоматически выгружать все коллекции и окружения,

  • запускать их прямо из командной строки,

  • получать отчёты для анализа или интеграции в CI/CD.

В этом кейсе покажу путь от экспорта коллекций до автоматического прогона тестов через Newman CLI.


Что понадобится

  • Node.js и npm.

  • Аккаунт в Postman и API Key (чтобы выгружать коллекции/окружения через Postman API).

  • Powershell (или другой терминал) — я показываю примеры на PowerShell, но команды легко адаптируются для bash (можно переписать скрипты через любую нейронку).


Как получить API Key в Postman

  1. Открой Postman Web или Desktop.

  2. Перейди в Settings → API Keys.

  3. Нажми 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *