LoginSignup
4
4

More than 5 years have passed since last update.

Serverspecのテスト結果を集計するバッチファイルを作成した

Last updated at Posted at 2016-01-07

はじめに

テスト終了時に画面にサーバ毎の成功数/失敗数を表示したくなったので対応してみました。

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
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4