pytest fixtures in a separate directory

纵饮孤独 提交于 2019-11-30 04:39:59

问题


I'm looking to create a pytest structure where I can separate the fixtures from the tests completely. The reason for this separation is that I want to include the fixtures directory as an external item in subversion and share it between multiple projects.

tree of desired structure

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

I want to implement the functionality for each fixture in a separate file in order to avoid a single huge conftest.py. conftest.py would just include wrappers to return an instance of each fixture annotated with @pytest.fixture. There is no problem using a fixture together with a test when the conftest.py, fixture_*.py and test_*.py files are all in the same directory.

However, when the fixtures are separated in a subdirectory I get an error from pytest fixture 'cifs' not found, available fixtures: .... I haven't found any documentation explaining how to place fixtures outside of test_*.py or the conftest.py adjacent to test_*.py, but nothing to indicate that this shouldn't work either.

How can I place fixtures in their own subdirectory when using pytest?


回答1:


Please add the following in your conftest.py

  import pytest

  pytest_plugins = [
   "fixtures.conftest",
   "fixtures.fixture_cifs",
   "fixtures.fixture_ftp",
   "fixtures.fixture_service"
  ]

This ensures that all fixtures declared under fixtures/ will be found by pytest

As a note that the respective directories referred to in fixtures.conftest" need to have __init__.py files for the plugins to be loaded by pytest

A similar case can be seen here: https://stackoverflow.com/a/54736237/6655459




回答2:


read here how structure your test.

your fixture directory seems not in package (project does not have __init__.py so canno be imported as project.fixtures either as fixtures as is not in the path. You can add required dirs in the path in your tests/conftest.py (sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, "fixtures")) or sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir) depending how how you want import your modules.




回答3:


Did you try importing your fixtures in project/conftest.py? Is that what you mean by "wrappers to return an instance"?



来源:https://stackoverflow.com/questions/32567306/pytest-fixtures-in-a-separate-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!