Маркировка тестов

Благодаря pytest.mark можно передавать метаданные в ваши тесты. Ниже приведены примеры некоторых встроенных маркеров:

  • skip - пропускает (skip) тестовую функцию

  • skipif - пропускает (skip) тестовую функцию при соблюдении определенных условий

  • xfail - помечает тест как «ожидаемо падающий» (xfail) при соблюдении каких-то условий

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

Можно с легкостью создавать маркеры и применять их ко всему тестовому классу или модулю. Маркеры можно использовать в плагинах и для отбора тестов при запуске pytest из командной строки с опцией -m.

Примеры и документацию см. Работа с пользовательской маркировкой.

Примечание

Маркеры можно применять только к самим тестам, на фикстуры они никак не влияют.

Регистрация маркера

Свой маркер можно зарегистрировать в файле pytest.ini:

[pytest]
markers =
    slow: помечает тесты как "медленные" (не будут выбраны при запуске с '-m "not slow"')
    serial

При этом все, что после : - это описание маркера (опционально).

Можно также зарегистрировать новые маркеры программно в хуке (hook) 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.ini или хуке pytest_configure.

Если применить опцию командной строки --strict-markers, то все неопознанные маркеры, используемые декоратором @pytest.mark.name_of_the_mark, будут генерировать ошибку. Для своего проекта эту опцию можно применить по умолчанию, добавив --strict-markers в addopts в pytest.ini.

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