我正在处理几个月前部分完成的代码分支,它们具有相互交织的依赖关系。因此,最简单的前进方法是将特定分支上的失败测试标记为待处理(rspec
方式)或被跳过,并在所有内容合并后处理它们。
在其最终报告中,behave
报告了通过的测试数、失败的测试数、跳过的测试数和未测试的测试数(当我按 Ctrl-C 中止运行时,这些测试非零)。因此behave
,作为跳过测试的概念。我如何访问它?
我正在处理几个月前部分完成的代码分支,它们具有相互交织的依赖关系。因此,最简单的前进方法是将特定分支上的失败测试标记为待处理(rspec
方式)或被跳过,并在所有内容合并后处理它们。
在其最终报告中,behave
报告了通过的测试数、失败的测试数、跳过的测试数和未测试的测试数(当我按 Ctrl-C 中止运行时,这些测试非零)。因此behave
,作为跳过测试的概念。我如何访问它?
如果您想在命令行中控制事物,那么您可以按照Tymoteusz Paul在另一个答案中的建议进行操作。简而言之,您可以使用任何想要标记功能和场景的标签,然后--tags
根据您使用的标签选择或取消选择功能和场景。该文档给出了标记慢速场景的示例,@slow
然后使用behave --tags=slow
它来运行慢速测试,或使用behave --tags=-slow
来排除慢速测试。建议阅读文档以了解--tags
允许的语法。
通过上面的方法,你可以使用@skip
and do behave --tags=-skip
。这将排除所有标记为的内容,@skip
但每次调用都必须包含额外的参数是很烦人的。不能单独告诉@skip
Behave跳过,而不需要命令行上的任何参数吗?
如果您想要一个@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 中。
Behave 不会跳过测试,它会跳过已经失败的场景中的步骤。不直接支持跳过测试,但如果您只需要运行部分测试,那么您可以使用 tags 控制执行。
所有函数都必须在 environment.py 模块中声明:
环境.py
添加一个 skip_scenarios=True来控制从各种特征文件中跳过特定场景。控制器在environment.py的before_all函数中设置**
def before_all(context):
pass
context.scenario_metadata_dict = {}
context.feature_metadata = {'skip_scenario': True}
如果功能文件中的任何场景包含标签“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() 添加相同的控制。
您可以为您想要跳过的场景或功能使用预定义的“@skip”标签,并且行为将自动跳过测试场景或整个功能。