Überspringe einen Verhalten-Schritt in der Schritt-Implementierung

8

Gibt es eine Möglichkeit, das Verhalten in einer Schritt-Implementierung zu sagen, um den aktuellen Schritt zu überspringen?

Etwas wie:

%Vor%

Der Anwendungsfall ist, dass ich prüfen möchte, ob zusätzliche Software installiert ist. Wenn nicht, möchte ich, dass das komplette Szenario übersprungen wird.

    
Giacomo d'Antonio 22.10.2014, 09:14
quelle

3 Antworten

3

Ich weiß nicht, ob Sie innerhalb eines Schritts überspringen können, aber Sie können ein ganzes Szenario auf Feature-Ebene überspringen:

%Vor%

Feature , Scenario und ScenarioOutline alle haben eine mark_skipped() Methode.

    
Barry 02.12.2014, 20:59
quelle
8

Lass mich @ Barry's Antwort verbessern:

Grundsätzlich entspricht das, was er vorgeschlagen hat (d. h. scenario.mark_skipped() ):

%Vor%

Um genau zu sein, sieht die Quelle von mark_skipped() folgendermaßen aus:

%Vor%

skip() ist wie folgt definiert:

%Vor%

Ein paar Dinge:

  • require_not_executed=True bedeutet, dass das Szenario nicht übersprungen werden kann, wenn ein Schritt bereits bestanden wurde, d. h. mark_skipped() im zweiten oder späteren Schritt löst eine Ausnahme aus und überspringt anschließend alle nachfolgenden Schritte, anstatt nur die weiteren Schritte zu überspringen
  • skip() ermöglicht es, einen Grund für das Überspringen anzugeben, der dann als WARN protokolliert wird.

Darüber hinaus ist scenario object im Kontext als context.scenario verfügbar (neben context.feature ).

Letztendlich einfaches Beispiel:

%Vor%

Ergebnis:

%Vor%     
m4tx 12.04.2015 13:12
quelle
2

Es hängt von dem Effekt ab, den Sie anstreben. Wenn der gewünschte Effekt bedeutet, dass ein einzelner Schritt übersprungen wird und nur dieser einzelne Schritt , bietet ab Version 1.2.5 verhalten keine API dafür. Wenn Sie in behave/model.py suchen, sehen Sie, dass für die Klasse skip keine Methoden mark_skipped und Step vorhanden sind. Dafür gibt es keinen alternativen Mechanismus.

Wenn der gewünschte Effekt für den Schritt und das gesamte Szenario als übersprungen markieren soll, dann ist dies möglich. Wenn Sie damit einverstanden sind, dann wird der Antwort von Barry ist wirklich, was Sie tun mussten, bevor 1.2.5: Verwenden Sie before_feature , um die Szenarien zu scannen und Markieren Sie sie als übersprungen, bevor Sie sie ausführen. Dies würde effektiv Ihren Schritt als übersprungen markieren.

Wie die Antwort von m4tx zeigt , können Sie ab Verhalten 1.2.5 context.scenario.skip von der Implementierungsfunktion eines Schritts aufrufen Überspringen Sie das Szenario. Dies wiederum wird jedoch das gesamte Szenario als übersprungen markieren. Es ist wahr, dass die früheren Schritte ausgeführt wurden und eine Chance hatten, fehlzuschlagen, aber wenn das Szenario in der Anzahl der übersprungenen Szenarien erscheint und alle seine Schritte (einschließlich derjenigen, die vor der Der Schritt namens context.scenario.skip ) erscheint in der Liste der übersprungenen Schritte. Darüber hinaus werden die Schritte, die dem Schritt folgen, der context.scenario.skip aufgerufen hat, überhaupt nicht ausgeführt.

    
Louis 20.07.2015 12:02
quelle

Tags und Links