pytest,以任何方式包括测试文件或测试文件列表?

时间:2019-03-24 19:26:32

标签: module pytest fixtures

我正在寻找有关以下情况的最佳做法建议:

  • 我正在使用pytest在IAC部署上运行集成测试
  • 我的IAC代码库的结构如下:
  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>

谢谢

1 个答案:

答案 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/