現在のステップをスキップするようにステップ実装で動作するように指示する方法はありますか?
何かのようなもの:
@given("bla bla bla")
def step():
skip_current_step()
ユースケースは、追加のソフトウェアがインストールされているかどうかを確認したいということです。そうでない場合は、シナリオ全体をスキップしてください。
現在のステップをスキップするようにステップ実装で動作するように指示する方法はありますか?
何かのようなもの:
@given("bla bla bla")
def step():
skip_current_step()
ユースケースは、追加のソフトウェアがインストールされているかどうかを確認したいということです。そうでない場合は、シナリオ全体をスキップしてください。
@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
ステップ内からスキップできるかどうかはわかりませんが、機能レベルでシナリオ全体をスキップできます。
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()
Feature
、Scenario
、およびScenarioOutline
すべてにmark_skipped()
メソッドがあります。