2016-11-16 2 views
3

Ich verwende BDD (Behat) für Funktionstests in meinem Projekt. Jetzt habe ich ein Problem beim Testen einer Funktion mit zu vielen Hintergrundjobs. Beispiel:BDD-Test mit zu vielen Hintergrundjobs?

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" 

Dann muss ich warten, bis es fertig ist“ enthält:

  • Server 1 hochgeladene Datei erhalten haben, legen einige Metadaten-Datenbank und Status markieren „Import“ , dann zip-Datei auf s3 hochladen
  • Server 2 Download-Datei von s3 und verarbeiten Sie die Vermögenswerte Sachen wie PDF, Bilder, dann zip alles nach der Verarbeitung und erneut auf s3 hochladen.
  • Server 3 Download das Ergebnis Zip-Paket (done von Server 2) von s3, und starten Sie Ausgabe (Import pdf, Bilder, Artikel ...)

"Und ich sehe importieren Liste Artikel werden importiert "Ich rufe eine API zum Server, um eine Liste der Artikel dieses Problems zu erhalten.

So wie Sie sehen können, weil während des Imports, haben wir zu viele Hintergrundjob (mit Resque), also muss ich warten, bis es durch Überprüfung des Status der Ausgabe beendet ist:

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

Das Problem ist, Ich weiß nicht, wie lange ich warten muss, weil es auf die Größe des Ausgabepakets ankommt, je größer die Wartezeit ist. Also, was soll ich in dieser Situation tun?

+0

Was "Ich muss warten bis es fertig ist" enthält? und was "Ich sehe Liste der Artikel sind importiert" Schecks? – lauda

Antwort

1

Als allgemeine Übung müssen Sie eine bedingte Wartezeit verwenden, um etwas zu überprüfen, das Sie kennen (warten Sie Sekunden bis).

könnten Der Zustand sein:
- Status einer Anfrage
- ein Element auf einer Seite angezeigt wird
- eine Seite/Element wird nicht angezeigt

Tipp: Sie sollten nur while mit vermeiden Schleife und verwenden Sie eine do-while Schleife statt mit 2 Bedingungen eine, die Sie brauchen, in Ihrem Fall überprüfen Status, und eine, die aus der Schleife ausbrechen wird, wenn die erste nie wie eine Zählung erfüllt wird.

Verwandte Themen