如何跳过行为python BDD框架中的测试?

时间:2016-04-07 16:45:25

标签: bdd python-behave

我正在处理几个月前部分完成的代码分支,它们依赖于交织在一起。因此,最简单的方法是将特定分支上的失败测试标记为挂起(rspec方式)或跳过,并在合并完所有内容后处理它们。

在最终报告中,behave报告通过的测试次数,#failed,#skipped和#suteted(当我按Ctrl-C中止运行时,这些值为非零) 。所以behave作为跳过测试的概念。我如何能 访问那个?

3 个答案:

答案 0 :(得分:18)

如果要在命令行控制事物,则执行另一个答案中建议的Tymoteusz Paul。简而言之,您可以使用任何标记来标记功能和方案,然后使用--tags根据您使用的标记选择或取消选择功能和方案。该文档提供了使用@slow标记慢速方案,然后使用behave --tags=slow仅运行慢速测试,或使用behave --tags=-slow排除慢速测试的示例。建议阅读documentation以了解--tags允许的语法。

通过上述方法,您可以使用@skip并执行behave --tags=-skip。这将排除标有@skip的所有内容,但每次调用都必须包含额外的参数,这很烦人。无法@skip只是本身告诉Behave跳过,而不需要命令行上的任何参数?

如果你想要一个@skip标签,它会跳过标有它的功能和方案,而不需要额外的参数,那么,从Behave 1.2.5开始,必须environment.py文件中构建功能。what this answer建议相反,内置的不是。我们添加如下功能:

def before_feature(context, feature):
    if "skip" in feature.tags:
        feature.skip("Marked with @skip")
        return

    # Whatever other things you might want to do in this hook go here.

def before_scenario(context, scenario):
    if "skip" in scenario.effective_tags:
        scenario.skip("Marked with @skip")
        return

    # Whatever other things you might want to do in this hook go here.

.skip方法的参数是跳过的原因。

我总是使用.effective_tags在方案中执行标记测试。 .effective_tags字段会继承在功能上设置的标记。在这种情况下,这没有区别,因为如果该特征具有@skip,则强制其中的场景将被跳过。但是,我更倾向于遵循一般原则,即场景中的标记检查应使用.effective_tags,以便标记继承有效。

等待! tutorial不是说@skip是内置的吗?

不,本教程提供的内容有点误导,因为它提供的列表显示@skip旁边的@wip@wip是内置的,因此@skip内置得太对了?不,它们在列表中是“预定义或常用标签”。 @skip仅仅是“经常使用”。它经常被使用,因为以信息方式使用单词“skip”来标记被跳过的内容。它并不意味着标签内置于Behave中。

答案 1 :(得分:0)

您可以使用预定义的“@skip”标记来表示您想要跳过的场景或功能,并且行为将自动跳过测试场景或整个功能。

答案 2 :(得分:0)

如何在 Python Behave 中跳过场景及其应用示例:

所有函数都必须在 environment.py 模块中声明:

环境.py

在before_all()中声明skip_scenario = True

添加skip_scenarios= True来控制从各种功能文件中跳过特定场景。控制器在environment.py中的before_all函数中设置>**

def before_all(context):
    pass

    context.scenario_metadata_dict = {}
    context.feature_metadata = {'skip_scenario': True}

在 before_scenario() 中添加条件:

如果功能文件中的任何场景包含标签“environmentSkip”且skip_scenario = True,则仅跳过这些场景。

def before_scenario(context, scenario):
    if context.feature_metadata['skip_scenario'] and "environmentSkip" in scenario.effective_tags:
        scenario.skip("Marked with skip from environment Control")
        return
    elif "skip" in scenario.effective_tags:
        scenario.skip("Marked with @skip tag in feature File")
        return

功能文件:

如果您希望在特定场景中跳过标记,则将具有标记 @environmentSkip 标记。

  @system-testing @regression @environmentSkip
  Scenario: validate  Global Exclusion Rules for PrimaryEarlyLifeCLI Strategy
   When  derive the expected Results for global Exclusion rule NEGESTAT
      | KEY             | VALUE                                                                                              |
      |test_scenario_id |TS1_GlobalExclusion_NEGESTAT|

注意:以上示例处理跳过场景、自然处理跳过和受控处理跳过。

应用程序

自然方式:将帮助开发人员跳过用于调试目的的场景。

受控方式:将有助于控制特定环境的场景。

如果需要,也可以为 before_feature() 添加相同的控制。