pytest-2.3: verbesserte Fixtures / bessere unittest-Integration¶
pytest-2.3 bringt viele wichtige Verbesserungen für das Management von Fixtures/Funcargs und parametrisiertes Testen in Python. Es ist jetzt einfacher, effizienter und vorhersehbarer, dieselben Tests mit unterschiedlichen Fixture-Instanzen erneut auszuführen. Außerdem können Sie den "Scope" von Fixtures direkt deklarieren, sodass abhängige Tests in Ihrer gesamten Testsuite mühelos Datenbanken oder andere teure Fixture-Objekte wiederverwenden können. Schließlich ist es für Fixture-Funktionen (früher bekannt als Funcarg-Fabriken) möglich, andere Fixtures zu verwenden, was ein vollständig modulares und wiederverwendbares Fixture-Design ermöglicht.
Detaillierte Informationen und Beispiele im Tutorial-Stil finden Sie unter
Darüber hinaus gibt es nun Unterstützung für die Verwendung von pytest-Fixtures/Funcargs mit unittest-ähnlichen Suiten. Beispiele finden Sie hier:
Außerdem sollten jetzt mehr unittest-Testsuiten mit pytest "einfach funktionieren".
Alle Änderungen sind abwärtskompatibel und Sie sollten in der Lage sein, Ihre Testsuiten und 3rd-Party-Plugins, die mit pytest-2.2.4 funktionierten, weiterhin auszuführen.
Wenn Sie sich für die genauen Gründe (einschließlich Beispielen) für die Entwicklung der pytest-2.3-Fixtures interessieren, konsultieren Sie bitte https://docs.pytest.de/en/stable/funcarg_compare.html
Allgemeine Informationen zur Installation und zum Einstieg finden Sie unter
Dokumentation und PDF-Zugang wie gewohnt unter
und weitere Details für diejenigen, die sich bereits mit pytest auskennen, finden Sie im CHANGELOG unten.
Besonderer Dank für diese Version geht an Floris Bruynooghe, Alex Okrushko Carl Meyer, Ronny Pfannschmidt, Benjamin Peterson und Alex Gaynor für ihre Hilfe bei der korrekten Implementierung und Integration der neuen Funktionen. Ronny und Floris halfen auch bei der Behebung einer Reihe von Fehlern, und noch mehr Leute halfen durch die Bereitstellung von Fehlerberichten.
Viel Spaß, holger krekel
Änderungen zwischen 2.2.4 und 2.3.0¶
Behebung von Issue 202 - bessere automatische Namen für parametrisierte Testfunktionen
Behebung von Issue 139 - Einführung von @pytest.fixture, das direkte Skoping und Parametrisierung von Funcarg-Fabriken ermöglicht. Einführung des neuen @pytest.setup-Markers, der das Schreiben von Setup-Funktionen ermöglicht, die Funcargs akzeptieren.
Behebung von Issue 198 - conftest-Fixtures wurden unter Windows 32 unter bestimmten Umständen mit verschachtelten Verzeichnisstrukturen aufgrund von Problemen bei der Pfadmanipulation nicht gefunden
Behebung von Issue 193: Überspringen von Testfunktionen, die mit leeren Parametersätzen parametrisiert wurden
Behebung von Kompatibilitätsproblemen mit Python 3.3, hauptsächlich Berichterstattungsteile, die zuvor von der Dictionary-Reihenfolge abhingen
Einführung einer Neuordnung von Tests nach Ressource und Parametrisierungs-Setup, die Vorrang vor der üblichen Dateireihenfolge hat
Behebung von Issue 185: Monkeypatching von time.time verursacht keinen Fehler mehr bei pytest
Behebung von Issue 172: Doppelte Aufrufe von mit @pytest.setup dekorierten setup_module-Funktionen
Behebung der Konstruktion des junitxml=path, sodass, wenn Tests das aktuelle Arbeitsverzeichnis ändern und der Pfad ein relativer Pfad ist, dieser korrekt aus dem ursprünglichen Arbeitsverzeichnis konstruiert wird.
Behebung des Beispiels „python setup.py test“, um eine ordnungsgemäße „errno“-Rückgabe zu bewirken
Behebung von Issue 165 - Behebung defekter Doc-Links und Hinweis auf Stackoverflow für FAQ
Erfassung von Unicode-Problemen beim Schreiben von Fehlerdarstellungen in das Terminal, um zu verhindern, dass die gesamte Sitzung abstürzt
Behebung von Verwechslungen zwischen xfail/skip: Ein skip-Mark oder ein imperatives pytest.skip hat nun Vorrang vor xfail-Markern, da wir den xfail/xpass-Status bei einem Skip nicht ermitteln können. Siehe auch: http://stackoverflow.com/questions/11105828/in-py-test-when-i-explicitly-skip-a-test-that-is-marked-as-xfail-how-can-i-get
Immer installierte 3rd-Party-Plugins im Header eines Testlaufs melden
Behebung von Issue 160: Ein fehlerhaftes Setup eines mit xfail markierten Tests sollte als xfail (nicht xpass) gemeldet werden
Behebung von Issue 128: Erfasste Ausgaben anzeigen, wenn capsys/capfd verwendet werden
Behebung von Issue 179: Abhängigkeitskette von Fabriken korrekt anzeigen
pluginmanager.register(...) löst nun ValueError aus, wenn das Plugin bereits registriert wurde oder der Name vergeben ist
Behebung von Issue 159: Verbesserung von https://docs.pytest.de/en/6.0.1/faq.html insbesondere in Bezug auf die "magische" Historie, Erwähnung von pytest-django, Trial und unittest-Integration.
request.keywords und node.keywords sind nun schreibbar. Alle abgeleiteten Sammelknoten sehen die Schlüsselwortwerte. Schlüsselwörter sind Wörterbücher, die Marker und andere Informationen enthalten.
Behebung von Issue 178: XML-Binäreschreibungen sind nun in py.xml.raw eingekapselt
Behebung von Issue 176: Die eingebaute AssertionError korrekt abfangen, auch wenn wir AssertionError auf Python-Ebene durch eine Unterklasse ersetzt haben
Fabrik-Erkennung schlägt nicht mehr mit magischen globalen aufrufbaren Objekten fehl, die kein sinnvolles __code__ Objekt bereitstellen (z.B. mock.call)
Behebung von Issue 182: testdir.inprocess_run berücksichtigt nun übergebene Plugins
- Behebung von Issue 188: Sicherstellen, dass sys.exc_info unter Python 2 gelöscht wird
vor dem Aufruf eines Tests
Behebung von Issue 191: Unterstützung für die unittest TestCase runTest-Methode hinzufügen
Behebung von Issue 156: monkeypatch behandelt klassenbasierte Deskriptoren korrekt
Verfeinerungen bei der Berichterstattung
pytest_report_header erhält nun ein „startdir“, sodass Sie startdir.bestrelpath(yourpath) verwenden können, um schöne relative Pfade anzuzeigen
Plugins erlauben die Implementierung von sowohl pytest_report_header als auch pytest_sessionstart (sessionstart wird zuerst aufgerufen).
die Zeile mit dem Grund für die Deselektion nicht anzeigen, wenn keine vorhanden ist
py.test -vv zeigt alle Assertionsvergleiche an, anstatt sie abzuschneiden