ログ ファイルを解析し、実行時間が特定の期間を超えた場合にテスト名を伝える必要があります (ユーザーはこの時間を入力します。スクリプトが 30 分以上実行されたとします)
セキュリティテストスイートを開始する 2011 年 9 月 5 日月曜日 00:16:30 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:30 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:31 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:31 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/add_role_user_security.xml に結果を書き込んでいます add_role_user_security.xml : 合格 2011 年 9 月 5 日月曜日 00:16:31 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:31 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:32 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:32 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/privilege.xml に結果を書き込んでいます privilege.xml : 合格 2011 年 9 月 5 日月曜日 00:16:32 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:32 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:32 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:32 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/edit_role_user.xml に結果を書き込んでいます edit_role_user.xml : 合格 2011 年 9 月 5 日月曜日 00:16:32 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:32 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:33 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:33 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/remove_roles.xml に結果を書き込んでいます remove_roles.xml: 合格 2011 年 9 月 5 日月曜日 00:16:33 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:33 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:33 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:33 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user1.xml に結果を書き込んでいます role_user1.xml : 合格 2011 年 9 月 5 日月曜日 00:16:33 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:16:33 PDT: 開始... 2011 年 9 月 5 日月曜日 00:16:34 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:16:34 PDT: 結果を /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user2.xml に書き込んでいます bug10611.xml: 合格 セキュリティテストスイート テストスイートの開始 2011 年 9 月 5 日月曜日 00:18:52 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:18:52 PDT: 開始... 2011 年 9 月 5 日月曜日 00:18:52 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:18:52 PDT: 結果を /space/builder/builds/macosx-64/HEAD/qa/scripts/results/setup_script.xml に書き込んでいます setup_script.xml: 合格 2011 年 9 月 5 日月曜日 00:18:52 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:18:52 PDT: 開始... 2011 年 9 月 5 日月曜日 00:18:58 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:18:58 PDT: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/bug_scripts.xml に結果を書き込んでいます bug_scripts.xml: 合格 2011 年 9 月 5 日月曜日 00:18:58 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:18:58 PDT: 開始... 2011 年 9 月 5 日月曜日 00:18:58 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:18:58 PDT: 結果を /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 : 合格 2011 年 9 月 5 日月曜日 00:19:01 PDT: スレッドを作成しています... 2011 年 9 月 5 日月曜日 00:19:01 PDT: 開始... 2011 年 9 月 5 日月曜日 00:19:01 PDT: 結果を報告しています... 2011 年 9 月 5 日月曜日 00:19:01 PDT: 結果を /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 セキュリティ テスト スイート privilege.xml セキュリティ テスト スイート remove_roles.xml セキュリティテストスイート string_script.xml テストスイート 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