【问题标题】:pytest, any way to include a test file or list of test files?pytest,有什么方法可以包含测试文件或测试文件列表?
【发布时间】:2019-08-15 02:17:39
【问题描述】:

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

  • 我正在使用 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 中使用它们,而无需复制代码...

实现这一目标的最佳方法是什么?

我已经在使用固定装置(在 conftest.py 中定义),我觉得我的重复代码的解决方案是固定装置或测试模块,但我糟糕的 python / pytest 知识使我远离实际的解决方案。

谢谢

【问题讨论】:

    标签: module pytest fixtures


    【解决方案1】:

    如果您不介意将测试作为一个模块运行,您可以通过在项目的根目录中放置一个名为“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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多