33

Say I have a file fixtures.py that defines a simple py.test fixture called foobar.

Normally I would have to import that fixture to use it (including all of the sub-fixtures), like this:

from fixtures import foobar def test_bazinga(foobar): 

Note that I also don't want to use a star import.

How do I import this fixture so that I can just write:

import fixtures def test_bazinga(foobar): 

Is this even possible? It seems like it, because py.test itself defines exactly such fixtures (e.g. monkeypatch).

2
  • Have you looked at how py.test does it? Commented Apr 6, 2016 at 13:25
  • 2
    put your fixtures in conftest.py Commented Apr 6, 2016 at 13:34

1 Answer 1

58

Fixtures and their visibility are a bit odd in pytest. They don't require importing, but if you defined them in a test_*.py file, they'll only be available in that file.

You can however put them in a (project- or subfolder-wide) conftest.py to use them in multiple files.

pytest-internal fixtures are simply defined in a core plugin, and thus available everywhere. In fact, a conftest.py is basically nothing else than a per-directory plugin.

You can also run py.test --fixtures to see where fixtures are coming from.

Sign up to request clarification or add additional context in comments.

1 Comment

You can also define them in some other files and import them into conftest.py. See this gist.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.