rspec-retryのexponential_backoffを使うと徐々にwaitの時間を延ばせる

バージョン情報

本題

rspecで、「さっきは失敗したけど再実行しただけで成功するようになった」みたいな不安定なテストってあるよね。特にsystem specさん・・。
そんなときに、DOMの描画タイミングを研究したり、文字の表示を確認したりと色々試行錯誤するのだけど、結局最終的にはさっぱりわからなくなって、テストの成功はテストの再実行に頼ることになることもある。
その再実行をいちいち手動ではやってらんないので、自動でやってくれるというgemがrspec-retry

rspec-retryを使用したとき、使うオプションで代表的なものは次の2つだと思う。

  • retry
    • リトライ回数
  • retry_wait
    • リトライ時の待ち時間の秒数

これに加えて、さらにおすすめしたいオプションがexponential_backoffというやつ。
これを使うと、リトライ時野町時間の秒数の挙動が変わって、exponential_backoff: trueにしたとき、試行回数をnとおくと、待ち秒数が 2n-1 * retry_wait になるという優れもの。これはつまり、徐々に待ち時間が延びていくことになる。
たとえば、retry: 3, retry_wait: 10, exponential_backoff: trueの場合は次のような待ち秒数になる。

  • 1回目 10秒
  • 2回目 20秒
  • 3回目 40秒

マシン負荷が原因の場合は、普通にretryするよりも、徐々に待ち時間を延ばした方が確実かもしれないよね。。

タイトルとURLをコピーしました