私は非常に不安定なエンドツーエンドのテストスイートを実行しており、どのテストが最も不安定であるかを確認する方法を望んでいます。最も簡単な方法は、テストを数百回実行し、成功率の値を返すようです。
もちろん、私の問題は私が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
?紛失/削除してください。