Как пометить тестовые функции атрибутами

Используя помощник pytest.mark, вы можете легко установить метаданные для ваших тестовых функций. Полный список встроенных маркеров вы можете найти в API Reference. Или вы можете перечислить все маркеры, включая встроенные и пользовательские, используя CLI - pytest --markers.

Вот некоторые из встроенных маркеров:

  • usefixtures - использование приспособлений в тестовой функции или классе

  • filterwarnings - отфильтровать определенные предупреждения тестовой функции

  • skip - всегда пропускать функцию проверки

  • skipif - пропуск тестовой функции при выполнении определенного условия

  • xfail - при выполнении определенного условия выдать «ожидаемый результат неудачи»

  • parametrize - выполнить несколько вызовов одной и той же тестовой функции.

Легко создавать пользовательские маркеры или применять маркеры к целым тестовым классам или модулям. Эти маркеры могут использоваться плагинами, а также обычно используются для select tests в командной строке с опцией -m.

Смотрите Работа с пользовательскими маркерами для примеров, которые также служат документацией.

Примечание

Пометки могут быть применены только к тестам, не оказывая влияния на fixtures.

Регистрация знаков

Вы можете зарегистрировать пользовательские метки в файле pytest.ini следующим образом:

[pytest]
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial

или в вашем pyproject.toml файле, например, так:

[tool.pytest.ini_options]
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 и не выдают предупреждений (см. следующий раздел). Рекомендуется, чтобы сторонние подключаемые модули всегда register their markers.

Выявление ошибок на неизвестных знаках

Незарегистрированные метки, применяемые с помощью декоратора @pytest.mark.name_of_the_mark, всегда будут выдавать предупреждение, чтобы избежать молчаливого выполнения неожиданных действий из-за неправильно введенных имен. Как описано в предыдущем разделе, вы можете отключить предупреждение для пользовательских меток, зарегистрировав их в вашем файле pytest.ini или используя пользовательский хук pytest_configure.

Когда передан флаг командной строки --strict-markers, любые неизвестные метки, примененные с помощью декоратора @pytest.mark.name_of_the_mark, вызовут ошибку. Вы можете обеспечить эту проверку в своем проекте, добавив --strict-markers к addopts:

[pytest]
addopts = --strict-markers
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial
Вернуться на верх