Newman一括実行バッチ

newmanコマンドを一括実行したいときに作成したWindowsバッチを備忘録として残しておきます。

ファイルの構成

basedirは基準ディレクトリとします。

basedir
│  
├─logs
│  └─yyyyMM
│          newmanrun_yyyyMMdd_HHmmss.log
│          
├─resultRaw
│  └─yyyyMM
│      └─yyyyMMdd_HHmmss
│          ├─apiNameSample01
│          │      result_00001_apiNameSample01.html
│          │      result_00001_apiNameSample01.json
│          │      result_00002_apiNameSample01.html
│          │      result_00002_apiNameSample01.json
│          │      
│          ├─apiNameSample02
│          │      result_00003_apiNameSample02.html
│          │      result_00003_apiNameSample02.json
│          │      result_00004_apiNameSample02.html
│          │      result_00004_apiNameSample02.json
│          │      
│          └─apiNameSample03
│                  result_00005_apiNameSample03.html
│                  result_00005_apiNameSample03.json
│                  result_00006_apiNameSample03.html
│                  result_00006_apiNameSample03.json
│                  
├─testFiles
│  │  newmanExeConf.csv
│  │  
│  ├─apiNameSample01
│  │      apiNameSample01.collection.json
│  │      apiNameSample01.data.json
│  │      apiNameSample01.environment.json
│  │      apiNameSample01.inputCheck.data.json
│  │      
│  ├─apiNameSample02
│  │      apiNameSample02.collection.json
│  │      apiNameSample02.data.json
│  │      apiNameSample02.environment.json
│  │      apiNameSample02.inputCheck.data.json
│  │      
│  └─apiNameSample03
│          apiNameSample03.collection.json
│          apiNameSample03.data.json
│          apiNameSample03.environment.json
│          apiNameSample03.inputCheck.data.json
│          
└─tools
    │  newmanrun.bat
    │  
    └─config
           JsonToCsv.properties

logs

ログ出力ディレクトリ。年月フォルダ配下に出力します。

resutRaw

newmanコマンド実行結果を格納するディレクトリ。年月フォルダ、年月日時分秒フォルダ配下に出力します。

testFiles

実行対象のPostmanコレクション、Postman環境設定ファイル、Postmanデータファイルをコレクション名毎に格納します。

tools

Newman一括実行バッチの格納場所です。

Newman一括実行バッチ

実行対象設定ファイル

newmanExeConf.csv

# コレクション名,コレクションファイル,フォルダ(|で複数),環境設定ファイル,データファイル,テストケース数
apiNameSample01,apiNameSample01.collection.json,bizCheck,apiNameSample01.environment.json,apiNameSample01.data.json,3
apiNameSample01,apiNameSample01.collection.json,inputCheck,apiNameSample01.environment.json,apiNameSample01.inputCheck.data.json,3
apiNameSample02,apiNameSample02.collection.json,bizCheck,apiNameSample02.environment.json,apiNameSample02.data.json,3
apiNameSample02,apiNameSample02.collection.json,inputCheck,apiNameSample02.environment.json,apiNameSample02.inputCheck.data.json,3
apiNameSample03,apiNameSample03.collection.json,bizCheck,apiNameSample03.environment.json,apiNameSample03.data.json,3
apiNameSample03,apiNameSample03.collection.json,inputCheck,apiNameSample03.environment.json,apiNameSample03.inputCheck.data.json,1

一括実行バッチファイル

Newman一括実行バッチファイルの内容です。

newmanrun.bat

@echo off
 
rem 遅延環境変数に対応させる
setlocal ENABLEDELAYEDEXPANSION

rem 基準ディレクトリ
set BASE_DIR=C:\basedir

rem Newman実行設定ファイル名
set NEWMAN_SETTING_FILENAME=newmanExeConf.csv

rem JSON2CSV設定ファイルパス
set JSON2CSV_SETTING_FILEPATH=C:\basedir\tools\config\JsonToCsv.properties
rem JSON2CSV設定ファイル出力基準ディレクトリ文字列
set JSON2CSV_BASEDIRSTR=C:\\basedir

rem 日時取得
set TEST_DATE_yyyyMM=%date:~0,4%%date:~5,2%
set TEST_DATE_yyyyMMdd=%date:~0,4%%date:~5,2%%date:~8,2%
set TEST_TIME=%time: =0%
set TEST_DATE_HHmm=%TEST_TIME:~0,2%%TEST_TIME:~3,2%
set TEST_DATE_HHmmss=%TEST_TIME:~0,2%%TEST_TIME:~3,2%%TEST_TIME:~6,2%
set TEST_DATE_yyyyMMdd_HHmmss=%TEST_DATE_yyyyMMdd%_%TEST_DATE_HHmmss%

rem ログ格納ディレクトリ
set LOG_DIR=%BASE_DIR%\logs\%TEST_DATE_yyyyMM%
mkdir %LOG_DIR% > NUL 2>&1
set LOG_FILEPATH=%LOG_DIR%\newmanrun_%TEST_DATE_yyyyMMdd_HHmmss%.log

rem コマンド名
set cmd_name=%~0

rem 開始ログ出力
echo %date% %time: =0% Newman実行バッチ開始 >> %LOG_FILEPATH%

rem 引数確認
set argcount=0

:ARGS_LOOP
if not "%~1"=="" (
  set /a argcount=argcount+1
  rem echo %date% %time: =0% !cmd_name! ARGS[!argcount!] %~1 >> %LOG_FILEPATH%
  echo %date% %time: =0% コマンド引数%~1は使用しません >> %LOG_FILEPATH%
  shift
  goto ARGS_LOOP
)

rem テストファイル格納基準ディレクトリ
set TESTFILES_DIR=%BASE_DIR%\testFiles
 
rem Newman実行設定ファイルパス
set NEWMAN_CMDPARAM_FILEPATH=%TESTFILES_DIR%\%NEWMAN_SETTING_FILENAME%
echo %date% %time: =0% NEWMAN_CMDPARAM_FILEPATH=%NEWMAN_CMDPARAM_FILEPATH% >> %LOG_FILEPATH%

rem テスト結果格納ディレクトリ
set RESULT_ROW_DIR=%BASE_DIR%\resultRaw

rem 実行カウンタ
set execount=0

