로그 파일을 구문 분석하고 실행 시간이 일정 시간 이상 소요되면 테스트 이름을 알려주어야 합니다(사용자는 스크립트 실행에 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
이 응답 하단의 코드는 귀하가 요청한 작업을 수행하고 귀하가 제공한 예제를 기반으로 작동합니다.
설명하다:
기본적으로 두 단계로 작동합니다.
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