11

現在のステップをスキップするようにステップ実装で動作するように指示する方法はありますか?

何かのようなもの:

@given("bla bla bla")
def step():
    skip_current_step()

ユースケースは、追加のソフトウェアがインストールされているかどうかを確認したいということです。そうでない場合は、シナリオ全体をスキップしてください。

4

3 に答える 3

14

@Barryの答えを改善させてください:

基本的に、彼が提案したもの (つまりscenario.mark_skipped()) は次のようになります。

scenario.skip(require_not_executed=True)

正確には、mark_skipped()のソースは次のようになります。

def mark_skipped(self):
    """Marks this scenario (and all its steps) as skipped.
    Note that this method can be called before the scenario is executed.
    """
    self.skip(require_not_executed=True)
    assert self.status == "skipped", "OOPS: scenario.status=%s" % self.status

skip()は次のように定義されます。

def skip(self, reason=None, require_not_executed=False)

いくつかのこと:

  • require_not_executed=Trueいずれかのステップがすでに通過している場合、シナリオをスキップできないことを意味します。つまりmark_skipped()、2 つ目以降のステップで例外がスローされ、その後のステップをスキップするだけでなく、その後のすべてのステップがスキップされます。
  • skip()スキップの理由を提供できます。これは、としてログに記録されWARNます。

さらに、scenarioオブジェクトはコンテキストでcontext.scenario(とともにcontext.feature) として使用できます。

最終的に、簡単な例:

@given("test photos in upload directory")
def step_impl(context):
    if not connection_available():
        context.scenario.skip(reason='internet connection is unavailable')

結果:

Skipped: skipped
WARNING:behave:SKIP Scenario Retrieving uploaded photo details: internet connection is unavailable
于 2015-04-12T13:12:19.590 に答える
5

ステップ内からスキップできるかどうかはわかりませんが、機能レベルでシナリオ全体をスキップできます。

def before_feature(context, feature):
    is_software_installed = some_foo_magic()

    if not is_software_installed:
        for scenario in feature.scenarios:
            if depends_on_software(scenario):
                scenario.mark_skipped()

FeatureScenario、およびScenarioOutlineすべてにmark_skipped()メソッドがあります。

于 2014-12-02T20:59:31.573 に答える