正如标题所示,我希望在场景大纲之前运行某些配置/环境设置步骤。我知道有Background
为场景执行此操作,但Behave会将场景大纲拆分为多个场景,从而为场景大纲中的每个输入运行背景。
这不是我想要的。由于某些原因,我无法提供我正在使用的代码,但是我将编写一个示例功能文件。
Background: Power up module and connect
Given the module is powered up
And I have a valid USB connection
Scenario Outline: Example
When I read the arduino
Then I get some <'output'>
Example: Outputs
| 'output' |
| Hi |
| No |
| Yes |
在这种情况下会发生什么情况是,为每个输出Hi
,No
,Yes
重新启动并检查USB连接,从而产生三个电源周期和三个连接检查
我想要的是使用一次电源循环并检查连接一次然后再运行所有三个测试。
我将如何做到这一点?
答案 0 :(得分:1)
你最好的选择可能是使用before_feature
环境钩子和a)
功能上的标签和/或b)功能名称。
例如:
<强> some.feature 强>
@expensive_setup
Feature: some name
description
further description
Background: some requirement of this test
Given some setup condition that runs before each scenario
And some other setup action
Scenario: some scenario
Given some condition
When some action is taken
Then some result is expected.
Scenario: some other scenario
Given some other condition
When some action is taken
Then some other result is expected.
<强>步/ enviroment.py 强>
def before_feature(context, feature):
if 'expensive_setup' in feature.tags:
context.excute_steps('''
Given some setup condition that only runs once per feature
And some other run once setup action
''')
备用步骤/ enviroment.py
def before_feature(context, feature):
if feature.name == 'some name':
context.excute_steps('''
Given some setup condition that only runs once per feature
And some other run once setup action
''')
答案 1 :(得分:0)
我面临着同样的问题。
有一个昂贵的 Background
,每Feature
只能执行一次。
解决该问题实际需要的是能够在Scenario
之间存储状态。
我对这个问题的解决方案是使用behave.runner.Context#_root
,它在整个运行过程中保持不变。我知道访问私人会员不是一个好习惯 - 我会很乐意学习清洁方式。
# XXX.feature file
Background: Expensive setup
Given we have performed our expensive setup
# steps/XXX.py file
@given("we have performed our expensive setup")
def step_impl(context: Context):
if not context._root.get('initialized', False):
# expensive_operaion.do()
context._root['initialized'] = True
答案 2 :(得分:0)
您可以这样做:
在“功能”文件夹中创建environment.py
inside environment.py:来自行为导入设备
写代码:
通过行为导入夹具
def before_feature(上下文,功能): print(“在每个功能之前运行”)
def after_feature(上下文,功能): print(“在每个功能之后运行”)
def before_scenario(上下文,场景): print(“在每种情况下运行”)
def after_scenario(上下文,场景): print(“在每种情况下运行”)
#现在运行您的Tc:您的O / P将是 在每个功能之前运行 在每种情况之前运行 在每种情况下运行 在每个功能之后运行