Introduce a dedicated section about conftest.py
Also reorganize conftest-related content a bit. Closes #1505, closes #1770.
This commit is contained in:
parent
531e0dcaa3
commit
e23af009f9
|
@ -0,0 +1 @@
|
||||||
|
Introduce a dedicated section about conftest.py.
|
|
@ -209,8 +209,8 @@ the ``pytest_assertrepr_compare`` hook.
|
||||||
.. autofunction:: _pytest.hookspec.pytest_assertrepr_compare
|
.. autofunction:: _pytest.hookspec.pytest_assertrepr_compare
|
||||||
:noindex:
|
:noindex:
|
||||||
|
|
||||||
As an example consider adding the following hook in a conftest.py which
|
As an example consider adding the following hook in a :ref:`conftest.py <conftest.py>`
|
||||||
provides an alternative explanation for ``Foo`` objects::
|
file which provides an alternative explanation for ``Foo`` objects::
|
||||||
|
|
||||||
# content of conftest.py
|
# content of conftest.py
|
||||||
from test_foocompare import Foo
|
from test_foocompare import Foo
|
||||||
|
|
|
@ -127,10 +127,39 @@ It's a prime example of `dependency injection`_ where fixture
|
||||||
functions take the role of the *injector* and test functions are the
|
functions take the role of the *injector* and test functions are the
|
||||||
*consumers* of fixture objects.
|
*consumers* of fixture objects.
|
||||||
|
|
||||||
|
.. _`conftest.py`:
|
||||||
|
.. _`conftest`:
|
||||||
|
|
||||||
|
``conftest.py``: sharing fixture functions
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
If during implementing your tests you realize that you
|
||||||
|
want to use a fixture function from multiple test files you can move it
|
||||||
|
to a ``conftest.py`` file.
|
||||||
|
You don't need to import the fixture you want to use in a test, it
|
||||||
|
automatically gets discovered by pytest. The discovery of
|
||||||
|
fixture functions starts at test classes, then test modules, then
|
||||||
|
``conftest.py`` files and finally builtin and third party plugins.
|
||||||
|
|
||||||
|
You can also use the ``conftest.py`` file to implement
|
||||||
|
:ref:`local per-directory plugins <conftest.py plugins>`.
|
||||||
|
|
||||||
|
Sharing test data
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
If you want to make test data from files available to your tests, a good way
|
||||||
|
to do this is by loading these data in a fixture for use by your tests.
|
||||||
|
This makes use of the automatic caching mechanisms of pytest.
|
||||||
|
|
||||||
|
Another good approach is by adding the data files in the ``tests`` folder.
|
||||||
|
There are also community plugins available to help managing this aspect of
|
||||||
|
testing, e.g. `pytest-datadir <https://github.com/gabrielcnr/pytest-datadir>`__
|
||||||
|
and `pytest-datafiles <https://pypi.python.org/pypi/pytest-datafiles>`__.
|
||||||
|
|
||||||
.. _smtpshared:
|
.. _smtpshared:
|
||||||
|
|
||||||
Scope: Sharing a fixture across tests in a class, module or session
|
Scope: sharing a fixture instance across tests in a class, module or session
|
||||||
-------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
.. regendoc:wipe
|
.. regendoc:wipe
|
||||||
|
|
||||||
|
@ -878,17 +907,6 @@ All test methods in this TestClass will use the transaction fixture while
|
||||||
other test classes or functions in the module will not use it unless
|
other test classes or functions in the module will not use it unless
|
||||||
they also add a ``transact`` reference.
|
they also add a ``transact`` reference.
|
||||||
|
|
||||||
|
|
||||||
Shifting (visibility of) fixture functions
|
|
||||||
----------------------------------------------------
|
|
||||||
|
|
||||||
If during implementing your tests you realize that you
|
|
||||||
want to use a fixture function from multiple test files you can move it
|
|
||||||
to a :ref:`conftest.py <conftest.py>` file or even separately installable
|
|
||||||
:ref:`plugins <plugins>` without changing test code. The discovery of
|
|
||||||
fixtures functions starts at test classes, then test modules, then
|
|
||||||
``conftest.py`` files and finally builtin and third party plugins.
|
|
||||||
|
|
||||||
Overriding fixtures on various levels
|
Overriding fixtures on various levels
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ environment you can type::
|
||||||
|
|
||||||
and will get an extended test header which shows activated plugins
|
and will get an extended test header which shows activated plugins
|
||||||
and their names. It will also print local plugins aka
|
and their names. It will also print local plugins aka
|
||||||
:ref:`conftest.py <conftest>` files when they are loaded.
|
:ref:`conftest.py <conftest.py plugins>` files when they are loaded.
|
||||||
|
|
||||||
.. _`cmdunregister`:
|
.. _`cmdunregister`:
|
||||||
|
|
||||||
|
@ -155,4 +155,3 @@ in the `pytest repository <https://github.com/pytest-dev/pytest>`_.
|
||||||
_pytest.terminal
|
_pytest.terminal
|
||||||
_pytest.tmpdir
|
_pytest.tmpdir
|
||||||
_pytest.unittest
|
_pytest.unittest
|
||||||
|
|
||||||
|
|
|
@ -57,9 +57,7 @@ Plugin discovery order at tool startup
|
||||||
|
|
||||||
.. _`pytest/plugin`: http://bitbucket.org/pytest-dev/pytest/src/tip/pytest/plugin/
|
.. _`pytest/plugin`: http://bitbucket.org/pytest-dev/pytest/src/tip/pytest/plugin/
|
||||||
.. _`conftest.py plugins`:
|
.. _`conftest.py plugins`:
|
||||||
.. _`conftest.py`:
|
|
||||||
.. _`localplugin`:
|
.. _`localplugin`:
|
||||||
.. _`conftest`:
|
|
||||||
.. _`local conftest plugins`:
|
.. _`local conftest plugins`:
|
||||||
|
|
||||||
conftest.py: local per-directory plugins
|
conftest.py: local per-directory plugins
|
||||||
|
|
Loading…
Reference in New Issue