Come sopprimere gli avvisi interni di deprecazione di py.test


94

C'è un modo per sopprimere gli avvisi interni di deprecazione del pytest?

Contesto: sto cercando di valutare la difficoltà di portare una suite di test da nosea pytest. La suite è abbastanza ampia e utilizza in modo massiccio generatori di test in nosestile yield.

Vorrei prima assicurarmi che i test esistenti passassero con pytest, e poi forse cambiare i generatori di test in parameterized.

Il solo funzionamento $ pytest path-to-test-foldercon pytest 3.0.4 è completamente dominato da pagine e pagine di

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

C'è un modo per disattivare questi avvisi?

Risposte:


85

Da pytest --help:

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

4
Come dice il testo della guida, questo ometterà solo il riepilogo testuale. Il risultato sarà ancora giallo e mostrerà che ci sono avvisi.
David Pärsson

Meglio inserire il file pytest.ini, come mostrato di seguito.
vy32

93

pytest -p no:warningso aggiungi quanto segue al tuo pytest.ini o tox.ini:

[pytest]
addopts = -p no:warnings

Il risultato sarà verde senza alcuna indicazione di avvertimenti. Consulta la documentazione su https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Questo può essere un caso d'uso valido per una suite di test in cui si desidera un output pulito.

Tieni presente che nascondere sempre tutti gli avvisi potrebbe farti perdere avvisi importanti. Se vuoi nascondere solo avvisi specifici, guarda la risposta di Cloc .


2
addopts = -p no:warningsè un'idea VERAMENTE MALE, e la soluzione CloC è molto più sana, ma ho dovuto usare la tua quando ignore::InsecureRequestWarningnon è stata riconosciuta, quindi anche tu ottieni +1
Peter M. - sta per Monica

Disabilitare tutti gli avvisi in modo persistente (cioè usando pytest.ini) non è quasi mai una buona idea. Disabilitare solo l'avviso di deprecazione (e per modulo) come descritto da CloC è il modo giusto per farlo.
Neowizard

71

Penso che tu non voglia nascondere tutti gli avvisi, ma solo quelli che non sono rilevanti. E in questo caso, avvisi di deprecazione dai moduli Python importati.

Avendo una lettura della documentazione pytest su Warnings Capture :

Sia l'opzione -W della riga di comando che l'opzione filterwarnings ini sono basate sull'opzione -W e warnings.simplefilter di Python , quindi fai riferimento a quelle sezioni nella documentazione di Python per altri esempi e utilizzo avanzato.

Quindi puoi filtrare gli avvisi con l' -Wopzione di python !

Sembra che pytestrimuova completamente i filtri, perché mostra tutti quelli in DeprecationWarningesecuzione, e la documentazione di Python sui filtri di avviso predefiniti dice chiaramente:

Nelle build di rilascio regolari, il filtro di avviso predefinito ha le seguenti voci (in ordine di precedenza):

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

Quindi nel tuo caso, se vuoi dire di filtrare i tipi di avviso che vuoi ignorare, come quelli DeprecationWarning, esegui il comando pytest con l' -Wopzione:

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

EDIT : Dal commento di colini , è possibile filtrare per modulo. Esempio per ignorare gli avvisi di deprecazione da tutti sqlalchemy:

ignore::DeprecationWarning:sqlalchemy.*:

È quindi possibile elencare i moduli installati che creano troppo rumore nell'output di pytest

Utilizzare con file anziché nella riga di comando:

Potresti preferire elencare quei filtri nel file pytest.ini:

[pytest]
filterwarnings =
    ignore::DeprecationWarning

9
Per filtrare sul modulo si utilizza una regex. Esempio per ignorare gli avvisi di deprecazione da tutti i moduli sqlalchemy:ignore::DeprecationWarning:sqlalchemy.*:
colini

@colini che non è riuscito per me come argomento per il flag -W, ma ha funzionato per me nel mio file pytest.ini.
WhiteHotLoveTiger

6

Nel file pytest.ini puoi aggiungere:

[pytest]
addopts = -p no:warnings

OPPURE passando sotto la riga nella riga di comando. Ciò potrebbe essere utile se le suite di test gestiscono gli avvisi utilizzando un sistema esterno.

-p no: avvertenze

OPPURE se desideri nascondere solo alcuni avvertimenti deprecati specifici, aggiungi la seguente dichiarazione nel file pytest.ini

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

Questo ignorerà tutti gli avvisi di tipo DeprecationWarning in cui l'inizio del messaggio corrisponde all'espressione regolare ". * U. * mode is deprecated".

OPPURE Sebbene non sia consigliato, è possibile utilizzare l'estensione

--disable-warnings

opzione della riga di comando per sopprimere completamente il riepilogo dell'avviso dall'output dell'esecuzione di prova.


5

Non voglio nascondere tutti gli avvertimenti, quindi ho inserito questo pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.