不安定なテストを再実行してくれるrspec-retryを試している。サンプルを見てもいまいち書き方がよくわからなかった。
rspec-retry
Jenkins Pipelineのretryがうまく動いてくれていたので安泰かと思ったのだけれど、

Jenkinsのパイプラインで retry を使ってジョブを再実行させる
Jenkinsのパイプライン(Pilepine)をさわっていて、ジョブの再実行のあたりがモヤモヤしていたので動きを調べてみた。結論としては、retryブロックはtryブロックに似たような処理をするので、try-catchで囲ったら予期せぬ動きになってしまう。
これだとジョブ全体を再実行してしまうので、ジョブ内で bundle exec rspec test_spec.rb
とか書いている場合、test_spec.rb
の中にあるit
全部が再実行されてしまう。できれば失敗したit
だけ実行したいもの。
なので個別にケースをコントロールできそうなrspec-retryを使うことにした。
サンプルには、config.around :each, :js do |ex|
と書けば、”# run retry only on features ”とあるのでFeaturesレベルでリトライをしてくれるそうだ。
でもって、テストケースには:retry => 3
を追加している。
多分それぞれは排他的に設定できて、以下のように書けば、全 it
に :retry => 3
を書く必要がなくなる。
example.run_with_retry
はexample.run
でもうまく動いたし、2回も:retry => 3
を核のやだなーと思ったので使わず。
ex.metadata
でそれぞれのexample
の情報を取ったり設定できるのを学んだ。