2016-07-14 7 views
0

私は複数のシナリオを実行しており、実行されたシナリオに基づいてテストが実行された後に実行する特定の手順を実行できるような動的シナリオディスパッチャを組み込みたいと考えています。私がPHPUnitを使用していた時、私はTestCaseクラスをサブクラス化し、独自のセットアップとティアダウンメソッドを追加することができました。私がしてきたことは、シナリオの終わりにシナリオの終了時に余分な「Then」ステップを追加して、シナリオがすべてをクリーンアップした後に実行されるようにすることです。環境設定ファイルにあるafter_scenarioフックを使用することができないため、シナリオ固有の設定変更が必要です。同様のものを実装する方法に関するアイデア?Python Behaveの動的シナリオディスパッチャ

答えて

0

after_scenarioは、両方のシナリオを機能に渡します。その後、シナリオ名またはそのタグのいずれかにディスパッチできます。 before_allで

:例えば、タグで、あなたはあなたのアイデアを私は何をやってきたを与える可能性がある

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

これは私が当初考えていたものですが、私は引き裂き方法のバリエーションが多すぎます。それをよりスケーラブルにするには? – nnja

+0

コンテキストにあるものを解体しようとしている場合は、そのコンテキストに存在するものが存在するかどうかを確認し、そこに必要なクリーンアップを実行できます。たとえば、 'hasattr(context、 'thing_you_want_cleaned_up')'をチェックしてください。 – Elliot

+0

私が考えていたことは、さまざまなシナリオで特定のティアダウンメソッドを実行することです。基本的には、あなたが質問に投稿したコードと同じですが、私はそれをスケールしたいと思います(例えば30種類のティアダウン方法については、30種類のタグが必要で、after_scenario関数は少なくとも30行になるでしょうか? ) – nnja

0

として

リスナー後
@clean_up 
Scenario: Something 
    ... 

そして、あなたとしてあなたのシナリオを定義することができますコンテキスト内でリストを指定してください(例:context.teardown_items = [])。様々なシナリオのさまざまな段階で次に

は私がそのリストに指定されたスーパーユーザとクリーンアップのすべてとしてログインafter_allに続いて(アカウント、受注または何でも)そのリストに

を追加します。

あなたのために働くようなものがありますか?

関連する問題