2016-07-14 16 views
0

Ich bin mehrere Szenarien ausgeführt und möchte eine Art von dynamischen Szenario Dispatcher, die mir erlauben würde, bestimmte Schritte ausführen, nachdem ein Test durchgeführt wird, basierend auf dem Szenario ausgeführt. Als ich PHPUnit benutzte, war ich in der Lage, die Klasse TestCase abzuleiten und eigene Setup- und Teardown-Methoden hinzuzufügen. Für das Verhalten, was ich getan habe, ist das Hinzufügen eines zusätzlichen "Dann" -Schrittes am Ende des Szenarios, der ausgeführt würde, sobald das Szenario fertig ist, um alles zu bereinigen - bereinigt die Konfigurationsänderungen, die durch das Szenario usw. vorgenommen wurden. Aber seit jedem Szenario ist anders, die Konfigurationsänderungen, die ich vornehmen muss, sind spezifisch für ein Szenario, so dass ich den After_Scenario-Hook, den ich in meiner Datei environment.py habe, nicht verwenden kann. Irgendwelche Ideen, um etwas Ähnliches zu implementieren?Dynamische Szenario Dispatcher für Python Verhalten

Antwort

0

after_scenario übergibt sowohl das Szenario an die Funktion. Sie können dann den Szenariornamen oder eines seiner Tags versenden. Zum Beispiel mit Tags, können Sie Ihr Szenario als

@clean_up 
Scenario: Something 
    ... 

Und Ihre nach Hörer als

def after_scenario(context, scenario): 
    if 'clean_up' in scenario.tags: 
     ... 
    elif 'clean_down' in scenario.tags: 
     ... 
+0

Das hatte ich anfangs vor, aber ich habe zu viele Variationen der Abreißmethode. Wie kann man es skalierbarer machen? – nnja

+0

Wenn Sie versuchen, den Kontext zu bereinigen, können Sie überprüfen, ob der Kontext vorhanden ist, und die erforderliche Bereinigung dort durchführen. Überprüfen Sie zum Beispiel 'hasattr (context, 'thing_you_want_cleaned_up')' – Elliot

+0

Hmmm, was ich dachte, ist ich möchte spezifische Teardown-Methoden auf verschiedenen Szenarien durchführen. Grundsätzlich wie der Code, den Sie in der Frage geschrieben haben, aber ich möchte ihn skalieren (zB für 30 verschiedene Teardown-Methoden, die ich gerne hätte, würde dies 30 verschiedene Tags erfordern und würde bedeuten, dass die after_scenario-Funktion mindestens 30 Zeilen hätte?) – nnja

0

definieren, was ich getan habe könnte Ihnen eine Idee geben:

Im before_all Spezifiziere eine Liste im Kontext (zB context.teardown_items = []).

Dann in den verschiedenen Schritten verschiedenen Szenarien hinzufügen zu dieser Liste (Konten, Aufträge oder was auch immer)

Dann in dem after_all ich als Superuser anmelden und sauber alles bis ich in dieser Liste angegeben.

Könnte so etwas für Sie funktionieren?