Маркировка тестов¶
Благодаря 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