Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
790 views
in Technique[技术] by (71.8m points)

python - pytest fixtures in a separate directory

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...