pytest-2.5.0: jetzt bei NULL gemeldeten Fehlern!

pytest-2.5.0 ist ein großes Bugfix-Release, das Ergebnis von zwei Community-Bugfix-Tagen plus zahlreichen zusätzlichen Arbeiten vieler Leute und Melder. Das Release sollte vollständig kompatibel zu 2.4.2, bestehenden Plugins und Test-Suiten sein. Wir streben danach, dieses Niveau von NULL gemeldeten Fehlern aufrechtzuerhalten, denn es macht keinen Spaß, wenn Ihr Testwerkzeug Fehler hat, oder? Unter einer Bedingung allerdings: Wenn Sie einen Fehlerbericht einreichen, geben Sie bitte klare Informationen über die Umstände und ein einfaches Beispiel, das das Problem reproduziert.

Die Issue-Tracker ist natürlich jetzt nicht leer. Wir haben viele verbleibende "Verbesserungs"-Themen, die wir hoffentlich 2014 mit Ihrer Hilfe angehen können.

Für diejenigen, die ältere Python-Versionen verwenden, beachten Sie bitte, dass pytest aufgrund von virtualenv, setuptools und tox, die es nicht mehr unterstützen, nicht automatisch auf python2.5 getestet wird. Manuelle Verifizierung zeigt, dass es größtenteils gut funktioniert, aber es wird nicht Teil des automatisierten Release-Prozesses sein und kann daher in Zukunft brechen.

Wie üblich sind die aktuellen Dokumentationen unter

und Sie können über pypi aktualisieren:

pip install -U pytest

Besonderer Dank für die Hilfe bei diesem Release geht an Anatoly Bubenkoff, Floris Bruynooghe, Marc Abramowitz, Ralph Schmitt, Ronny Pfannschmidt, Donald Stufft, James Lan, Rob Dennis, Jason R. Coombs, Mathieu Agopian, Virgil Dupras, Bruno Oliveira, Alex Gaynor und andere.

Viel Spaß, holger krekel

