py.test 2.2.0: Testmarkierungen++, Parametrisierung++ und Dauerprofilerstellung¶
pytest-2.2.0 ist eine test-suite-kompatible Version des beliebten py.test Test-Tools. Plugins benötigen möglicherweise Upgrades. Es bringt folgende Verbesserungen mit sich:
Einfachere und leistungsfähigere Parametrisierung von Tests
Neuer @pytest.mark.parametrize-Decorator zum Ausführen von Tests mit unterschiedlichen Argumenten
Neue metafunc.parametrize() API zum unabhängigen Parametrisieren von Argumenten
Beispiele finden Sie unter https://docs.pytest.de/en/stable/example/how-to/parametrize.html
HINWEIS: Die parametrize() zugehörigen APIs sind noch etwas experimentell und können sich in zukünftigen Versionen ändern.
Verbesserte Handhabung von Testmarkierungen und verfeinertes Markierungsmechanismus
Option „-m markexpr“ zum Auswählen von Tests anhand ihrer Markierung
Eine neue „markers“-Ini-Variable zum Registrieren von Testmarkierungen für Ihr Projekt
Die neue „--strict“-Option bricht mit einem Fehler ab, wenn nicht registrierte Markierungen verwendet werden.
Beispiele finden Sie unter https://docs.pytest.de/en/stable/example/markers.html
Dauerprofilerstellung: Neue Option „--duration=N“, die die N langsamsten Testausführungen oder Setup/Teardown-Aufrufe anzeigt. Dies ist am nützlichsten, wenn Sie herausfinden möchten, wo Ihr langsamster Testcode liegt.
Außerdem führt 2.2.0 das Aufrufen von Teardown/Finalizer-Funktionen eifriger durch, was zu einer besseren und genaueren Berichterstattung bei Fehlern führt.
Darüber hinaus gibt es die übliche Reihe von Fehlerkorrekturen sowie eine Bereinigung der eigenen Test-Suite von pytest, die deren Ausführung auf einer breiteren Palette von Umgebungen ermöglicht.
Allgemeine Informationen finden Sie in der ausführlichen Dokumentation mit Beispielen hier
Wenn Sie pytest installieren oder aktualisieren möchten, können Sie einfach eingeben
pip install -U pytest # or
easy_install -U pytest
Vielen Dank an Ronny Pfannschmidt, David Burns, Jeff Donner, Daniel Nouri, Alfredo Deza und alle, die Feedback gegeben oder Fehlerberichte gesendet haben.
Beste Grüße, holger krekel
Hinweise zur Inkompatibilität¶
Während Test-Suiten unverändert funktionieren sollten, müssen Sie möglicherweise Plugins aktualisieren.
Für die Verteilung von Testläufen benötigen Sie eine neue Version des pytest-xdist-Plugins (1.7).
Andere Plugins müssen möglicherweise aktualisiert werden, wenn sie den Hook
pytest_runtest_logreportimplementieren, der jetzt bedingungslos für die Setup/Teardown-Fixture-Phasen eines Tests aufgerufen wird. Sie können wählen, Setup/Teardown-Fehler zu ignorieren, indem Sie "if rep.when != 'call': return" oder etwas Ähnliches einfügen. Beachten Sie, dass die meisten Codes wahrscheinlich "einfach" funktionieren, da der Hook bereits für fehlerhafte Setup/Teardown-Phasen eines Tests aufgerufen wurde, so dass ein Plugin bereits bereit gewesen sein sollte, solche Berichte zu verarbeiten.
Änderungen zwischen 2.1.3 und 2.2.0¶
Behebung von Issue 90: Einführung einer frühzeitigen Deaktivierung von Test-Items, so dass Teardown-Funktionen früher aufgerufen werden.
Hinzufügen einer mächtigen metafunc.parametrize-Funktion, die es ermöglicht, Testfunktionsargumente in mehreren Schritten und damit von unabhängigen Plugins und Orten aus zu parametrisieren.
Hinzufügen eines @pytest.mark.parametrize-Helferprogramms, das es ermöglicht, eine Testfunktion einfach mit verschiedenen Argumentwerten aufzurufen.
Hinzufügen von Beispielen zur "parametrize"-Beispielseite, einschließlich eines schnellen Portierungen von Testszenarien und der neuen parametrize-Funktion und des Decorators.
Einführung der Registrierung von "pytest.mark.*"-Helfern über Ini-Dateien oder Plugin-Hooks. Einführung der Option "--strict", die nicht registrierte Markierungen als Fehler behandelt, um Tippfehler zu vermeiden und eine gut beschriebene Menge von Markierungen für Ihre Test-Suite zu pflegen. Beispiele finden Sie unter https://docs.pytest.de/en/stable/how-to/mark.html und dessen Links.
Issue 50: Einführung der Option "-m marker" zum Auswählen von Tests basierend auf Markierungen (dies ist eine strengere und besser vorhersagbare Version von "-k", da "-m" nur vollständige Markierungen abgleicht und offensichtlichere Regeln für und/oder Semantik hat).
Neue Funktion zur Optimierung der Geschwindigkeit Ihrer Tests: Option "--durations=N" zur Anzeige der N langsamsten Testaufrufe und Setup/Teardown-Methoden.
Behebung von Issue 87: --pastebin funktioniert jetzt mit Python3.
Behebung von Issue 89: --pdb mit unerwarteten Ausnahmen in Doctests funktioniert sinnvoller.
Behebung und Bereinigung der eigenen Test-Suite von pytest, um keine FDs zu leaken.
Behebung von Issue 83: Link zur generierten Funcarg-Liste.
Behebung von Issue 74: Pyarg-Modulnamen werden jetzt gegen imp.find_module-Fehlalarme geprüft.
Behebung der Kompatibilität mit Twisted/Trial-11.1.0-Anwendungsfällen.