我正在寻找有关以下情况的最佳做法建议:
myapp
|
|_roles
| |_role1
| |_role2
|_resources
|_tomcat
|_java
我想对我的测试文件使用相同的结构。 测试目前分为文件匹配角色(role1,role2):
tests
|
|_roles
|_test_role1.py
|_test_role2.py
这会导致代码重复,例如:
role1是tomcat基本应用程序,
role2保存纯Java代码
因此,在两个测试文件(test_role1.py和test_role2.py)中,都有一个Java测试函数。
如果我可以将目录结构添加为:
tests
|
|_roles
| |_test_role1.py
| |_test_role2.py
|
|_resources
|_test_tomcat.py
|_test_java.py
然后,我可以“包含/导入” test_java.py函数以在test_role1.py和test_role2.py中使用它们,而无需复制代码...
实现此目标的最佳方法是什么?
我已经在使用Fixture(在conftest.py中定义),并且我认为重复代码的解决方案是在Fixture或测试模块中解决的,但是我对python / pytest的了解不足,使我无法使用实际的解决方案。 / p>
谢谢
答案 0 :(得分:0)
如果您不介意将测试作为模块运行,则可以通过将名为“ init .py”的文件放置在项目根目录中,将Python文件转换为软件包。目录中包含要测试的代码,目录中包含测试代码。
然后,您可以执行相对导入来访问所需的功能: 例如从“ _test_role2.py”访问“ _test_java.py”
from ../_roles import _test_java
一个点代表当前目录。两个点代表父目录。
在调用代码时,您需要使用-m标志,以便Python理解您正在运行带有相对导入的模块。
在您的情况下,您可以考虑在conftest.py中执行相对混乱的相对导入
这篇文章更详细地解释了上述内容: http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/