Open10

読者コミュニティ|runn クックブック

ブック購入させていただきました。

テストの書き方について質問がございます。
非同期にDBレコードの値が変わるAPIのテストで使ってみたいと思いインストールしました。

下記のようなステップのテストを記述しています。

・API呼び出し
・DB参照

現状ですとAPI呼び出し後、DB参照がすぐに行われ、ステータスが変わる前の値を検証してしまいテストが通りません。

DB参照前に数秒Sleepさせることは可能なのでしょうか?

こんにちは。購入ありがとうございます。

DB参照前に数秒Sleepさせること

おそらく実施したいことは「ステータスが変わることを検証したい」だと思われます。

2つ紹介します。

例として「APIコール後に users テーブルの status カラムの値が 0 から別の値( 1 とか 2 など)になること」を確認するケースを考えます。

1. 単純にsleepさせる

Execランナーをつかって sleep コマンドを挟みます。

steps:
  - 
    req:
      /path/to/endpoint:
        post:
          # (snip)
  - 
    exec:
      command: sleep 5
  -
    db:
      query: SELECT status FROM users;
    test: current.rows[0].status != 0

2. ステータスが変化するまで確認する

loop: セクションを使用してリトライをします。

steps:
  - 
    req:
      /path/to/endpoint:
        post:
          # (snip)
  -
    db:
      query: SELECT status FROM users;
    loop: 
      interval: 5sec # 失敗したら5秒待つ
      count: 3 # 3回リトライする
      until: current.rows[0].status != 0

リトライについては「ステップのリトライを設定する 」で紹介していますのでご覧ください。

ご返信ありがとうございます。
execランナーがまさにやりたいことでした。

ご回答ありがとうございます。

初めまして。かろっくと申します。
昨日からrunnを使わせていただいております。このrunnの使い方について、いくつか質問失礼します。
runn run dummy.ymlを実行した際に、一つのシナリオごとにテストの成功/失敗を表示していますが、ステップごとの成功の可否を表示することはできますでしょうか?
また、ステップが一つ失敗したとき、以降のテストが実行されませんが、以降のテストが実行されるようなオプション等は存在しますか?
よろしくお願いいたします。

質問ありがとうございます!

一つのシナリオごとにテストの成功/失敗を表示していますが、ステップごとの成功の可否を表示することはできますでしょうか?

v0.64.1時点ではありません。シナリオの成功=シナリオ内の全ステップの成功(スキップ除く)なのでステップの成功失敗の表示はありません。

ステップが一つ失敗したとき、以降のテストが実行されませんが、以降のテストが実行されるようなオプション等は存在しますか?

v0.64.1時点ではありません。ステップの失敗が発生すると即シナリオ失敗となっています。


なお、後者の質問に対してですが、現在オプションの作成を検討しておりそのための実装を追加している最中です。
そうすると必然的に前者の質問(ステップごとの失敗)についても対応していくことになるのではないかと思います。

ご返信ありがとうございます!実装お待ちしています。

ログインするとコメントできます