Могу ли я поместить определения шагов в папку, которая не является шагами с поведением?

Я пытаюсь работать с Behave на Python. Мне было интересно, есть ли способ поместить мои файлы .py в другое место вместо того, чтобы помещать их все в папку «шаги». Моя текущая структура будет выглядеть так

tests/
    features/
    steps/ #all code inside here, for now

То, что я хотел бы сделать, это что-то вроде

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

Единственным фреймворком BDD, который я использовал до Behave, был Cucumber с Java, который позволял вставлять определения шагов везде, где я хотел (а остальное делал сам Cucumber). Я спрашиваю об этом, потому что хотел бы иметь много классов в своем проекте, чтобы лучше организовать свой код.


person Gianmarco F.    schedule 09.03.2018    source источник


Ответы (2)


Во-первых, из документации по поведению (выпуск 1.2.7.dev0):

поведение работает с тремя типами файлов:

  1. функциональные файлы, написанные вашим бизнес-аналитиком / спонсором / кем-либо с вашими сценариями поведения в нем, и
  2. каталог «steps» с реализациями шагов Python для сценариев.
  3. опционально некоторые элементы управления окружающей средой (код для запуска до и после шагов, сценариев, функций или всего матча стрельбы).

Поэтому требуется каталог steps/.

Чтобы выполнить обходной путь, аналогичный тому, что вы имеете в виду, я попытался создать подкаталог в каталоге /steps: /steps/deeper/ и вставил туда свой файл Python: /steps/deeper/testing.py. После запуска поведения я получил NotImplementedError, что означает, что определения шагов в /deeper/testing.py не найдены.

Похоже, что поведения не выполняет рекурсивный поиск в подкаталогах каталога steps/ каких-либо дополнительных файлов Python.

Что касается того, что вы пытаетесь сделать, я думаю, что это достойная организационная идея, но поскольку это невыполнимо, вы можете сделать это: вместо того, чтобы иметь каталоги для файлов Python в вашем каталоге tests/, почему бы и нет. иметь хорошее соглашение об именах для вашего файла Python и разделить связанные функции в свои собственные файлы Python? То есть:

tests/
    features/
    steps/
        login_prompt.py # contains all the functions for logging in inside a service
        login_ssh.py # contains all the functions for SSH login
        models_default.py # contains all the functions for the default object
        models_custom.py # contains all the functions for a custom object
        and so on...

Конечно, на данном этапе действительно не имеет значения, разделите ли вы их по разным файлам Python, так как при вызове поведение выполняет поиск по всем файлам Python в steps/, но ради организации он выполняет тот же эффект.

person natn2323    schedule 15.03.2018
comment
Если это поможет, выберите его в качестве ответа на этот вопрос! - person natn2323; 21.03.2018
comment
К сожалению, это произошло. Я хотел верить, что для этого мог быть обходной путь, но похоже, что его нет... Большое спасибо @musikreck за подробный ответ! - person Gianmarco F.; 25.03.2018

Это может быть немного поздно, но вы можете сделать следующее:

Иметь такую ​​структуру:

tests/
    features/
        steps/
            login
            main_menu
            all_steps.py

В подпапках в steps вы можете создать свой файл _steps.py с реализацией, а затем в all_steps.py (или как вы хотите его назвать) вам просто нужно их импортировать:

from tests.steps.login.<feature>_step import *
from tests.steps.main_menu.<feature>_step import *
etc

И когда вы запустите это, он должен найти файлы шагов. В качестве альтернативы вы можете иметь файлы в любом месте проекта, если у вас есть папка 1 Steps и файл в файле, в который вы импортировали все шаги.

person Adrian    schedule 16.07.2018
comment
При запуске через intellij runner он успешно выполняется, при выполнении команды поведения возникает ошибка - person Arpan Saini; 31.10.2020