是否可以为每个行为特征指定特定的“后特征”挂钩?

2024-09-30 14:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道,在behave中,可以使用environment.py来指定before_feature()after_feature()函数,以便在每个功能之前或之后执行设置和拆卸代码

但是,是否有办法指定仅针对特定功能执行的自定义after功能

在我的在线搜索中,我发现有几页讨论了使用cucumber jvm执行此操作的可能方法,但没有讨论如何使用behave执行此操作:

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

Feature: My feature

AfterFeature:
  Then Database is reset

# Scenarios

我想到的一件事是,也许可以在“global”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,但这可能只是意味着我做错了什么


Tags: and函数代码py功能environmentcontextjvm
1条回答
网友
1楼 · 发布于 2024-09-30 14:20:28

有几种方法可以做到这一点:

environment.py中,您可以添加如下内容:

def after_feature(context, feature):
    if feature.name == 'My feature':
        # Do custom 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,请注意,您需要使用功能文件中定义的*名称*,即此部分Feature: *My feature*,而不是文件名

相关问题 更多 >