Как помечать тестовые функции атрибутами
С помощью вспомогательной функции pytest.mark вы можете легко задавать метаданные для тестовых функций. Полный список встроенных меток приведён в справочнике API. Также можно вывести список всех меток, включая встроенные и пользовательские, с помощью CLI — pytest --markers.
Вот некоторые встроенные метки:
- usefixtures — использовать фикстуры для тестовой функции или класса
- filterwarnings — фильтровать определённые предупреждения тестовой функции
- skip — всегда пропускать тестовую функцию
- skipif — пропускать тестовую функцию, если выполнено определённое условие
- xfail — считать результат «ожидаемой ошибкой», если выполнено определённое условие
- parametrize — выполнять один и тот же тест несколько раз.
Создавать собственные метки и применять метки ко всем тестовым классам или модулям очень просто. Эти метки могут использоваться плагинами, а также часто применяются для выбора тестов в командной строке с помощью параметра -m.
Примеры, которые также служат документацией, см. в разделе Работа с пользовательскими метками.
Примечание
Метки можно применять только к тестам; на фикстуры они не влияют.
Регистрация меток
Вы можете зарегистрировать пользовательские метки в файле конфигурации следующим образом:
toml
[pytest]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"serial",
]
ini
[pytest]
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
Обратите внимание: всё, что следует после : за именем метки, является необязательным описанием.
Также можно программно регистрировать новые метки в хуке pytest_configure:
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
Зарегистрированные метки отображаются в справке pytest и не вызывают предупреждений (см. следующий раздел). Сторонним плагинам рекомендуется всегда регистрировать свои метки.
Выдача ошибок для неизвестных меток
Незарегистрированные метки, применённые с помощью декоратора @pytest.mark.name_of_the_mark, всегда вызывают предупреждение, чтобы избежать неожиданного поведения из-за опечаток в именах. Как описано в предыдущем разделе, отключить предупреждение для пользовательских меток можно, зарегистрировав их в файле конфигурации или используя пользовательский хук pytest_configure.
Если задан параметр конфигурации strict_markers, применение любой неизвестной метки с помощью декоратора @pytest.mark.name_of_the_mark вызовет ошибку. Чтобы включить эту проверку в проекте, задайте strict_markers в конфигурации:
toml
[pytest]
addopts = ["--strict-markers"]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"serial",
]
ini
[pytest]
strict_markers = true
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
© 2015–2026 Holger Krekel and pytest-dev team
Licensed under the MIT License.
https://docs.pytest.org/en/stable/how-to/mark.html