rem newman実行
for /F "usebackq eol=# tokens=1-6 delims=," %%a in ("%NEWMAN_CMDPARAM_FILEPATH%") do (

  rem 区切り出力
  set /a execount=execount+1
  set printexecount=00000!execount!
  echo %date% %time: =0% ***** newman execute !printexecount:~-5! *************************************************************************** >> %LOG_FILEPATH%

  rem コレクション名
  set COLLECTION_NAME=%%a
  echo %date% %time: =0% COLLECTION_NAME=!COLLECTION_NAME! >> %LOG_FILEPATH%

  rem 実行するコレクションファイルパス
  if "%%b"=="" (
    set COLLECTION_PATH=%TESTFILES_DIR%\!COLLECTION_NAME!\!COLLECTION_NAME!.collection.json
  ) else (
    set COLLECTION_PATH=%TESTFILES_DIR%\!COLLECTION_NAME!\%%b
  )
  echo %date% %time: =0% COLLECTION_PATH=!COLLECTION_PATH! >> %LOG_FILEPATH%

  rem 実行するコレクションフォルダ名
  if "%%c"=="" (
    set FOLDER_OPT=
  ) else (
    set FOLDER_OPT=%%c
  )
  echo %date% %time: =0% FOLDER_OPT=!FOLDER_OPT! >> %LOG_FILEPATH%

  set FOLDER=
  if not "!FOLDER_OPT!"=="" (
    for /f "tokens=1-4 delims=|" %%o in ("!FOLDER_OPT!") do (
      if not "%%o"=="" (
        set FOLDER=--folder %%o
        echo %date% %time: =0% FolderOption-1=%%o >> %LOG_FILEPATH%
      )
      if not "%%p"=="" (
        set FOLDER=!FOLDER! --folder %%p
        echo %date% %time: =0% FolderOption-2=%%p >> %LOG_FILEPATH%
      )
      if not "%%q"=="" (
        set FOLDER=!FOLDER! --folder %%q
        echo %date% %time: =0% FolderOption-3=%%q >> %LOG_FILEPATH%
      )
      if not "%%r"=="" (
        set FOLDER=!FOLDER! --folder %%r
        echo %date% %time: =0% FolderOption-4=%%r >> %LOG_FILEPATH%
      )
    )
  )

  echo %date% %time: =0% FOLDER=!FOLDER! >> %LOG_FILEPATH%

  rem 実行するコレクションの環境設定ファイルパス
  if "%%d"=="" (
    set ENV_PATH=
  ) else if "%%d"=="default" (
    set ENV_PATH=-e %TESTFILES_DIR%\!COLLECTION_NAME!\!COLLECTION_NAME!.environment.json
  ) else (
    set ENV_PATH=-e %TESTFILES_DIR%\!COLLECTION_NAME!\\%%d
  )
  echo %date% %time: =0% ENV_PATH=!ENV_PATH! >> %LOG_FILEPATH%

  rem 実行するコレクションのデータファイルパス
  if "%%e"=="" (
    set DATA_PATH=
  ) else if "%%e"=="default" (
    set DATA_PATH=-d %TESTFILES_DIR%\!COLLECTION_NAME!\!COLLECTION_NAME!.data.json

    rem 実行するテストケース数
    if "%%f"=="" (
      set ITERATION=
    ) else if "%%f"=="default" (
      for /f "usebackq" %%x in (`type !DATA_PATH! ^| jq-win64 length`) do set ITERATION=-n %%x
    ) else (
      set ITERATION=-n %%f
    )

  ) else (
    set DATA_PATH=-d %TESTFILES_DIR%\!COLLECTION_NAME!\%%e

    rem 実行するテストケース数
    if "%%f"=="" (
      set ITERATION=
    ) else if "%%f"=="default" (
      for /f "usebackq" %%x in (`type !DATA_PATH! ^| jq-win64 length`) do set ITERATION=-n %%x
    ) else (
      set ITERATION=-n %%f
    )
  )
  echo %date% %time: =0% DATA_PATH=!DATA_PATH! >> %LOG_FILEPATH%
  echo %date% %time: =0% ITERATION=!ITERATION! >> %LOG_FILEPATH%

  rem newman実行
  echo %date% %time: =0% newman run !COLLECTION_NAME! start. >> %LOG_FILEPATH%
  echo %date% %time: =0% newman run !COLLECTION_PATH! !FOLDER! !ENV_PATH! !DATA_PATH! !ITERATION! -r "json,htmlextra" --disable-unicode --reporter-json-export %RESULT_ROW_DIR%\%TEST_DATE_yyyyMM%\%TEST_DATE_yyyyMMdd_HHmmss%\!COLLECTION_NAME!\result_!printexecount:~-5!_!COLLECTION_NAME!.json --reporter-htmlextra-export %RESULT_ROW_DIR%\%TEST_DATE_yyyyMM%\%TEST_DATE_yyyyMMdd_HHmmss%\!COLLECTION_NAME!\result_!printexecount:~-5!_!COLLECTION_NAME!.html >> %LOG_FILEPATH%
  call newman run !COLLECTION_PATH! !FOLDER! !ENV_PATH! !DATA_PATH! !ITERATION! -r "json,htmlextra" --disable-unicode --reporter-json-export %RESULT_ROW_DIR%\%TEST_DATE_yyyyMM%\%TEST_DATE_yyyyMMdd_HHmmss%\!COLLECTION_NAME!\result_!printexecount:~-5!_!COLLECTION_NAME!.json --reporter-htmlextra-export %RESULT_ROW_DIR%\%TEST_DATE_yyyyMM%\%TEST_DATE_yyyyMMdd_HHmmss%\!COLLECTION_NAME!\result_!printexecount:~-5!_!COLLECTION_NAME!.html 
  set exitcd=!errorlevel!
  echo %date% %time: =0% newman run command result = !exitcd! >> %LOG_FILEPATH%
  echo %date% %time: =0% newman run !COLLECTION_NAME! end. >> %LOG_FILEPATH%
  if !exitcd! neq 0 (
    set /a exiterrcount=!exiterrcount!+1
  )
)


echo # Generated by %cmd_name%> %JSON2CSV_SETTING_FILEPATH%
echo JSON2CSV_LOG_DIR=%JSON2CSV_BASEDIRSTR%\\logs\\%TEST_DATE_yyyyMM%>> %JSON2CSV_SETTING_FILEPATH%
echo JSON_RESULT_DIR=%JSON2CSV_BASEDIRSTR%\\resultRaw\\%TEST_DATE_yyyyMM%\\%TEST_DATE_yyyyMMdd_HHmmss%>> %JSON2CSV_SETTING_FILEPATH%
echo CSV_RESULT_DIR=%JSON2CSV_BASEDIRSTR%\\resultCsv\\%TEST_DATE_yyyyMM%>> %JSON2CSV_SETTING_FILEPATH%


if !exiterrcount! neq 0 (
  rem 終了ログ出力(エラー)
  echo %date% %time: =0% Newman実行バッチ異常終了 エラー発生回数:%exiterrcount% >> %LOG_FILEPATH%
  endlocal
  exit /b 1
)

rem 終了ログ出力
echo %date% %time: =0% Newman実行バッチ正常終了 >> %LOG_FILEPATH%
endlocal
exit /b 0
ダウンロード

実行

実行前にモックサービスを立ち上げておきます。

コマンドプロンプトからバッチを実行します。

newmanrun

以上となります。お疲れさまでした。

参考記事

タイトルとURLをコピーしました