はじめに
テスト終了時に画面にサーバ毎の成功数/失敗数を表示したくなったので対応してみました。
exampleの行を集計するだけですが、こんな感じで最後に表示します。
PS C:\serverspec\sample> rake
(省略:Serverspecのメッセージ出力)
##################################################
SUMMARY
##################################################
DEV-WEB01 : CASE=132 / OK=132 / NG=0
DEV-WEB02 : CASE=132 / OK=132 / NG=0
STG-WEB01 : CASE=128 / OK=128 / NG=0
STG-WEB02 : CASE=128 / OK=128 / NG=0
DEV-DB01 : CASE=91 / OK=91 / NG=0
DEV-DB02 : CASE=91 / OK=91 / NG=0
STG-DB01 : CASE=91 / OK=91 / NG=0
STG-DB02 : CASE=91 / OK=91 / NG=0
TOTAL=884 / OK=884 / NG=0
##################################################
PS C:\serverspec\sample>
集計スクリプトの作成
$TEST_HOME\sample\lib\sum.awk
# 前処理
BEGIN {
num_ng = 0
sum = 0
target = ""
}
# ホスト名の判定
/^HOST: / {
target = $2
}
# カウント
/examples,.*failure/ {
num_ng += $3
sum += $1
printf("%s : CASE=%s / OK=%s / NG=%s\n", target, $1, $1 - $3, $3)
}
# 後処理
END {
printf("TOTAL=%s / OK=%s / NG=%s\n", sum, sum - num_ng, num_ng)
}
spec_helper.rbの修正
上述のawkスクリプトでホスト名で集計できるように「spec_helper.rb」で「HOST: ホスト名」を出力するようにします。
C:\serverspec\sample\spec\spec_helper.rb
require 'serverspec'
#(省略)
params['hostname'] = ENV['TARGET_HOST']
puts ""
puts "##################################################"
puts "HOST: #{params['hostname']} : #{params['run_env']}"
puts "##################################################"
#(省略)
Windowsの場合:バッチファイルの作成
※事前にlogディレクトリの作成が必要です。
※catやteeなど「Gow」を使っていますのであらかじめインストールが必要です。
$TEST_HOME\sample\ExecTest.cmd
@ECHO OFF
:: Serverspec
SET PATH_D_SCR=%~dp0
SET PATH_D_SCR=%PATH_D_SCR:~0,-1%
SET YYYYMMDD=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2,2%
SET TIME_HMMSS=%TIME: =0%
SET HHMMSS=%TIME_HMMSS:~0,2%%TIME_HMMSS:~3,2%%TIME_HMMSS:~6,2%
SET PATH_F_LOG=%PATH_D_SCR%\log\Result.%YYYYMMDD%.%HHMMSS%.log
SET PATH_F_SUM=%PATH_D_SCR%\log\Summary.%YYYYMMDD%.%HHMMSS%.txt
SET PATH_D_GOW=C:\Tool\Gow\bin
ECHO.
ECHO PATH_D_SCR = %PATH_D_SCR%
ECHO YYYYMMDD = %YYYYMMDD%
ECHO HHMMSS = %HHMMSS%
ECHO PATH_F_LOG = %PATH_F_LOG%
ECHO.
cd %PATH_D_SCR%
ruby -e "puts Time.now.to_i" | %PATH_D_GOW%\tee.exe %PATH_F_LOG%
rake | %PATH_D_GOW%\tee.exe -a %PATH_F_LOG%
ruby -e "puts Time.now.to_i" | %PATH_D_GOW%\tee.exe -a %PATH_F_LOG%
ECHO.
ECHO.
ECHO ############################################################
ECHO SUMMARY
ECHO ############################################################
%PATH_D_GOW%\cat.exe %PATH_F_LOG% | %PATH_D_GOW%\awk.exe -f %PATH_D_SCR%\lib\sum.awk | %PATH_D_GOW%\tee.exe %PATH_F_SUM%
ECHO.
ECHO ############################################################
Linuxの場合:シェルスクリプトの作成
※事前にlogディレクトリの作成が必要です。
$TEST_HOME/sample/ExecTest.sh
#!/bin/sh
NOW=`date '+%Y%m%d.%H%M%S'`
PATH_D_SH="$(cd $(dirname $0) && pwd)"
PATH_F_LOG="${PATH_D_SH}/log/serverspec.${NOW}.log"
PATH_F_SUM="${PATH_D_SH}/log/summry.${NOW}.txt"
cd "${PATH_D_SH}"
NOW_UNIXTIME=`ruby -e "puts Time.now.to_i"`
echo "#----------------------------------------------------------------------" | tee -a ${PATH_F_LOG}
echo "# START : ${NOW} ${NOW_UNIXTIME}" | tee -a ${PATH_F_LOG}
echo "#----------------------------------------------------------------------" | tee -a ${PATH_F_LOG}
rake | tee -a ${PATH_F_LOG}
cd "${PATH_D_SH}"
NOW_UNIXTIME=`ruby -e "puts Time.now.to_i"`
echo "#----------------------------------------------------------------------" | tee -a ${PATH_F_LOG}
echo "# E N D : ${NOW} ${NOW_UNIXTIME}" | tee -a ${PATH_F_LOG}
echo "#----------------------------------------------------------------------" | tee -a ${PATH_F_LOG}
echo ""
echo ""
echo "#----------------------------------------------------------------------"
echo "# SUMMRY"
echo "#----------------------------------------------------------------------"
cat ${PATH_F_LOG} | awk -f ./lib/sum.awk | tee ${PATH_F_SUM}
echo "#----------------------------------------------------------------------"
exit 0