表现:如何从其他文件导入步骤?

时间:2014-02-03 09:25:16

标签: python bdd python-behave

我刚开始使用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)
...

并将它们组合成一个漂亮的测试报告:

Test results

其中一些步骤 - 例如:

  • 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

如何创建通用步骤文件并将其导入?

2 个答案:

答案 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(这是你的常规步骤文件)