Marking test functions with attributes
By using the pytest.mark
helper you can easily set metadata on your test functions. There are some builtin markers, for example:
skip
: always skip a test functionskipif
: skip a test function if a certain condition is metxfail
: produce an “expected failure” outcome if a certain condition is metparametrize
to perform multiple calls to the same test function.
It’s easy to create custom markers or to apply markers to whole test classes or modules. Those markers can be used by plugins, and also are commonly used to select tests on the command-line with the -m
option.
6.1 Registering marks
You can register custom marks in your pytest.ini
file like this:
[pytest]
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
Note that everything after the : is an optional description. Alternatively, you can register new markers programatically in a pytest_configure
hook:
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
Registered marks appear in pytest’s help text and do not emit warnings (see the next section). It is recommended that third-party plugins always register their markers.
6.2 Raising errors on unknown marks
Unregistered marks applied with the @pytest.mark.name_of_the_mark
decorator will always emit a warning in order to avoid silently doing something surprising due to mis-typed names. As described in the previous section, you can disable the warning for custom marks by registering them in your pytest.ini
file or using a custom pytest_configure
hook. When the --strict-markers
command-line flag is passed, any unknown marks applied with the @pytest. mark.name_of_the_mark
decorator will trigger an error. You can enforce this validation in your project by adding --strict-markers
to addopts
:
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial