2016-04-07 15 views
3

私は数ヶ月前に部分的に行われたコードの分岐を絡み合っています。したがって、特定のブランチで失敗したテストを保留中(rspecウェイ)にするかスキップして、すべてがマージされた後に処理するのが最も簡単な方法です。動作Python BDDフレームワークでテストをスキップするにはどうすればよいですか?

最終レポートでは、behaveレポート渡されたテストの数、#失敗、#スキップ、#テストされていない(Ctrl + Cを押して実行を中止したときに0でない)したがって、スキップされたテストの概念としてbehave。どうすれば にアクセスできますか?

答えて

2

Behaveはテストをスキップしません。すでに失敗したシナリオのステップをスキップします。テストのスキップは直接サポートされていませんが、テストの一部のみを実行する必要がある場合はcontrol the execution with tagsとなります。

-1

スキップして動作させたいシナリオや機能にあらかじめ定義された "@skip"タグを使用して、シナリオや機能全体のテストを自動的にスキップします。

+0

私は自分のシナリオの1つに@skipを追加しようとしましたが、期待通りにBehave 1.2.5では無視されました。 '@wip'は、[ここ](https://pythonhosted.org/behave/tutorial.html#controlling-things-with-tags)で指摘されているようにあらかじめ定義されています。しかし、どこにでも '@ skip'の言及がありません。 – Louis

+0

申し訳ありませんが、スキップはシナリオでのみ機能します。だから、@ skipタグを置いてシナリオをスキップすることはできますが、全機能をスキップすることはできません。 モードの詳細について: https://jenisys.github.io/behave.example/tutorials/tutorial11.html – shakyaabiral

+0

チュートリアルでは、「あらかじめ定義された、またはしばしば使用されるタグ」と書かれています。 '@skip'と' @slow'は "あらかじめ定義されていません"。それらは「しばしば使用される」。言い換えれば、あなたが自由に '@ skip'タグを使用することができます。これは' --tags'オプション*を使って制御することができます。他のタグと同じように*することができます。 http://stackoverflow.com/a/36518200/1906307)を参照してください。 '@skip'や' @ potato'や '@ asdf'という名前のタグでスキップすることができます。 '@skip'はよりわかりやすいものの、特別なステータスはありません。 – Louis

8

コマンドラインで制御する場合は、別の回答で示唆しているのはTymoteusz Paulです。要約すると、機能とシナリオをマークするタグを使用して、--tagsを使用して、使用したタグに基づいて機能やシナリオを選択または選択解除することができます。このドキュメントでは、遅いシナリオに@slowとマークし、次にbehave --tags=slowを使用して遅いテストを実行するか、またはbehave --tags=-slowを使用して低速テストを除外する例を示します。 --tagsが許可する構文については、documentationを読むことをお勧めします。

上記の方法では、@skipbehave --tags=-skipを使用できます。これにより、@skipとマークされたものは除外されますが、すべての呼び出しで余分な引数を含める必要があります。 @skipそれ自体ではありませんコマンドラインで引数を必要とせずに、Behaveにスキップするよう指示しますか?

あなたは、その後、追加の引数を必要とせず、それが付いて機能やシナリオをスキップします振るまい1.2.5のように、あなたがあなたenvironment.pyファイルに機能を構築しなければならない@skipタグをしたい場合。what this answerとは逆に、ではなく、を内蔵しています。私たちは、このような機能を追加:

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. 

.skipメソッドの引数はスキップの理由です。

シナリオでタグテストを実行する場合は、常に.effective_tagsを使用します。 .effective_tagsフィールドは、フィーチャに設定されたタグを継承します。ここにある場合は、機能には@skipがあれば強制的にシナリオがスキップされるため、違いはありません。しかし、一般的な原則に従えば、シナリオのタグチェックでは.effective_tagsを使用して、タグの継承が機能するようにすることをお勧めします。


待機! tutorialには@skipが組み込まれているとは言えませんか?

いいえ、このチュートリアルでは、@wipの隣に@skipという名前のリストが表示されるため、少し誤解を招くことがあります。@wipは内蔵されているので、@skipはあまりにも込み入っていますか?いいえ、彼らはリストにあります "定義済みまたは頻繁に使用されるタグ"です。 @skipは単に「よく使う」です。有益な方法で「スキップ」という言葉を使用して、何かをスキップしたものとしてマークするためによく使用されます。タグがBehaveに組み込まれている必要はありません。

+0

ここで少し改良すると、if文にcontext.config.tags.check(["skip"]) 'を追加するのではなく、' --tags = skip'を明示的に現在はテストをスキップしています。 – ncoghlan

+0

私の前の上記の修正:必要な追加は 'とnot(context.config.tagsとcontext.config.tags.check([" skip "]))'であり、空のタグ式として 'True'すべてのタグについて – ncoghlan