将conftest.py文件拆分为几个较小的类似conftest的部分

alk*_*ity 16 python pytest

我有一个大的conftest.py文件,我希望将其分成更小的部分,原因有两个:

  1. 文件非常大(~1000行,包括文档)
  2. 一些灯具依赖于其他灯具,当用户寻找相关灯具时,我没有理由将这些其他灯具作为conftest"API"的一部分曝光

我不知道pytest提供的任何机制来解决同一文件夹中多个位置的conftest文件,所以我设计了一个,如下:

import sys
import os


sys.path.append(os.path.dirname(__file__))


from _conftest_private_part_1 import *
from _conftest_private_part_2 import *
from _conftest_private_part_3 import *


@pytest.fixture
def a_fixture_that_is_part_of_the_public_conftest_api():
    pass
Run Code Online (Sandbox Code Playgroud)

这适用于我的需求,但我想知道是否有更好的方法.

Bru*_*ira 24

您可以将您的东西放在其他模块中,并使用以下pytest_plugins变量引用它们conftest.py:

pytest_plugins = ['module1', 'module2']
Run Code Online (Sandbox Code Playgroud)

如果你conftest.py钩子,这也会有效.

  • 自 2022 年起,不再支持在非顶级 conftest 中定义“pytest_plugins”:它会影响整个测试套件,而不是按预期影响 conftest 下方。 (6认同)
  • 您能显示示例代码吗? (4认同)

Bjö*_*lex 5

你不应该需要任何花哨的魔法。py.test 自动将当前测试文件的路径sys.path以及所有父路径添加到它的目标目录。

因此,您甚至不需要将该共享代码放入conftest.py. 您可以只放入普通模块或包,然后将其导入(如果您想共享设备,则这些设备必须在 a 中conftest.py)。

此外,还有本说明有关从进口conftest.py的文件

如果您的 conftest.py 文件不在 python 包目录中(即包含__init__.py),那么“ import conftest”可能不明确,因为conftest.py您的PYTHONPATHsys.path. 因此,将项目置于conftest.py包范围内或从不从conftest.py文件中导入任何内容是一种很好的做法。

  • 我曾希望能够在不将它们放在“主要”conftest.py 文件中的情况下使用这些设备。很高兴知道这条路。 (2认同)