我刚刚开始使用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中(这是您的常规步骤文件)

    09-25 15:39