12

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

在其最终报告中,behave报告了通过的测试数、失败的测试数、跳过的测试数和未测试的测试数(当我按 Ctrl-C 中止运行时,这些测试非零)。因此behave,作为跳过测试的概念。我如何访问它?

4

4 回答 4

28

如果您想在命令行中控制事物,那么您可以按照Tymoteusz Paul在另一个答案中的建议进行操作。简而言之,您可以使用任何想要标记功能和场景的标签,然后--tags根据您使用的标签选择或取消选择功能和场景。该文档给出了标记慢速场景的示例,@slow然后使用behave --tags=slow它来运行慢速测试,或使用behave --tags=-slow来排除慢速测试。建议阅读文档以了解--tags允许的语法。

通过上面的方法,你可以使用@skipand do behave --tags=-skip。这将排除所有标记为的内容,@skip但每次调用都必须包含额外的参数是很烦人的。不能单独告诉@skipBehave跳过,而不需要命令行上的任何参数吗

如果您想要一个@skip可以跳过用它标记的功能和场景的标签,而不需要额外的参数,那么从 Behave 1.2.5 开始,您必须将该功能构建到您的environment.py文件中。与这个答案所暗示的相反,它不是内置的。我们添加这样的功能:

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以便标签继承工作。


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

不,本教程的内容有点误导,因为它提供了一个显示@skip@wip. @wip是内置的,所以@skip内置也对吗?不,它们在“预定义或常用标签”列表中。@skip只是“经常使用”。它经常被使用,因为以一种信息丰富的方式使用“跳过”这个词来将某些东西标记为跳过。这并不意味着标签内置在 Behave 中。

于 2017-03-10T15:08:40.010 回答
5

Behave 不会跳过测试,它会跳过已经失败的场景中的步骤。不直接支持跳过测试,但如果您只需要运行部分测试,那么您可以使用 tags 控制执行

于 2016-04-09T14:36:23.897 回答
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() 中添加一个 Condition:

如果功能文件中的任何场景包含标签“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() 添加相同的控制。

于 2021-07-17T20:12:43.330 回答
-2

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

于 2016-05-18T00:20:52.013 回答