如何跳过 behave python BDD 框架中的测试?
How do I skip a test in the behave python BDD framework?
我正在处理几个月前部分完成的代码分支,其中存在相互交织的依赖关系。因此,向前推进的最简单方法是将特定分支上的失败测试标记为挂起(rspec
方式)或跳过,并在所有内容合并后处理它们。
在其最终报告中,behave
报告了通过的测试数、# 失败的、# 跳过的和# 未测试的(当我按 Ctrl-C 来中止测试时,这些都是非零的) 运行)。所以 behave
作为跳过测试的概念。我如何
访问那个?
Behave 不会跳过测试,它会跳过已经失败的场景中的步骤。不直接支持跳过测试,但如果您只需要 运行 部分测试,则可以 control the execution with tags.
您可以为要跳过的场景或功能使用预定义的“@skip”标签,并且行为将自动跳过测试场景或整个功能。
如果您想在命令行中控制事物,那么您可以按照 suggested in another answer. In brief, you can use whatever tag you want to mark your features and scenarios and then use --tags
to select or deselect features and scenarios based on the tags you used. The documentation gives the example of marking slow scenarios with @slow
and then using behave --tags=slow
to run just the slow tests, or using behave --tags=-slow
to exclude the slow tests. Reading the documentation 的建议进行操作,以了解 --tags
允许的语法。
通过上述方法,您可以使用@skip
并执行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
以便标签继承有效。
等等! tutorial 不是说 @skip
是内置的吗?
不,本教程的介绍有点误导,因为它提供的列表显示 @wip
旁边的 @skip
。 @wip
是内置的所以 @skip
也是内置的吧?不,它们在 "Predefined or often used tags" 的列表中。 @skip
只是 "often used"。之所以经常使用它,是因为以提供信息的方式使用 "skip" 一词来将某些内容标记为已跳过。它并不意味着标签内置于 Behave 中。
如何跳过 Python 中的场景及其应用示例:
所有函数必须在environment.py模块中声明:
environment.py
在 before_all()
中声明 skip_scenario = True
添加一个skip_scenarios=True来控制跳过各种功能文件中的特定场景。,控制器设置在before_all函数在environment.py**
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() 添加相同的控件。
老问题,新答案。
Behave 目前支持过滤掉标签,如下例所示,执行所有未标记为@my_tag_name 的测试:
behave --tags=~@my_tag_name path/to/my_tests.feature
来源:来自行为帮助
# behave --tags-help
Scenarios inherit tags declared on the Feature level. The simplest
TAG_EXPRESSION is simply a tag::
--tags @dev
You may even leave off the "@" - behave doesn't mind.
When a tag in a tag expression starts with a ~, this represents boolean NOT::
--tags ~@dev
A tag expression can have several tags separated by a comma, which represents
logical OR::
--tags @dev,@wip
The --tags option can be specified several times, and this represents logical
AND, for instance this represents the boolean expression
"(@foo or not @bar) and @zap"::
--tags @foo,~@bar --tags @zap.
Beware that if you want to use several negative tags to exclude several tags
you have to use logical AND::
--tags ~@fixme --tags ~@buggy.
我正在处理几个月前部分完成的代码分支,其中存在相互交织的依赖关系。因此,向前推进的最简单方法是将特定分支上的失败测试标记为挂起(rspec
方式)或跳过,并在所有内容合并后处理它们。
在其最终报告中,behave
报告了通过的测试数、# 失败的、# 跳过的和# 未测试的(当我按 Ctrl-C 来中止测试时,这些都是非零的) 运行)。所以 behave
作为跳过测试的概念。我如何
访问那个?
Behave 不会跳过测试,它会跳过已经失败的场景中的步骤。不直接支持跳过测试,但如果您只需要 运行 部分测试,则可以 control the execution with tags.
您可以为要跳过的场景或功能使用预定义的“@skip”标签,并且行为将自动跳过测试场景或整个功能。
如果您想在命令行中控制事物,那么您可以按照 --tags
to select or deselect features and scenarios based on the tags you used. The documentation gives the example of marking slow scenarios with @slow
and then using behave --tags=slow
to run just the slow tests, or using behave --tags=-slow
to exclude the slow tests. Reading the documentation 的建议进行操作,以了解 --tags
允许的语法。
通过上述方法,您可以使用@skip
并执行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
以便标签继承有效。
等等! tutorial 不是说 @skip
是内置的吗?
不,本教程的介绍有点误导,因为它提供的列表显示 @wip
旁边的 @skip
。 @wip
是内置的所以 @skip
也是内置的吧?不,它们在 "Predefined or often used tags" 的列表中。 @skip
只是 "often used"。之所以经常使用它,是因为以提供信息的方式使用 "skip" 一词来将某些内容标记为已跳过。它并不意味着标签内置于 Behave 中。
如何跳过 Python 中的场景及其应用示例:
所有函数必须在environment.py模块中声明:
environment.py
在 before_all()
中声明 skip_scenario = True添加一个skip_scenarios=True来控制跳过各种功能文件中的特定场景。,控制器设置在before_all函数在environment.py**
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() 添加相同的控件。
老问题,新答案。
Behave 目前支持过滤掉标签,如下例所示,执行所有未标记为@my_tag_name 的测试:
behave --tags=~@my_tag_name path/to/my_tests.feature
来源:来自行为帮助
# behave --tags-help
Scenarios inherit tags declared on the Feature level. The simplest
TAG_EXPRESSION is simply a tag::
--tags @dev
You may even leave off the "@" - behave doesn't mind.
When a tag in a tag expression starts with a ~, this represents boolean NOT::
--tags ~@dev
A tag expression can have several tags separated by a comma, which represents
logical OR::
--tags @dev,@wip
The --tags option can be specified several times, and this represents logical
AND, for instance this represents the boolean expression
"(@foo or not @bar) and @zap"::
--tags @foo,~@bar --tags @zap.
Beware that if you want to use several negative tags to exclude several tags
you have to use logical AND::
--tags ~@fixme --tags ~@buggy.