2016-04-07 8 views
3

Ich jongliere Code-Zweige, die teilweise vor ein paar Monaten gemacht wurden, mit ineinander verschlungenen Abhängigkeiten. So ist der einfachste Weg, sich vorwärts zu bewegen ist auf einen bestimmten Zweig als anhängig ist (die rspec Art und Weise) vorgeschriebenen Prüfungen nicht zu markieren, oder übersprungen werden, und mit ihnen umgehen, nachdem alles in verschmolzen wurde.Wie überspringe ich einen Test im Verhalten Python BDD-Framework?

In seinem Schlussbericht behave Berichte die Anzahl der Tests, die bestanden haben, # fehlgeschlagen, # übersprungen und # nicht getestet (die nicht Null sind, wenn ich Strg-C drücke, um einen Lauf abzubrechen). So behave als ein Konzept der übersprungenen Tests. Wie kann ich auf zugreifen?

Antwort

2

Behave überspringt Tests nicht, es überspringt Schritte in einem Szenario, das bereits fehlgeschlagen ist. Springtests werden nicht direkt unterstützt, aber wenn Sie nur einen Teil Ihrer Tests ausführen müssen, können Sie control the execution with tags.

-1

Sie können das vordefinierte "@ skip" -Tag für die Szenarios oder Funktionen verwenden, die Sie überspringen möchten, und das Verhalten wird das Testen des Szenarios oder der gesamten Funktion automatisch überspringen.

+0

Unwahr. Ich habe gerade versucht, @skip zu einem meiner Szenarien hinzuzufügen und es wurde von Behave 1.2.5 ignoriert, genau wie ich es erwartet hatte. '@ wip' ist vordefiniert wie hier [https://pythonhosted.org/behave/tutorial.html#controlling-things-with-tags] angegeben. Allerdings finde ich nirgendwo eine Erwähnung von @ skip. – Louis

+0

Sorry, überspringen funktioniert nur für Szenarien. Sie können also @skip-Tag verwenden, um ein Szenario zu überspringen, aber nicht die gesamte Funktion. Für Details zum Modus: https://jenisys.github.io/behave.example/tutorials/tutorial11.html – shakyaabiral

+0

Das Tutorial sagt "vordefinierte oder häufig verwendete Tags". '@ skip' und' @ slow' sind nicht "vordefiniert". Sie werden "oft benutzt". Mit anderen Worten, Sie können ein '@ skip'-Tag verwenden, wenn Sie möchten, das Sie dann mit der Option' --tags' steuern können *, genau wie jedes andere Tag *, was die [akzeptierte Antwort] (http://stackoverflow.com/a/36518200/1906307) umfasst. Sie können Szenarien mit einem Tag namens "@ skip" oder "@ potato" oder "@ asdf" überspringen. '@ skip' ist leichter verständlich, hat aber keinen besonderen Status. – Louis

8

Wenn Sie die Dinge in der Befehlszeile steuern möchten, dann tun Sie was Tymoteusz Paul in einer anderen Antwort vorgeschlagen. Kurz gesagt, Sie können jedes Tag verwenden, das Sie für Ihre Features und Szenarien markieren möchten, und dann --tags verwenden, um Features und Szenarien basierend auf den von Ihnen verwendeten Tags auszuwählen oder deren Auswahl aufzuheben. Die Dokumentation zeigt das Beispiel der Markierung langsamer Szenarien mit @slow und dann behave --tags=slow, um nur die langsamen Tests auszuführen, oder behave --tags=-slow, um die langsamen Tests auszuschließen. Das Lesen der documentation wird empfohlen, um zu lernen, welche Syntax --tags ermöglicht.

Mit der obigen Methode können Sie @skip verwenden und behave --tags=-skip tun. Dies schließt alles aus, was mit @skip markiert ist, aber es ist ärgerlich, das zusätzliche Argument bei jedem Aufruf mit einzubeziehen. Konnte nicht @skip nur selbst sagen Behave zu überspringen, ohne dass irgendwelche Argumente auf der Kommandozeile?

Wenn Sie einen @skip Tag, die mit ihm gekennzeichneten Features und Szenarien überspringen werden, ohne dass ein zusätzliches Argument erforderlich ist, dann wird, wie von Behave 1.2.5, Sie müssen die Funktionalität in Ihre environment.py Datei bauen. Im Gegensatz zu what this answer schlägt vor, es ist nicht eingebaut. Wir fügen die Funktionalität wie folgt aus:

def before_feature(context, feature): 
    if "skip" in feature.tags: 
     feature.skip("Marked with @skip") 
     return 

    # Whatever other things you might want to do in this hook go here. 

def before_scenario(context, scenario): 
    if "skip" in scenario.effective_tags: 
     scenario.skip("Marked with @skip") 
     return 

    # Whatever other things you might want to do in this hook go here. 

Das Argument der .skip Methoden ist der Grund für das Überspringen.

Ich verwende immer .effective_tags, um das Testen von Tags in Szenarien durchzuführen. Das Feld .effective_tags erbt die Tags, die für das Feature festgelegt wurden. In dem vorliegenden Fall macht das keinen Unterschied, denn wenn das Feature @skip hat, werden die Szenarios in diesem Fall bereits übersprungen. Ich bevorzuge es jedoch, beim allgemeinen Prinzip zu bleiben, dass Tag-Check-In-Szenarien .effective_tags verwenden sollten, damit die Tag-Vererbung funktioniert.


Warten! Sagt die tutorial nicht, dass @skip eingebaut ist?

Nein, das Tutorial präsentiert die Dinge ein wenig irreführend, weil es eine Liste gibt, die @skip neben @wip zeigt.@wip ist eingebaut, also @skip ist auch eingebaut? Nein, sie sind in einer Liste von "Vordefinierten oder oft verwendeten Tags". @skip wird nur "oft verwendet". Es wird oft verwendet, weil das Wort "überspringen" auf informative Weise verwendet wird, um etwas als übersprungen zu markieren. Es bedeutet nicht, dass das Tag in Behave eingebaut ist.

+0

Eine leichte Verfeinerung wäre hier, '' und nicht context.config.tags.check (["skip"]) 'zu den if-Anweisungen hinzuzufügen, so dass ein explizites' --tags = skip 'Sie weiterhin alle laufen lässt Überspringt derzeit Tests. – ncoghlan

+0

Eine Korrektur zu meinem vorherigen oben: Der erforderliche Zusatz ist 'und nicht (context.config.tags und context.config.tags.check ([" skip "]))' ', da ein leerer Tag-Ausdruck sonst' True' meldet für jedes Tag. – ncoghlan

Verwandte Themen