ログファイルを解析して実行時間が一定時間以上かかる場合は、テスト名を知らせる必要があります(ユーザーはスクリプトの実行に30分以上かかると仮定してこの時間を入力します)。
セキュリティテストスイートの起動 9月5日月曜日00:16:30 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:30 PDT:スタート... 2011年9月5日月曜日00:16:31 PDT:結果報告... 9月5日月曜日 00:16:31 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/add_role_user_security.xmlに結果を書き込む add_role_user_security.xml:パススルー 9月5日月曜日00:16:31 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:31 PDT:スタート... 2011年9月5日月曜日00:16:32 PDT:結果を報告しています... 9月5日月曜日 00:16:32 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/privilege.xmlに結果を書き込む 特権.xml: パススルー 9月5日月曜日00:16:32 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:32 PDT:スタート... 2011年9月5日月曜日00:16:32 PDT:結果を報告しています... 9月5日月曜日00:16:32 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/edit_role_user.xmlに結果を書き込む edit_role_user.xml:パススルー 9月5日月曜日00:16:32 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:32 PDT:スタート... 2011年9月5日月曜日00:16:33 PDT:結果報告... 9月5日月曜日00:16:33 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/remove_roles.xmlに結果を書き込む Remove_roles.xml:パススルー 9月5日月曜日00:16:33 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:33 PDT:スタート... 2011年9月5日月曜日00:16:33 PDT:結果報告... 9月5日月曜日00:16:33 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user1.xmlに結果を書き込む role_user1.xml:パススルー 9月5日月曜日00:16:33 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:16:33 PDT:スタート... 2011年9月5日月曜日00:16:34 PDT:結果報告... 9月5日月曜日00:16:34 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user2.xmlに結果を書き込む bug10611.xml:合格 セキュリティテストスイート テストスイートの開始 9月5日月曜日00:18:52 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:18:52 PDT:スタート... 2011年9月5日月曜日00:18:52 PDT:結果報告... 9月5日月曜日00:18:52 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/setup_script.xmlに結果を書き込む setup_script.xml:合格 9月5日月曜日00:18:52 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:18:52 PDT:スタート... 2011年9月5日月曜日00:18:58 PDT:結果報告... 9月5日月曜日00:18:58 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/bug_scripts.xmlに結果を書き込む bug_scripts.xml:合格 9月5日月曜日00:18:58 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:18:58 PDT:スタート... 2011年9月5日月曜日00:18:58 PDT:結果報告... 9月5日月曜日 00:18:58 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/loadtime_namespace.xmlに結果を書き込む [重大なエラー] loadtime_namespace.xml:11:25: '[xX][mM][lL]' と一致する処理コマンドのターゲットは許可されていません。 loadtime_namespace.xmlを解析できません。比較するには、diffユーティリティを実行してください... rm -f ./scripts/diffs/loadtime_namespace.xml loadtime_namespace.xml:パススルー 9月5日月曜日00:19:01 PDT 2011:スレッドを作成中... 2011年9月5日月曜日00:19:01 PDT:スタート... 2011年9月5日月曜日00:19:01 PDT:結果報告... 9月5日月曜日00:19:01 PDT 2011:/space/builder/builds/macosx-64/HEAD/qa/scripts/results/string_script.xmlに結果を書き込む string_script.xml:通過 テストスイートについて
ユーザーは実行に要した時間を渡してスクリプトを実行します。
sh script_name.sh 60
実行に60分以上かかるテストのリストを含める必要があります。
出力は次のようになります。
セキュリティテストスイートadd_role_user_security.xml セキュリティテスト suiteprivilege.xml セキュリティテストスイートRemove_roles.xml セキュリティテストスイートstring_script.xml foテストスイートstring_script.xml テストスイート setup_script.xml
答え1
この回答の下のコードは、あなたが要求したアクションを実行し、あなたが提供した例に基づいて動作します。
説明する:
基本的には2段階で動作します。
awk
正規表現と状態変数を使用して、ファイルとテストスイートブロック間の遷移を決定します。各行に、テストスイート名、テストファイル、開始時刻と終了時刻を含むパイプで区切られたリストを出力します。while IFS="|" read ...
パイプで区切られた出力をawk
一部の変数として部分的に読み込みます。これを使用してdate
タイムスタンプをエポック後の秒に変換し、差を計算して入力値と比較します。
コードは検証に関して多くのことをしないので、直接追加する必要があります。
パスワード:
#!/usr/bin/sh
# Get the arguments
INPUT_FILENAME="$1"
FILTER_MINUTES="$2"
# Convert minutes to seconds
FILTER_SECONDS="$(( FILTER_MINUTES * 60 ))"
awk '
BEGIN {
printf("%s,%s,%s,%s\n","TEST_NAME","FILENAME","START_TIME","END_TIME");
TEST_NAME="";
START_TIME="";
END_TIME="";
}
match($0, "^start (.+)$", arr) {
TEST_NAME=arr[1];
START_TIME="";
END_TIME="";
FILENAME="";
/* printf("TEST_NAME START: %s\n", TEST_NAME); */
}
match($0, /^(.+.xml) : (.+)$/, arr) {
FILENAME=sprintf("%s",arr[1]);
printf("%s|%s|%s|%s\n",TEST_NAME,FILENAME,START_TIME,END_TIME);
START_TIME="";
END_TIME="";
FILENAME="";
}
match($0, /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) ([^\ ]+) ([0-9]{4}):.*$/, arr) {
if(START_TIME ~ /^$/)
START_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
else
END_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
}
$0 ~ "^" TEST_NAME "$" {
/* printf("TEST_NAME END: %s\n", TEST_NAME); */
TEST_NAME="";
START_TIME="";
END_TIME="";
FILENAME="";
}
' "$INPUT_FILENAME" | while IFS="|" read TEST_NAME FILENAME START_TIME END_TIME
do
START_TIME_SEC=$(date -d "$START_TIME" +%s)
END_TIME_SEC=$(date -d "$END_TIME" +%s)
ELAPSED_SEC=$((END_TIME_SEC-START_TIME_SEC))
# No time supplied or elapsed time exceded.
if [ -z "$FILTER_MINUTES" -o "$ELAPSED_SEC" -gt "$FILTER_SECONDS" ]
then
## Remove $ELAPSED_SEC from here to not print elapsed seconds.
echo $TEST_NAME $FILENAME $ELAPSED_SEC
fi
done