2017-07-20 08:11:17 +08:00
|
|
|
Configuration
|
|
|
|
=============
|
2009-08-19 01:04:57 +08:00
|
|
|
|
2010-11-01 00:41:58 +08:00
|
|
|
Command line options and configuration file settings
|
|
|
|
-----------------------------------------------------------------
|
2009-08-19 01:04:57 +08:00
|
|
|
|
2011-03-04 06:40:38 +08:00
|
|
|
You can get help on command line options and values in INI-style
|
2019-02-15 21:10:37 +08:00
|
|
|
configurations files by using the general help option:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2009-08-19 01:04:57 +08:00
|
|
|
|
2016-06-21 22:16:57 +08:00
|
|
|
pytest -h # prints options _and_ config file settings
|
2009-08-19 01:04:57 +08:00
|
|
|
|
2010-11-01 00:41:58 +08:00
|
|
|
This will display command line and configuration file settings
|
|
|
|
which were registered by installed plugins.
|
2009-08-19 01:04:57 +08:00
|
|
|
|
2015-02-27 04:56:44 +08:00
|
|
|
.. _rootdir:
|
2012-11-06 21:09:12 +08:00
|
|
|
.. _inifiles:
|
|
|
|
|
2017-07-20 08:11:17 +08:00
|
|
|
Initialization: determining rootdir and inifile
|
2015-02-27 04:56:44 +08:00
|
|
|
-----------------------------------------------
|
2010-11-25 19:11:10 +08:00
|
|
|
|
2015-02-27 04:56:44 +08:00
|
|
|
.. versionadded:: 2.7
|
2010-11-07 23:10:22 +08:00
|
|
|
|
2017-07-20 08:11:17 +08:00
|
|
|
pytest determines a ``rootdir`` for each test run which depends on
|
2015-02-27 04:56:44 +08:00
|
|
|
the command line arguments (specified test files, paths) and on
|
2017-07-20 08:11:17 +08:00
|
|
|
the existence of *ini-files*. The determined ``rootdir`` and *ini-file* are
|
|
|
|
printed as part of the pytest header during startup.
|
|
|
|
|
|
|
|
Here's a summary what ``pytest`` uses ``rootdir`` for:
|
|
|
|
|
|
|
|
* Construct *nodeids* during collection; each test is assigned
|
|
|
|
a unique *nodeid* which is rooted at the ``rootdir`` and takes in account full path,
|
|
|
|
class name, function name and parametrization (if any).
|
|
|
|
|
|
|
|
* Is used by plugins as a stable location to store project/test run specific information;
|
2018-09-20 03:06:36 +08:00
|
|
|
for example, the internal :ref:`cache <cache>` plugin creates a ``.pytest_cache`` subdirectory
|
2017-07-20 08:11:17 +08:00
|
|
|
in ``rootdir`` to store its cross-test run state.
|
|
|
|
|
|
|
|
Important to emphasize that ``rootdir`` is **NOT** used to modify ``sys.path``/``PYTHONPATH`` or
|
|
|
|
influence how modules are imported. See :ref:`pythonpath` for more details.
|
|
|
|
|
2018-05-18 16:19:46 +08:00
|
|
|
``--rootdir=path`` command-line option can be used to force a specific directory.
|
2018-02-02 05:34:15 +08:00
|
|
|
The directory passed may contain environment variables when it is used in conjunction
|
|
|
|
with ``addopts`` in a ``pytest.ini`` file.
|
2018-02-01 16:20:37 +08:00
|
|
|
|
2017-07-20 08:11:17 +08:00
|
|
|
Finding the ``rootdir``
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
2015-02-27 04:56:44 +08:00
|
|
|
|
|
|
|
Here is the algorithm which finds the rootdir from ``args``:
|
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
- determine the common ancestor directory for the specified ``args`` that are
|
|
|
|
recognised as paths that exist in the file system. If no such paths are
|
|
|
|
found, the common ancestor directory is set to the current working directory.
|
2015-02-27 04:56:44 +08:00
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
- look for ``pytest.ini``, ``tox.ini`` and ``setup.cfg`` files in the ancestor
|
|
|
|
directory and upwards. If one is matched, it becomes the ini-file and its
|
|
|
|
directory becomes the rootdir.
|
2015-02-27 04:56:44 +08:00
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
- if no ini-file was found, look for ``setup.py`` upwards from the common
|
|
|
|
ancestor directory to determine the ``rootdir``.
|
2015-02-27 04:56:44 +08:00
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
- if no ``setup.py`` was found, look for ``pytest.ini``, ``tox.ini`` and
|
|
|
|
``setup.cfg`` in each of the specified ``args`` and upwards. If one is
|
|
|
|
matched, it becomes the ini-file and its directory becomes the rootdir.
|
2015-02-27 04:56:44 +08:00
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
- if no ini-file was found, use the already determined common ancestor as root
|
2016-09-16 05:10:57 +08:00
|
|
|
directory. This allows the use of pytest in structures that are not part of
|
2016-06-22 03:48:59 +08:00
|
|
|
a package and don't have any particular ini-file configuration.
|
|
|
|
|
2016-08-19 15:01:12 +08:00
|
|
|
If no ``args`` are given, pytest collects test below the current working
|
2017-04-07 09:01:03 +08:00
|
|
|
directory and also starts determining the rootdir from there.
|
2016-08-19 15:01:12 +08:00
|
|
|
|
|
|
|
:warning: custom pytest plugin commandline arguments may include a path, as in
|
2016-08-19 20:02:25 +08:00
|
|
|
``pytest --log-output ../../test.log args``. Then ``args`` is mandatory,
|
2016-08-19 15:01:12 +08:00
|
|
|
otherwise pytest uses the folder of test.log for rootdir determination
|
|
|
|
(see also `issue 1435 <https://github.com/pytest-dev/pytest/issues/1435>`_).
|
|
|
|
A dot ``.`` for referencing to the current working directory is also
|
|
|
|
possible.
|
|
|
|
|
2016-06-22 03:48:59 +08:00
|
|
|
Note that an existing ``pytest.ini`` file will always be considered a match,
|
|
|
|
whereas ``tox.ini`` and ``setup.cfg`` will only match if they contain a
|
2016-08-17 08:30:07 +08:00
|
|
|
``[pytest]`` or ``[tool:pytest]`` section, respectively. Options from multiple ini-files candidates are never
|
2016-06-22 03:48:59 +08:00
|
|
|
merged - the first one wins (``pytest.ini`` always wins, even if it does not
|
2015-02-27 04:56:44 +08:00
|
|
|
contain a ``[pytest]`` section).
|
|
|
|
|
|
|
|
The ``config`` object will subsequently carry these attributes:
|
2010-11-07 23:10:22 +08:00
|
|
|
|
2015-02-27 04:56:44 +08:00
|
|
|
- ``config.rootdir``: the determined root directory, guaranteed to exist.
|
2010-10-28 01:35:27 +08:00
|
|
|
|
2015-02-27 04:56:44 +08:00
|
|
|
- ``config.inifile``: the determined ini-file, may be ``None``.
|
2010-10-28 01:35:27 +08:00
|
|
|
|
2015-02-27 04:56:44 +08:00
|
|
|
The rootdir is used a reference directory for constructing test
|
|
|
|
addresses ("nodeids") and can be used also by plugins for storing
|
|
|
|
per-testrun information.
|
2010-10-28 01:35:27 +08:00
|
|
|
|
2019-02-15 21:10:37 +08:00
|
|
|
Example:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2015-02-27 04:56:44 +08:00
|
|
|
|
2016-06-21 22:16:57 +08:00
|
|
|
pytest path/to/testdir path/other/
|
2015-02-27 04:56:44 +08:00
|
|
|
|
|
|
|
will determine the common ancestor as ``path`` and then
|
2019-02-15 21:10:37 +08:00
|
|
|
check for ini-files as follows:
|
|
|
|
|
|
|
|
.. code-block:: text
|
2015-02-27 04:56:44 +08:00
|
|
|
|
|
|
|
# first look for pytest.ini files
|
|
|
|
path/pytest.ini
|
2016-08-17 08:30:07 +08:00
|
|
|
path/setup.cfg # must also contain [tool:pytest] section to match
|
2015-02-27 04:56:44 +08:00
|
|
|
path/tox.ini # must also contain [pytest] section to match
|
|
|
|
pytest.ini
|
|
|
|
... # all the way down to the root
|
|
|
|
|
|
|
|
# now look for setup.py
|
|
|
|
path/setup.py
|
|
|
|
setup.py
|
|
|
|
... # all the way down to the root
|
2010-10-28 01:35:27 +08:00
|
|
|
|
|
|
|
|
2010-11-25 19:11:10 +08:00
|
|
|
.. _`how to change command line options defaults`:
|
|
|
|
.. _`adding default options`:
|
|
|
|
|
2016-09-16 05:10:57 +08:00
|
|
|
|
2016-09-16 01:46:15 +08:00
|
|
|
|
2011-03-04 06:40:38 +08:00
|
|
|
How to change command line options defaults
|
2010-11-25 19:11:10 +08:00
|
|
|
------------------------------------------------
|
|
|
|
|
2011-03-04 06:40:38 +08:00
|
|
|
It can be tedious to type the same series of command line options
|
2014-01-18 19:31:33 +08:00
|
|
|
every time you use ``pytest``. For example, if you always want to see
|
2011-03-04 06:40:38 +08:00
|
|
|
detailed info on skipped and xfailed tests, as well as have terser "dot"
|
2015-07-10 08:50:38 +08:00
|
|
|
progress output, you can write it into a configuration file:
|
|
|
|
|
|
|
|
.. code-block:: ini
|
2010-11-25 19:11:10 +08:00
|
|
|
|
2019-02-24 02:32:42 +08:00
|
|
|
# content of pytest.ini or tox.ini
|
|
|
|
# setup.cfg files should use [tool:pytest] section instead
|
2010-11-25 19:11:10 +08:00
|
|
|
[pytest]
|
2017-07-19 02:37:01 +08:00
|
|
|
addopts = -ra -q
|
2010-11-25 19:11:10 +08:00
|
|
|
|
2017-07-19 02:37:01 +08:00
|
|
|
Alternatively, you can set a ``PYTEST_ADDOPTS`` environment variable to add command
|
2019-02-15 21:10:37 +08:00
|
|
|
line options while the environment is in use:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2015-02-09 22:11:54 +08:00
|
|
|
|
2017-07-19 02:37:01 +08:00
|
|
|
export PYTEST_ADDOPTS="-v"
|
2015-02-09 22:11:54 +08:00
|
|
|
|
2019-02-15 21:10:37 +08:00
|
|
|
Here's how the command-line is built in the presence of ``addopts`` or the environment variable:
|
|
|
|
|
|
|
|
.. code-block:: text
|
2010-11-25 19:11:10 +08:00
|
|
|
|
2018-07-22 23:39:32 +08:00
|
|
|
<pytest.ini:addopts> $PYTEST_ADDOPTS <extra command-line arguments>
|
2017-07-19 02:37:01 +08:00
|
|
|
|
2019-02-15 21:10:37 +08:00
|
|
|
So if the user executes in the command-line:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2017-07-19 02:37:01 +08:00
|
|
|
|
|
|
|
pytest -m slow
|
|
|
|
|
2019-02-15 21:10:37 +08:00
|
|
|
The actual command line executed is:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2017-07-19 02:37:01 +08:00
|
|
|
|
|
|
|
pytest -ra -q -v -m slow
|
|
|
|
|
|
|
|
Note that as usual for other command-line applications, in case of conflicting options the last one wins, so the example
|
|
|
|
above will show verbose output because ``-v`` overwrites ``-q``.
|
2015-02-27 04:56:44 +08:00
|
|
|
|
|
|
|
|
2011-09-06 17:43:42 +08:00
|
|
|
Builtin configuration file options
|
2010-11-01 00:41:58 +08:00
|
|
|
----------------------------------------------
|
2010-10-28 01:35:27 +08:00
|
|
|
|
2018-03-08 07:45:41 +08:00
|
|
|
For the full list of options consult the :ref:`reference documentation <ini options ref>`.
|