2.5.0

  • dropped python2.5 aus dem automatisierten Release-Test von pytest selbst, was bedeutet, dass es wahrscheinlich bald brechen wird (aber wir glauben, dass es mit diesem Release noch funktioniert).

  • vereinfachte und behobene Implementierung für das Aufrufen von Finalizern, wenn parametrisierte Fixtures oder Funktionsargumente beteiligt sind. Die Finalisierung wird jetzt verzögert zur Setup-Zeit anstatt in der "Teardown-Phase" durchgeführt. Während dies zunächst seltsam klingen mag, hilft es sicherzustellen, dass wir Setup/Teardown auch in komplexem Code korrekt handhaben. Benutzercode sollte nicht betroffen sein, es sei denn, er implementiert den pytest_runtest_teardown-Hook und erwartet, dass bestimmte Fixture-Instanzen darin abgebaut werden (sehr unwahrscheinlich und wäre ohnehin unzuverlässig gewesen).

  • PR90: Option --color=yes|no|auto hinzugefügt, um den Modus für die Terminal-Farbgebung zu erzwingen ("auto" ist Standard). Danke an Marc Abramowitz.

  • Fehler issue319 behoben - Unicode in Assertionsfehlern korrekt anzeigen. Vielen Dank an Floris Bruynooghe für den vollständigen PR. Das bedeutet auch, dass wir jetzt von py>=1.4.19 abhängen.

  • Fehler issue396 behoben - Klassen-skalierte parametrisierte Tests unabhängig von der Anzahl der Methoden in der Klasse korrekt sortieren und finalisieren.

  • Fehler issue323 besser behoben - Parametrisierung sollte jetzt niemals Laufzeit-Rekursionsfehler verursachen, da der zugrunde liegende Algorithmus zum Neuordnen von Tests pro Scope/pro Fixture nicht mehr rekursiv ist (er war zuvor tail-call-rekursiv, was bei mehr als >966 nicht-funktionsskaligen Parametern zu Problemen führen konnte).

  • Fehler issue290 behoben - es gibt nun eine vorläufige Unterstützung für die Parametrisierung mit wiederholten gleichen Werten (manchmal nützlich, um zu testen, ob ein zweiter Aufruf wie der erste funktioniert).

  • Fehler issue240 behoben - präzise dokumentiert, wie pytest-Modulimporte funktionieren, die beiden gängigen Testverzeichnis-Layouts diskutiert und wie sie mit PEP420-Namespace-Paketen interagieren.

  • Fehler issue246 behoben - Finalisierungsreihenfolge auf LIFO bei unabhängigen Fixtures korrigiert, die von einer höher-als-funktion-skaligen parametrisierten Fixture abhängen. (war ziemlicher Aufwand, also bitte die Komplexität dieses Satzes ertragen :) Danke an Ralph Schmitt für das präzise Fehlerbeispiel.

  • Fehler issue244 behoben, indem ein spezieller Index für Parameter implementiert wurde, um nur Indizes für parametrisierte Test-IDs zu verwenden

  • Fehler issue287 behoben, indem alle Finalisierer ausgeführt, aber die Ausnahme vom ersten fehlerhaften Finalisierer gespeichert und erneut ausgelöst werden, sodass das Teardown trotzdem fehlgeschlagen wäre. Wir lösen die erste fehlerhafte Ausnahme erneut aus, da sie möglicherweise die Ursache für das Scheitern anderer Finalisierer ist.

  • Reihenfolge behoben, wenn mock.patch oder andere Standard-Decorator-Wrapper mit Testmethoden verwendet werden. Dies behebt issue346 und sollte bei zufälligen "xdist"-Sammelfehlern helfen. Danke an Ronny Pfannschmidt und Donald Stufft für die Hilfe bei der Isolierung.

  • Fehler issue357 behoben - Sonderfall für "-k"-Ausdrücke, um das Filtern mit einfachen Strings zu ermöglichen, die keine gültigen Python-Ausdrücke sind. Beispiele: "-k 1.3" passt zu allen Tests, die mit 1.3 parametrisiert sind. "-k None" filtert alle Tests, die "None" in ihrem Namen haben, und umgekehrt "-k 'not None'". Zuvor hätten diese Beispiele Syntaxfehler ausgelöst.

  • Fehler issue384 behoben, indem der Trial-Support-Code entfernt wurde, da die unittest-Kompatibilitätsverbesserungen es Trial ermöglichen, dies selbst zu handhaben

  • verhindert das Verstecken eines ImportError, wenn der Import eines Plugins einen solchen erzeugt. behebt issue375.

  • Fehler issue275 behoben - Erlaubt usefixtures und autouse-Fixtures für die Ausführung von doctest-Textdateien.

  • Fehler issue380 behoben, indem --resultlog nur noch auf longrepr statt auf das "reprcrash"-Attribut angewiesen wird, das nur manchmal existiert.

  • Behebt issue122: Erlaubt @pytest.fixture(params=iterator), indem frühzeitig in eine Liste expandiert wird.

  • pexpect-3.0 Kompatibilität für Pytest-eigene Tests behoben. (behebt issue386)

  • erlaubt verschachtelte parametrize-value-Marker, danke James Lan für den PR.

  • Unicode-Handling mit der neuen monkeypatch.setattr(import_path, value) API behoben. Danke Rob Dennis. Behebt issue371.

  • Unicode-Handling mit junitxml behoben, behebt issue368.

  • Im Assertions-Rewriting-Modus unter Python 2, Erkennung von Coding-Cookies behoben. Siehe issue #330.

  • macht "--runxfail" aus imperativen pytest.xfail-Aufrufen zu No-Ops (es neutralisierte bereits pytest.mark.xfail-Marker)

  • verbesserte Interaktionen zwischen pytest und pkg_resources: Der PEP302-konforme Lader AssertionRewritingHook registriert sich jetzt ordnungsgemäß bei setuptools/pkg_resources, damit die pkg_resources.resource_stream-Methode ordnungsgemäß funktioniert. Behebt issue366. Danke für die Untersuchungen und den vollständigen PR an Jason R. Coombs.

  • pytestconfig-Fixture ist jetzt sessions-scoped, da es dasselbe Objekt während des gesamten Testlaufs ist. Behebt issue370.

  • vermeidet einen überraschenden Fall von Marker-Fehlfunktionen/Verwechslungen

    @pytest.mark.some(lambda arg: ...)
    def test_function():
    

    würde nicht korrekt funktionieren, da pytest davon ausgeht, dass @pytest.mark.some eine zu dekorierende Funktion erhält. Wir erkennen jetzt zumindest, ob dieses Argument ein Lambda ist und somit das Beispiel funktioniert. Danke an Alex Gaynor für das Aufgreifen des Themas.

  • xfail einen Test auf pypy, der die falsche Kodierung/ASCII prüft (pypy gibt keinen Fehler aus). behebt issue385.

  • intern macht varnames() mit den __init__-Methoden von Klassen fertig, obwohl es derzeit von pytest selbst nicht benötigt wird. Behebt auch das Caching. Behebt issue376.

  • Fehler issue221 behoben - Import von Namespace-Paketen ohne __init__.py ordnungsgemäß behandeln.

  • interne FixtureRequest-Handhabung refaktoriert, um Monkeypatching zu vermeiden. Eine der positiven benutzerseitigen Auswirkungen ist, dass das "request"-Objekt jetzt in Closures verwendet werden kann.

  • Versionsvergleich in pytest.importskip(modname, minverstring) behoben

  • Fehler issue377 behoben, indem in den Nose-Compat-Dokumenten klargestellt wird, dass pytest die unittest-API nicht in den "plain"-Namensraum dupliziert.

  • verbose Berichterstattung für @mock'd Testfunktionen behoben