是否可以为每个行为特征指定一个特定的 "after feature" 挂钩?
Is it possible to specify a specific "after feature" hook for each behave feature?
我知道,在 behave 中,可以使用 environment.py
指定 before_feature()
和 after_feature()
函数在 每个特征。
但是,有没有一种方法可以指定仅针对 特定 功能执行的自定义后功能?
在网上搜索时,我发现有几页讨论了使用 cucumber-jvm 执行此操作的可能方法,但没有关于使用 behave 执行此操作的内容:
- Getting @BeforeAll and @AfterAll behaviour with Cucumber JVM and JUnit
- Add @BeforeAll and @AfterAll hooks cucumber-jvm GitHub issue
- cucumber-jvm global hook workarounds
举个例子,我想做类似的事情:
Feature: My feature
AfterFeature:
Then Database is reset
# Scenarios
我想到的一件事是 context
可以在“全局”after_feature()
函数中查看,然后自定义代码可以是 运行 如果特征的名称匹配想要的名字。例如,类似于:
# In environment.py
def after_all(context):
if context.feature.name == 'feature_with_custom_teardown.feature':
# Do custom teardown
# Do regular teardown
但是,当我尝试检查 after_all()
函数中的 context
时,由于某种原因,该功能是 None
- 但也许这只是意味着我做错了什么。
您可以通过多种方式执行此操作:
在 environment.py
中,您可以添加如下内容:
def after_feature(context, feature):
if feature.name == 'My feature':
# Do custom teardown
您也可以使用功能标签而不是名称,如果您知道会有多个功能需要 setup/teardown,这会更实用。因此,如果您的功能文件被标记为
@database-reset-required
Feature: My feature
# Scenarios here
,然后,对于拆解部分,在 environment.py
你可以有:
def after_feature(context, feature):
if 'database-reset-required' in feature.tags:
# Do custom teardown
如果您选择 feature.name
方法而不是 feature.tags
请注意,您需要使用功能文件中定义的 *name* 即这部分 Feature: *My feature*
,而不是文件名.
我知道,在 behave 中,可以使用 environment.py
指定 before_feature()
和 after_feature()
函数在 每个特征。
但是,有没有一种方法可以指定仅针对 特定 功能执行的自定义后功能?
在网上搜索时,我发现有几页讨论了使用 cucumber-jvm 执行此操作的可能方法,但没有关于使用 behave 执行此操作的内容:
- Getting @BeforeAll and @AfterAll behaviour with Cucumber JVM and JUnit
- Add @BeforeAll and @AfterAll hooks cucumber-jvm GitHub issue
- cucumber-jvm global hook workarounds
举个例子,我想做类似的事情:
Feature: My feature
AfterFeature:
Then Database is reset
# Scenarios
我想到的一件事是 context
可以在“全局”after_feature()
函数中查看,然后自定义代码可以是 运行 如果特征的名称匹配想要的名字。例如,类似于:
# In environment.py
def after_all(context):
if context.feature.name == 'feature_with_custom_teardown.feature':
# Do custom teardown
# Do regular teardown
但是,当我尝试检查 after_all()
函数中的 context
时,由于某种原因,该功能是 None
- 但也许这只是意味着我做错了什么。
您可以通过多种方式执行此操作:
在 environment.py
中,您可以添加如下内容:
def after_feature(context, feature):
if feature.name == 'My feature':
# Do custom teardown
您也可以使用功能标签而不是名称,如果您知道会有多个功能需要 setup/teardown,这会更实用。因此,如果您的功能文件被标记为
@database-reset-required
Feature: My feature
# Scenarios here
,然后,对于拆解部分,在 environment.py
你可以有:
def after_feature(context, feature):
if 'database-reset-required' in feature.tags:
# Do custom teardown
如果您选择 feature.name
方法而不是 feature.tags
请注意,您需要使用功能文件中定义的 *name* 即这部分 Feature: *My feature*
,而不是文件名.