行为:如何从另一个文件导入步骤?

Ada*_*tan 6 python bdd python-behave

我刚刚开始使用behave,一个使用Gherkin 语法的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
Run Code Online (Sandbox Code Playgroud)

还有一个步骤文件,例如:

...
@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)
...
Run Code Online (Sandbox Code Playgroud)

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

检测结果

其中一些步骤 - 例如:

  • 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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

仅适用于所有那些(像我一样)试图导入单步定义的人:不要!

只需导入整个模块。

对于所有仍然需要更多细节的人(比如我......):

如果您的项目结构如下所示:

foo/bar.py
foo/behave/steps/bar_steps.py
foo/behave/bar.feature
foo/common_steps/baz.py
Run Code Online (Sandbox Code Playgroud)

做就是了

import foo.common_steps.baz
Run Code Online (Sandbox Code Playgroud)

在 foo/behave/steps/bar_steps.py (这是您的常规步骤文件)


Ada*_*tan 3

在导入的文件中,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))

...
Run Code Online (Sandbox Code Playgroud)

  • 令人惊讶的是,这个答案与问题无关。 (3认同)