我正在尝试使用Behave on Python。 我想知道是否有办法将我的.py文件放在其他地方,而不是被迫将它们全部放在“steps”文件夹中。我目前的结构看起来像这样
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
我在Behave之前使用的唯一BDD框架是Cucumber with Java,它允许在我想要的任何地方插入步骤定义(其余部分由Cucumber本身处理)。 我问这个是因为我想在我的项目中有很多课程,以便以更好的方式组织我的代码。
答案 0 :(得分:1)
首先,从行为文档(版本1.2.7.dev0):
表现适用于三种类型的文件:
- 您的业务分析师/赞助商/其中包含您的行为方案的人员编写的功能文件,以及
- 一个“steps”目录,其中包含方案的Python步骤实现。
- 可选择一些环境控制(在步骤,场景,功能或整体之前和之后运行的代码 射击比赛)。
醇>
因此需要steps/
目录。
为了完成类似于您的想法的解决方法,我尝试在/steps
目录中创建一个子目录:/steps/deeper/
并在那里插入我的Python文件:/steps/deeper/testing.py
。运行后,我收到了" NotImplementedError",表示找不到/deeper/testing.py
中的步骤定义。
对于任何其他Python文件,似乎行为不会通过steps/
目录的子目录递归搜索。
至于你想要做什么,我认为这是一个不错的组织理念,但由于它不可行,你可以这样做:而不是拥有目录对于tests/
目录中的Python文件,为什么没有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文件并不重要,因为在调用steps/
时,行为会搜索所有Python文件,但对于组织来说却是如此。它的缘故,它完成了同样的效果。
答案 1 :(得分:1)
这可能有点晚了,但是您可以执行以下操作:
具有这样的结构:
tests/
features/
steps/
login
main_menu
all_steps.py
在步骤的子文件夹中,您可以使用实现创建_steps.py文件,然后在all_steps.py(或命名方式)中,只需导入它们即可:
from tests.steps.login.<feature>_step import *
from tests.steps.main_menu.<feature>_step import *
etc
当您运行它时,它应该找到步骤文件。另外,您可以在项目中的任何位置保存文件,只要您拥有1 Steps文件夹,并且在导入所有步骤时文件中都有一个文件