저는 매우 불안정한 엔드투엔드 테스트 스위트를 실행하고 있으며 어떤 테스트가 가장 불안정한지 확인하는 방법을 원합니다. 가장 쉬운 방법은 테스트를 수백 번 실행하고 성공률 값을 반환하는 것 같습니다.
물론 내 문제는 내가 bash에 익숙하지 않다는 것입니다.
제가 있는 곳은 다음과 같습니다.
numTotal=2
numError=0
x=1
function runTests() {
local output=$(SPEC=desktop/homepage npm test)
local exitCode=$?
echo "$exitCode"
}
function runTestsMany() {
while [ $x -le $numTotal ]
do
local exitCode=$(runTests)
if [ 1 -eq "$exitCode" ]
then
numError=$(( $numError + 1 ))
echo "Error"
else
echo "Success"
fi
x=$(( $x + 1 ))
done
numSuccess=$(($numTotal - $numError))
echo "$numSuccess / $numTotal succeeded."
}
trap runTestsMany EXIT
이는 내가 원하는 것과 비슷하지만 테스트의 모든 출력을 침묵하게 만들어 실행 후 실패 조사를 더욱 서투르게 만듭니다.
종료 코드를 캡처하는 동안 테스트에서 계속 출력하려면 어떻게 해야 합니까?
미리 감사드립니다!
최고의 마이클
편집: 또한 할당된 스크립트를 어떻게 전달합니까 output
? 변수에 넣으려고 할 때마다 가 표시 SPEC=desktop/homepage: No such file or directory
되므로 뭔가 잘못하고 있는 것입니다.
답변1
1) 출력 리디렉션 2) 하지 마세요 trap
.
전체 답변:
함수에서
runTests
출력을 단일 또는 여러 로그 파일로 리디렉션할 수 있습니다. 지역 변수를 생성output
하고 절대 사용하지 않는 대신SPEC=desktop/homepage npm test > uniqe_log_$x
또는 를 실행하세요SPEC=desktop/homepage npm test > combined_log
. 이를 위해x
스크립트 상단에 선언한 변수를 몰래 빌려서 각 테스트를 증가시켰습니다.또한 함수에서는 변수를 정의 하거나 실행할
runTests
필요가 없습니다 .exitCode
echo
return $?
귀하의 함수에서 함수 외부에서 함수를 호출하므로
runTestsMany
변수 는 모든 반복에 대해 항상 동일하기 때문에 BS로 원하는 것과 가까운 스크립트를 호출하겠습니다 .runTests
while
exitcode
1..numtotal
1 또는 0만 있을 수 있다고 가정하므로
exitcode
테스트할 필요가 없습니다. 변수에 추가하기만 하면 됩니다numerror
. numError=$(($numError + $exitcode)).echo
개별적인 성공이나 오류를 실행하는 것은 유용한 정보를 추가하지 않고 결과를 복잡하게 만들기 때문에 아무 의미가 없다고 생각합니다 .선언된 최종 변수 도 필요하지 않습니다. 그냥 후속 명령문
numsuccess
에 넣으면 됩니다 .$(($numTotal - $numError))
echo
성명서는 어떻게 되나요
trap
? 분실/삭제하세요.