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