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?
Fixtures can also be requested more than once during the same test, and pytest won't execute them again for that test. This means we can request fixtures in multiple fixtures that are dependent on them (and even again in the test itself) without those fixtures being executed more than once.
fixtures have explicit names and are activated by declaring their use from test functions, modules, classes or whole projects. fixtures are implemented in a modular manner, as each fixture name triggers a fixture function which can itself use other fixtures.
To access the fixture function, the tests have to mention the fixture name as input parameter. Pytest while the test is getting executed, will see the fixture name as input parameter. It then executes the fixture function and the returned value is stored to the input parameter, which can be used by the test.
Use Pytest Fixtures Across Multiple Test Files With conftest.py. To make it easier on ourselves, we can define a fixture to use across multiple test files. These fixtures are defined by creating a file called conftest.py. Additionally, we can call separate files that also import the fixture from our configuration file.
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 bypytest
A similar case can be seen here: https://stackoverflow.com/a/54736237/6655459
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With