test_ok2/doc/en/how-to/mark.rst

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

94 lines
3.1 KiB
ReStructuredText
Raw Normal View History

.. _mark:
How to mark test functions with attributes
===========================================
By using the ``pytest.mark`` helper you can easily set
metadata on your test functions. You can find the full list of builtin markers
in the :ref:`API Reference<marks ref>`. Or you can list all the markers, including
builtin and custom, using the CLI - :code:`pytest --markers`.
Here are some of the builtin markers:
* :ref:`usefixtures <usefixtures>` - use fixtures on a test function or class
* :ref:`filterwarnings <filterwarnings>` - filter certain warnings of a test function
* :ref:`skip <skip>` - always skip a test function
* :ref:`skipif <skipif>` - skip a test function if a certain condition is met
* :ref:`xfail <xfail>` - produce an "expected failure" outcome if a certain
condition is met
* :ref:`parametrize <parametrizemark>` - perform multiple calls
to the same test function.
It's easy to create custom markers or to apply markers
2019-05-15 07:58:41 +08:00
to whole test classes or modules. Those markers can be used by plugins, and also
are commonly used to :ref:`select tests <mark run>` on the command-line with the ``-m`` option.
See :ref:`mark examples` for examples which also serve as documentation.
.. note::
Marks can only be applied to tests, having no effect on
:ref:`fixtures <fixtures>`.
Registering marks
-----------------
You can register custom marks in your ``pytest.ini`` file like this:
.. code-block:: ini
[pytest]
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
or in your ``pyproject.toml`` file like this:
.. code-block:: toml
[tool.pytest.ini_options]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"serial",
]
Note that everything past the ``:`` after the mark name is an optional description.
2019-08-01 21:11:26 +08:00
Alternatively, you can register new markers programmatically in a
:ref:`pytest_configure <initialization-hooks>` hook:
.. code-block:: python
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 :ref:`register their markers <registering-markers>`.
.. _unknown-marks:
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
2020-09-16 18:18:03 +08:00
surprising due to mistyped 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``:
.. code-block:: ini
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial