例えば、不安定な外部のWeb APIにリクエストを送信するステップがある場合、リクエスト先が原因で失敗してしまいシナリオ全体が不安定になってしまいます。
この場合ステップのリトライをすることでシナリオ全体の不安定化を回避できます。
runnではloop構文でステップのリトライを設定できます。
steps[*].loop.until:
steps.<key>.loop.until:
通常は200のHTTPステータスを返すが不定期に500を返す不安定なWeb API GET /flaky/path
があるとします。
runners:
req: https://example.com/api/v1
steps:
-
req:
/flaky/path:
get:
body: null
[...]
200のHTTPステータスがでるまで最大5回リクエストをリトライするステップはloop構文を使って次のように書くことができます。
steps:
-
loop:
count: 5
until: current.res.status == 200
req:
/flaky/path:
get:
body: null
[...]
指数バックオフ(Exponential Backoff)でインターバルを設定する
リトライの設定もloop構文なのでループ実行と同じようにインターバルに指数バックオフを使用できます。
steps:
-
loop:
count: 5
minInterval: 500ms
maxInterval: 1min
jitter: 0.1
multiplier: 1.5
until: current.res.status == 200
req:
/flaky/path:
get:
body: null
[...]