同じコマンドを複数回連続して実行し、すべての終了コードをキャプチャする方法は?

同じコマンドを複数回連続して実行し、すべての終了コードをキャプチャする方法は?

私は非常に不安定なエンドツーエンドのテストスイートを実行しており、どのテストが最も不安定であるかを確認する方法を望んでいます。最も簡単な方法は、テストを数百回実行し、成功率の値を返すようです。

もちろん、私の問題は私が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

完全な答え:

  1. 関数からrunTests出力を単一または複数のログファイルにリダイレクトできます。ローカル変数を生成しoutput、絶対に使用しないか、またはSPEC=desktop/homepage npm test > uniqe_log_$xを実行してくださいSPEC=desktop/homepage npm test > combined_log。このために、xスクリプトの上部に宣言した変数をこっそり借りて各テストを増やしました。

  2. また、関数では変数を定義したり実行したりするrunTests必要はありません。exitCodeechoreturn $?

  3. 関数内の関数の外側で関数を呼び出すので、runTestsMany変数はすべての反復に対して常に同じであるため、BSで必要なものに近いスクリプトを呼び出します。runTestswhileexitcode1..numtotal

  4. 1または0しかないと仮定するため、exitcodeテストする必要はありません。変数に追加するだけですnumerror。 numError=$(($numError + $exitcode))。

  5. echo個々の成功やエラーを実行することは、有用な情報を追加せずに結果を複雑にするので、意味がないと思います。

  6. 宣言された最終変数も必要ありません。ただ後続のステートメントnumsuccessに入れるだけです。$(($numTotal - $numError))echo

  7. 声明はどうなりますかtrap?紛失/削除してください。

関連情報