Behave: How to import steps from another file?

bdd, python, python-behave

Solution

In the imported file, the behave decorators (like `then`) must be imported:

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))

...

Problem

I have just started using behave, a Pythonic BDD framework using Gherkin syntax. behave takes a feature, e.g.: ``` Scenario: Calling the metadata API Given A matching server When I call metadata Then metadata response is JSON And response status code is 200 ``` And a steps file, e.g.: ``` ... @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) ... ``` And combines them to a beautiful test resport: Some of these steps - like: - `metadata response is JSON` - `response status code is {expected_status_code}` Are used in many of my projects, and I would like to group them into a general steps file which I can import and reuse. I tried extracting useful steps to a separate file and importing it, but received the following error: ``` @then('response status code is {expected_status_code}') NameError: name 'then' is not defined ``` How do I create a generic steps file and import it?

Original source