Basic test configuration

Command line options and configuration file settings

You can get help on command line options and values in INI-style configurations files by using the general help option:

py.test -h   # prints options _and_ config file settings

This will display command line and configuration file settings which were registered by installed plugins.

How test configuration is read from configuration INI-files

pytest searches for the first matching ini-style configuration file in the directories of command line argument and the directories above. It looks for file basenames in this order:

pytest.ini
tox.ini
setup.cfg

Searching stops when the first [pytest] section is found in any of these files. There is no merging of configuration values from multiple files. Example:

py.test path/to/testdir

will look in the following dirs for a config file:

path/to/testdir/pytest.ini
path/to/testdir/tox.ini
path/to/testdir/setup.cfg
path/to/pytest.ini
path/to/tox.ini
path/to/setup.cfg
... # up until root of filesystem

If argument is provided to a pytest run, the current working directory is used to start the search.

How to change command line options defaults

It can be tedious to type the same series of command line options every time you use pytest. For example, if you always want to see detailed info on skipped and xfailed tests, as well as have terser “dot” progress output, you can write it into a configuration file:

# content of pytest.ini
# (or tox.ini or setup.cfg)
[pytest]
addopts = -rsxX -q

From now on, running pytest will add the specified options.

Builtin configuration file options

minversion

Specifies a minimal pytest version required for running tests.

minversion = 2.1 # will fail if we run with pytest-2.0
addopts

Add the specified OPTS to the set of command line arguments as if they had been specified by the user. Example: if you have this ini file content:

[pytest]
addopts = --maxfail=2 -rf  # exit after 2 failures, report fail info

issuing py.test test_hello.py actually means:

py.test --maxfail=2 -rf test_hello.py

Default is to add no options.

norecursedirs

Set the directory basename patterns to avoid when recursing for test discovery. The individual (fnmatch-style) patterns are applied to the basename of a directory to decide if to recurse into it. Pattern matching characters:

*       matches everything
?       matches any single character
[seq]   matches any character in seq
[!seq]  matches any char not in seq

Default patterns are '.*', 'CVS', '_darcs', '{arch}', '*.egg'. Setting a norecursedirs replaces the default. Here is an example of how to avoid certain directories:

# content of setup.cfg
[pytest]
norecursedirs = .svn _build tmp*

This would tell pytest to not look into typical subversion or sphinx-build directories or into any tmp prefixed directory.

python_files

One or more Glob-style file patterns determining which python files are considered as test modules.

python_classes

One or more name prefixes determining which test classes are considered as test modules.

python_functions

One or more name prefixes determining which test functions and methods are considered as test modules. Note that this has no effect on methods that live on a unittest.TestCase derived class.

See Changing naming conventions for examples.