我刚刚开始使用behave,这是一个使用Gherkin syntax的Pythonic BDD框架。行为具有一个功能,例如:
Scenario: Calling the metadata API
Given A matching server
When I call metadata
Then metadata response is JSON
And response status code is 200
还有一个步骤文件,例如:
...
@then('response status code is {expected_status_code}')
def step_impl(context, expected_status_code):
assert_equals(context.response.status_code, int(expected_status_code))
@then('metadata response is JSON')
def step_impl(context):
json.loads(context.metadata_response.data)
...
并将它们组合成一个漂亮的测试报告:
其中一些步骤-例如:
metadata response is JSON
response status code is {expected_status_code}
在我的许多项目中都使用过,我想将它们归类为一个通用步骤文件,可以导入和重用。
我尝试将有用的步骤提取到一个单独的文件并将其导入,但是收到以下错误:
@then('response status code is {expected_status_code}')
NameError: name 'then' is not defined
如何创建通用步骤文件并将其导入?
最佳答案
对于所有在那里的人,(像我一样)试图导入单个步骤定义:
别!
只需导入整个模块。
对于所有仍需要更多详细信息的人(像我...),这里:
如果您的项目结构如下所示:
foo/bar.py
foo/behave/steps/bar_steps.py
foo/behave/bar.feature
foo/common_steps/baz.py
做就是了
import foo.common_steps.baz
在foo/behave/steps/bar_steps.py中(这是您的常规步骤文件)