So unterdrücken Sie interne Verfallswarnungen von py.test

93

Gibt es eine Möglichkeit, die internen Abwertungswarnungen des Pytests zu unterdrücken?

Kontext: Ich möchte die Schwierigkeit der Portierung einer Testsuite von nosenach bewerten pytest. Die Suite ist ziemlich groß und verwendet stark Testgeneratoren im noseStil yield.

Ich möchte zuerst sicherstellen, dass die vorhandenen Tests mit pytest bestanden werden, und dann möglicherweise die Testgeneratoren auf ändern parameterized.

Nur $ pytest path-to-test-foldermit pytest 3.0.4 zu laufen, wird vollständig von Seiten und Seiten von dominiert

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

Gibt es eine Möglichkeit, diese Warnungen auszuschalten?

ev-br
quelle

Antworten:

85

Von pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag
Der Compiler
quelle
4
Wie im Hilfetext angegeben, wird nur die Textzusammenfassung weggelassen. Das Ergebnis ist weiterhin gelb und zeigt an, dass Warnungen vorliegen.
David Pärsson
Besser in die Datei pytest.ini einfügen, wie unten gezeigt.
vy32
94

pytest -p no:warnings, oder fügen Sie Ihrer pytest.ini oder tox.ini Folgendes hinzu:

[pytest]
addopts = -p no:warnings

Das Ergebnis ist grün ohne Hinweis auf Warnungen. Siehe Dokumentation unter https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .

Dies kann ein gültiger Anwendungsfall für eine Testsuite sein, in der Sie eine saubere Ausgabe wünschen.

Beachten Sie, dass das Ausblenden aller Warnungen dazu führen kann, dass Sie wichtige Warnungen verpassen. Wenn Sie nur bestimmte Warnungen ausblenden möchten, lesen Sie die Antwort von Cloc .

Blaise
quelle
2
addopts = -p no:warningsist eine WIRKLICH SCHLECHTE Idee, und die CloC-Lösung ist viel vernünftiger, aber ich musste Ihre verwenden, wenn sie ignore::InsecureRequestWarningnicht erkannt wurde, sodass Sie auch +1 erhalten
Peter M. - steht für Monica
Deaktivieren Sie alle beharrlich Warnungen (dh pytest.ini verwenden) ist so gut wie nie eine gute Idee. Nur die Deaktivierungswarnung (und nach Modul) zu deaktivieren, wie von CloC beschrieben, ist der richtige Weg, dies zu tun.
Neowizard
66

Ich denke, Sie möchten nicht alle Warnungen verbergen, sondern nur diejenigen, die nicht relevant sind. In diesem Fall Warnungen vor Korrekturen von importierten Python-Modulen.

Lesen Sie die Pytest-Dokumentation zu Warnings Capture :

Sowohl -W - Befehlszeilenoption und filterwarnings ini - Option basiert auf Python eigenen -W Option und warnings.simplefilter , so verweisen wir auf die Abschnitte in der Python - Dokumentation für weitere Beispiele und erweiterte Nutzung.

So können Sie Warnungen mit der Python- -WOption filtern !

Es scheint, dass pytestFilter vollständig entfernt werden, da alle diese DeprecationWarningbeim Ausführen angezeigt werden. In der Python-Dokumentation zu Standardwarnfiltern heißt es eindeutig:

In regulären Release-Builds enthält der Standardwarnfilter die folgenden Einträge (in der Reihenfolge ihrer Priorität):

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

Wenn Sie also beispielsweise DeprecationWarningWarntypen filtern möchten, die Sie ignorieren möchten, z. B. diese , führen Sie einfach den Befehl pytest mit der folgenden -WOption aus:

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

EDIT : Von Colini ‚s Kommentar, ist es möglich, Filter durch das Modul. Beispiel zum Ignorieren von Verfallswarnungen aus allen SQLalchemies:

ignore::DeprecationWarning:sqlalchemy.*:

Sie können dann Ihre installierten Module auflisten, die zu viel Rauschen in der Ausgabe von erzeugen pytest

Verwenden Sie mit Datei anstatt in der Befehlszeile:

Möglicherweise möchten Sie diese Filter lieber in der Datei pytest.ini auflisten:

[pytest]
filterwarnings =
    ignore::DeprecationWarning
CloC
quelle
9
Um nach dem Modul zu filtern, verwenden Sie einen regulären Ausdruck. Beispiel zum Ignorieren von Verfallswarnungen von allen sqlalchemy-Modulen:ignore::DeprecationWarning:sqlalchemy.*:
colini
@colini, das für mich als Argument für das Flag -W fehlgeschlagen ist, aber in meiner Datei pytest.ini für mich funktioniert hat.
WhiteHotLoveTiger
5

Ich möchte nicht alle Warnungen verbergen, also habe ich dies eingegeben pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning
Polv
quelle
Das funktioniert bei mir nicht.
rjurney vor
4

In der Datei pytest.ini können Sie Folgendes hinzufügen:

[pytest]
addopts = -p no:warnings

ODER unter der Zeile in der Befehlszeile. Dies kann nützlich sein, wenn Ihre Testsuiten Warnungen über ein externes System verarbeiten.

-p nein: Warnungen

ODER wenn Sie nur eine bestimmte veraltete Warnung ausblenden möchten, fügen Sie die folgende Anweisung in Ihre Datei pytest.ini ein

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

Dadurch werden alle Warnungen vom Typ DeprecationWarning ignoriert, bei denen der Start der Nachricht mit dem regulären Ausdruck ". * U. * -Modus ist veraltet" übereinstimmt.

ODER Obwohl nicht empfohlen, können Sie die verwenden

--disable-warnings

Befehlszeilenoption zum vollständigen Unterdrücken der Warnungszusammenfassung aus der Testlaufausgabe.

pk786
quelle