Wie Sie Pytest-Plugins für einzelne Tests deaktivieren

8

Ich habe das neue pytest-Plugin installiert ( pytest-catchlog==1.2.2 ) und so oft es mir gefällt, es bricht meine Unit-Tests für das Logging-Modul (z. B. ValueError: I/O operation on closed file ).

Ich möchte dieses Plugin für die Datei test_logging.py (oder sogar eine Klasse oder Methode) deaktivieren, aber ich kann keine Informationen darüber finden.

Die einzige Option, die ich bisher gefunden habe, besteht darin, pytest zweimal auszuführen: das erste Mal für test_logging.py onlywith catchlog disabled ( py.test -p no:catchlog test_logging.py ) und das zweite Mal für alle anderen Testdateien.

Bitte lassen Sie mich wissen, wenn ich einen Pytest-Dekorator vermisst habe, oder eine andere Möglichkeit, Plugins in Runtime zu deaktivieren.

    
Jovik 20.06.2016, 13:59
quelle

1 Antwort

2

Sie können beliebige Plugins für ausgewählte Tests nicht selektiv deaktivieren. Die Plugins werden viel früher geladen - wenn der Pytest startet. Und die Plugins definieren tatsächlich, was pytest macht und wie (z. B. Befehlszeilenoptionen, Testsammlung, Filterung usw.).

Mit anderen Worten, es ist zu spät, um die interne Struktur des Pytests neu zu definieren, wenn es zur Testausführung kommt.

Am besten ist es, wenn Sie Ihre Tests mit @pytest.mark.nocatchlog markieren und sie getrennt ausführen:

%Vor%

Wenn diese Tests nicht unter Ihrer Kontrolle stehen, d. h. wenn Sie keine Markierungen hinzufügen können, können Sie nur nach Ausdrücken wie -k test_logging oder -k 'not test_logging' filtern (d. h. nach einem Teil ihrer Knoten-ID).

Speziell für dieses pytest-catchlog -Plugin kannst du das selbe machen hooks und entfernt seinen Log-Handler aus dem Root-Logger (vorausgesetzt, dass keine anderen Logger explizit verwendet wurden):

conftest.py :

%Vor%     
Sergey Vasilyev 25.10.2017, 00:29
quelle

Tags und Links