Як придушити внутрішні попередження про застарілість py.test


94

Чи є спосіб придушити внутрішні попередження про знецінення пітеста?

Контекст: Я хочу оцінити складність перенесення набору тестів з noseна pytest. Набір досить великий і активно використовує генератори тестів на основі noseстилю yield.

Я хотів би спочатку переконатися, що існуючі тести проходять з pytest, а потім, можливо, змінити генератори тестів на parameterized.

Просто робота $ pytest path-to-test-folderз pytest 3.0.4 повністю переважає сторінками та сторінками

WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0

Чи є спосіб вимкнути ці попередження?

Відповіді:


85

Від pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag

4
Як сказано в довідковому тексті, це лише пропустить текстовий резюме. Результат все одно буде жовтим і показуватиме, що є попередження.
Девід Перссон,

Краще помістити у файл pytest.ini, як показано нижче.
vy32

93

pytest -p no:warnings, або додайте наступне до вашого pytest.ini або tox.ini:

[pytest]
addopts = -p no:warnings

Результат буде зеленим без жодних вказівок на попередження. Див. Документацію за адресою https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Це може бути дійсним варіантом використання для набору тестів, де ви хочете отримати чистий результат.

Майте на увазі, що завжди приховуючи всі попередження, ви можете пропустити важливі попередження. Якщо ви хочете приховати лише конкретні попередження, подивіться на відповідь Cloc .


2
addopts = -p no:warningsце ДЕЙСЬКО ПОШУЧА ідея, і рішення CloC набагато більш розумне, але мені довелося скористатися вашим, коли ignore::InsecureRequestWarningйого не впізнали, тож ви також отримаєте +1
Пітер М. - означає Моніка

Постійне відключення всіх попереджень (тобто використання pytest.ini) майже ніколи не є хорошою ідеєю. Вимкнення лише попередження про припинення використання (і за модулем), як описує CloC, є правильним способом зробити це.
Neowizard

71

Думаю, ви не хочете приховувати всі попередження, а лише ті, які не мають значення. І в цьому випадку попередження про припинення використання імпортованих модулів python.

Прочитавши документацію до pytest про Warnings Capture :

Параметри командного рядка -W та опція filterwarnings ini базуються на власній опції -W та warnings.simplefilter Python , тому, будь ласка, зверніться до цих розділів у документації Python, щоб отримати інші приклади та вдосконалене використання.

Тож ви можете фільтрувати попередження за допомогою -Wопції python !

Здається, pytestфільтри повністю видаляються, оскільки вони відображають усі ті, що DeprecationWarningпрацюють, а в документації Python про попереджувальні фільтри за замовчуванням чітко сказано:

У звичайних збірках випусків за замовчуванням попереджувальний фільтр має такі записи (в порядку черговості):

default::DeprecationWarning:__main__
ignore::DeprecationWarning
ignore::PendingDeprecationWarning
ignore::ImportWarning
ignore::ResourceWarning

Отже, у вашому випадку, якщо ви хочете сказати, щоб фільтрувати типи попереджень, які ви хочете ігнорувати, наприклад, такі DeprecationWarning, просто запустіть команду pytest із -Wопцією:

$ pytest path-to-test-folder -W ignore::DeprecationWarning

РЕДАГУВАТИ : З коментаря colini можна відфільтрувати за модулем. Приклад ігнорування попереджень про усунення від усіх sqlalchemy:

ignore::DeprecationWarning:sqlalchemy.*:

Потім ви можете перерахувати встановлені модулі, що створює занадто багато шуму на виході pytest

Використовувати з файлом, а не в командному рядку:

Ви можете віддати перевагу переліку цих фільтрів у файлі pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
Для фільтрації модуля ви використовуєте регулярний вираз. Приклад ігнорування попереджень про ignore::DeprecationWarning:sqlalchemy.*:
застаріння

@colini, що не вдалося для мене як аргумент прапора -W, але це спрацювало для мене у моєму файлі pytest.ini.
WhiteHotLoveTiger

6

У файл pytest.ini ви можете додати:

[pytest]
addopts = -p no:warnings

АБО проходження нижче рядка в командному рядку. Це може бути корисно, якщо ваші тестові набори обробляють попередження за допомогою зовнішньої системи.

-p ні: попередження

АБО якщо ви хочете лише приховати якесь конкретне застаріле попередження, додайте нижче заяву у файл pytest.ini

[pytest]
filterwarnings =
    ignore:.*U.*mode is deprecated:DeprecationWarning

Це буде ігнорувати всі попередження типу DeprecationWarning, де початок повідомлення відповідає регулярному виразу ". * Режим U. * застарілий".

АБО хоча це не рекомендується, ви можете використовувати

--disable-попередження

параметр командного рядка, щоб повністю придушити підсумок попередження з результатів тестового запуску.


5

Я не хочу приховувати всі попередження, тому я помістив це pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.