バージョン情報
- rspec-retry 0.6.2
本題
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するよりも、徐々に待ち時間を延ばした方が確実かもしれないよね。。