2016-12-16 3 views
-1

RubyのRSpecテストスイートでは怠け者になってしまい、DBのやり方を邪魔するのではなく、あまりにも簡単に使います。私は継続的な統合ビルドでスクリプトを追加しようとしています。これは、任意のテストが5秒間実行された場合、ビルドが失敗するということです。1回のテストで時間制限を超えて実行するとRSpecテストが失敗する方法はありますか?

ここまでは私がこれまで行っている方向です。

  1. 使用RSpecのの--profileオプション

  2. Grepの秒アウト。

  3. 秒が一定の制限を超えると失敗します。

これは私がこれまで持っているWIPコマンドです:

rspec spec/models/user_spec.rb --profile | \ 
tee /dev/tty | \ 
grep '[0-9] seconds ./' | \ 
grep -oEi '[0-9]+\.[0-9]+' | \ 
awk '$1 > 5.0' \ 

問題

  • 番号アウトこれますのみawk。これがビルドプロセスで失敗すると、どのファイルが違反者であるかわかりません。

  • パイプから不具合があるようです。

私はこのようにそれを行うだろう(しかし、より良い方法がなければならない):問題のうち

if $(rspec spec... awk ...) > /dev/null ; then exit 1 ; fi 

、私は最初のものに最もこだわっ。助言がありますか?

答えて

0

あなたはそれだけでawkを使うかもしれません。私はrspecの出力に精通していないので、私は意味を理解するために発明した。 はここですべてを印刷するだろうが、それはXY秒でラインを検出したときに、それが終了する必要がある場合、それが評価されます可能な解決策のようになります。

{ 
    echo "Running step 4." 
    echo "Processing 4.0 seconds." 
    echo "Running step 5." 
    echo "Processing 5.0 seconds." 
    echo "Running step 5.1." 
    echo "Processing 5.1 seconds." 
    echo "Running step 6." 
    echo "Processing 6.0 seconds." 
} | awk '{ print; 
      var=substr($0, match($0, /[0-9]+\.[0-9]+ seconds\./), 3) 
      if (var ~ /[0-9]+\.[0-9]+/ && var >= 5) { 
       print "Stop here! It took to long.", var; 
       exit 123 } 
     }' 

結果は次のようになります。

Running step 4. 
Processing 4.0 seconds. 
Running step 5. 
Processing 5.0 seconds. 
Stop here! It took to long. 5.0 

ありawkの奇妙な変換の問題ですが、あなたのケースではそれほど重要ではないかもしれません。

match()の正規表現をより良い出力に置き換えることができます。

関連する問題