是否可以为每个行为特征指定一个特定的 "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 执行此操作的内容:

举个例子,我想做类似的事情:

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*,而不是文件名.