pytest固定装置在单独的目录中

Jak*_*lis 6 python testing fixtures pytest

我正在寻找一个pytest结构,可以将灯具与测试完全分开。这种分离的原因是我想将夹具目录作为外部项目包含在Subversion中,并在多个项目之间共享。

所需结构的树

project
|   conftest.py
|
+---fixtures
|       __init__.py
|       conftest.py
|       fixture_cifs.py
|       fixture_ftp.py
|       fixture_service.py
|
\---tests
    |   test_sometest1.py
    |   test_sometest2.py
    |
    \---configurations
            sometest1.conf
            sometest2.conf
Run Code Online (Sandbox Code Playgroud)

我想在单独的文件中实现每个灯具的功能,以避免出现一个巨大的缺陷conftest.pyconftest.py只会包含包装器,以返回每个带有注释的灯具的实例@pytest.fixture。当和文件都在同一目录中时conftest.py,将夹具与测试一起使用是没有问题的。fixture_*.pytest_*.py

然而,当灯具在一个子目录中分离我从pytest一个错误fixture 'cifs' not foundavailable fixtures: ...。我还没有找到任何文档说明如何将固定装置放置在之外test_*.pyconftest.py附近test_*.py,但是也没有任何文件表明这也不起作用。

使用pytest时,如何将灯具放置在它们自己的子目录中?

raf*_*asa 18

请在您的conftest.py 中添加以下内容

  import pytest

  pytest_plugins = [
   "fixtures.conftest",
   "fixtures.fixture_cifs",
   "fixtures.fixture_ftp",
   "fixtures.fixture_service"
  ]
Run Code Online (Sandbox Code Playgroud)

这确保所有在下面声明的装置fixtures/都可以通过pytest

请注意,所引用的相应目录 fixtures.conftest"需要具有__init__.py要加载的插件的文件pytest

类似的案例可以在这里看到:https : //stackoverflow.com/a/54736237/6655459


sax*_*sax 2

请阅读此处如何构建您的测试。

您的固定装置目录似乎不是包的一部分(项目没有__init__.py,因此无法导入,project.fixtures因为fixtures它不在路径中。您可以在tests/conftest.pysys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, "fixtures"))sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir)取决于您想要的方式)中的路径中添加所需的目录导入你的模块。