【问题标题】:Can the conftest.py file be put in another package aside the tests package for pytest?conftest.py 文件可以放在 pytest 的测试包之外的另一个包中吗?
【发布时间】:2020-06-09 23:49:56
【问题描述】:

问题:
是否可以将 conftest.py 文件放入测试包旁边的另一个包中,如下结构?

说明
项目结构如下:
--------------------------------------

GUI_pytest
  - C_lib
      --__init__.py
      -- conftest.py
  - G_test<br/>
      --__init__.py
      -- test_2.py

Source_Root: GUI_pytest
conftest.py: GUI_pytest/C_lib(package)
test_2.py(测试文件): GUI_pytest/G_test(package)

GUI_pytest/C_lib/conftest.py:
有一个fixture函数为def a()

测试用例:GUI_pytest/G_test/test_2.py 使用夹具作为 def test_2(a)

我想将 conftest.pytest_case().py 拆分为 C_lib packageG_test package

但是 pytest 似乎无法获取 conftest.py 文件 找不到 def test_2(a)

使用的夹具函数 a 时出错

提前谢谢你
作为初学者,任何事情都可以帮助解决这个问题。

【问题讨论】:

  • 如果内容将用于所有测试,则将其放入根路径,如果需要,将带有测试特定内容的单独conftest.py文件放入测试路径。
  • @MrBeanBremen: 可以将conftest.py 作为test package 的兄弟放入另一个包中,我不想让conftest.py 在根目录下或在测试包中混合测试文件.非常感谢!这是我第一个问题的第一个答复。
  • conftest.py 不是一个测试文件,它是一个配置文件 - 你可以在不同的位置拥有任意数量的文件,它们将在它们所在的目录中使用,或者任何子目录。 Here 是一些相关的解释(但不确定我是否理解正确)。
  • @MrBeanBremen,谢谢,不太准确,问题是:1)root/lib/conftest.py 2)root/test/test_case.py,test_case.py如何使用root/lib/conftest.py文件?因为pytest不会自动加载root/lib/conftest.py?感谢您的链接,这也很有用。
  • conftest.pypytest 的扩展,专门用于您的测试套件。将其与您的测试一起使用,而不是与您的生产代码一起使用。

标签: python pytest


【解决方案1】:

答案是否定的,如果没有变通办法,这是不可能的,我建议不要这样做。

如果你使用框架,你应该使用框架提供的约定——这使得使用更容易,并且你不会因为框架不期望的一些用法而遇到问题。这里的框架是指pytest,它不仅仅是一个可执行文件,因为它提供(并期望)一定的基础设施(当然可以更好地记录......)。例如,您可以在 SO 问题In pytest, what is the use of conftest.py files? 的答案中找到更多信息。

pytest 使用conftest.py 文件以分层方式为测试提供固定装置、插件和挂钩。
所以,比如说,你有这样的结构:

tests
   test_a
       test_a1.py
       test_a2.py
   test_b
       test_b1.py
       test_b2.py   

test_a 中的测试使用夹具 local_fixturetest_b 中的测试使用另一个夹具 local_fixture,并且所有测试都使用通用夹具 common_fixture。最简单的方法如下:

tests
   conftest.py -> contains common_fixture
   test_a
       conftest.py -> contains local_fixture for test_a...
       test_a1.py
       test_a2.py
   test_b
       conftest.py -> contains local_fixture for test_b...
       test_b1.py
       test_b2.py   

插件中也可以有conftest.py 文件,这些文件由其他模块提供,您可以直接使用所有这些装置,而无需导入它们,或者做一些 PYTHONPATH 魔术。您只需遵循通用约定,而不是使用您自己的约定即可使用该功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2012-07-26
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多