pytest 固定装置在一个单独的目录中
Posted
技术标签:
【中文标题】pytest 固定装置在一个单独的目录中【英文标题】:pytest fixtures in a separate directory 【发布时间】:2015-12-10 14:27:48 【问题描述】:我正在寻求创建一个 pytest 结构,我可以在其中将固定装置与测试完全分开。这种分离的原因是我想将 fixtures 目录作为外部项目包含在 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
我想在一个单独的文件中实现每个夹具的功能,以避免单个巨大的conftest.py
。 conftest.py
将只包含包装器以返回每个带有 @pytest.fixture
注释的固定装置的实例。当conftest.py
、fixture_*.py
和test_*.py
文件都在同一个目录下时,使用fixture 和测试没有问题。
但是,当固定装置在子目录中分开时,我从 pytest fixture 'cifs' not found
、available fixtures: ...
收到错误消息。我还没有找到任何说明如何在test_*.py
或与test_*.py
相邻的conftest.py
之外放置固定装置的文档,但没有任何说明这也不起作用。
如何在使用 pytest 时将灯具放在自己的子目录中?
【问题讨论】:
【参考方案1】:请在您的 conftest.py
中添加以下内容 import pytest
pytest_plugins = [
"fixtures.conftest",
"fixtures.fixture_cifs",
"fixtures.fixture_ftp",
"fixtures.fixture_service"
]
这确保fixtures/
下声明的所有灯具都将被pytest
找到
请注意,在
fixtures.conftest"
需要有__init__.py
文件供pytest
加载插件
类似的案例可以看这里:https://***.com/a/54736237/6655459
【讨论】:
【参考方案2】:尝试在project/conftest.py
中导入您的灯具
如果这就是“包装器返回实例”的意思
【讨论】:
【参考方案3】:阅读 here 如何构建您的测试。
您的fixture 目录似乎不是包的一部分(项目没有__init__.py
,因此不能导入为project.fixtures
或fixtures
,因为它不在路径中。
您可以在 tests/conftest.py
(sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, "fixtures"))
或 sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir)
的路径中添加所需的目录,具体取决于您希望如何导入模块。
【讨论】:
【参考方案4】:因为当我不可避免地回到这个问题时:您可以在不同的文件中导入固定装置(甚至是通常不会访问固定装置的文件)并且测试会适当地选择它!
【讨论】:
以上是关于pytest 固定装置在一个单独的目录中的主要内容,如果未能解决你的问题,请参考以下文章