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
以上となります。お疲れさまでした。