Can I put step definitions in a folder that is not “steps”?
I’m trying to use Behave on Python.
I was wondering if there was a way to put my .py files somewhere else instead of being forced to put them all in the Steps folder. My current structure looks like this
tests/
features/
steps/ #all code inside here, for now
Here’s what I want to accomplish
tests/
features/ #with all the .feature files
login/ #with all the .py files for logging in inside a service
models/ #with all the .py files that represents a given object
and so on
The only BDD framework I used before Behave was Cucumber with Java, which allowed step definitions to be inserted wherever I wanted (the rest was handled by Cucumber itself).
I asked this because I want to have a lot of classes in my project in order to organize my code in a better way.
Solution
This may be a bit late, but you can do the following:
The structure is as follows:
tests/
features/
steps/
login
main_menu
all_steps.py
In the steps subfolder, you can create _steps.py files with implementations, and then in the all_steps.py (or how you want to name them) you just import them:
from tests.steps.login.<feature>_step import *
from tests.steps.main_menu.<feature>_step import *
etc
When you run it, it should find the step file. Alternatively, you can place the file anywhere in your project, as long as you have a 1 step folder and one file in the file is where you import all the steps