2016-11-16 5 views
3

私はプロジェクトで機能テストにBDD(Behat)を使用しています。 バックグラウンドジョブが多すぎる機能をテストするときに問題が発生しました。例:、バックグラウンドジョブが多すぎるBDDテスト?

  • サーバ1は、アップロードされたファイルを受信した「輸入」するために、データベースとマークの状態にいくつかのメタデータを挿入します。

    Scenario: Import issue at the first time 
        Given I have a issue package "1602.zip" 
        When I upload issue "1602.zip" 
        Then I have to wait until it is finished 
        And I can see list of articles are imported 
        And status of issue is "1" 
    

    含む「その後、私は終了するまで待たなければなりません」次にs3にzipファイルをアップロードする

  • s3からサーバー2のダウンロードファイルをダウンロードし、PDF、画像などの素材を処理した後、処理してs3に再度アップロードします。
  • S3からサーバ3のダウンロード(サーバ2で行われる)結果のzipパッケージを、そして問題のインポートを開始(輸入PDF、画像、記事を...)

そして私はのリストを見ることができます記事がインポートされる "私はその問題の記事のリストを取得するためにサーバーへのAPIを呼び出しますか?

だから、あなたが見ることができるように、インポート時に、我々は(Resqueを使用して)あまりにも多くのバックグラウンドジョブを持っているので、私はそれは問題の状況をチェックして終了するまで待機する必要があるため:

while ($status != 1) { 
    $status = getStatusOfIssue(123); 
    if (1 === $status) { 
     break; 
    } 
} 

問題があります私はどれくらい待たなければならないのか分からない。なぜなら、問題パッケージのサイズに依存しているから、サイズが大きいほど待ち時間が長くなるからだ。このような状況で、私は何をすべきですか?

+0

「完了するまで待つ必要があります」には何が含まれていますか? "記事のリストがインポートされているのを確認できます"というチェックは何ですか? – lauda

答えて

1

通常、条件付き待機を使用して、知っているものを確認する必要があります(待機秒間)。

条件は次のようになります。
- 要求
の状況 - の要素がページに表示され
- ページ/要素は表示されません

ヒント:あなただけwhile使用しないでくださいループを使用してループの代わりにdo-whileループを使用します。必要な2つの条件(状況をチェックする場合)と、最初のループがカウントのように実行されない場合はループから抜けるループを使用します。

関連する問題