我刚开始使用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
如何创建通用步骤文件并将其导入?
答案 0 :(得分:2)
在导入的文件中,必须导入行为装饰器(如then
):
from behave import then
from nose.tools import assert_equals
@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))
...
答案 1 :(得分:2)
对于那里的所有人来说,就像(像我一样)尝试导入单步定义: 唐'!吨
只需导入整个模块。
在这里,所有人仍然需要更多细节:
如果您的项目结构如下所示:
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(这是你的常规步骤文件)