Chapter 10無料公開

ステップのリトライを設定する

Ken’ichiro Oyama
Ken’ichiro Oyama
2023.01.15に更新

例えば、不安定な外部の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
[...]