py.test 2.0.0: asserts++, unittest++, reporting++, config++, docs++¶
Willkommen zu pytest-2.0.0, einer großen neuen Version von „py.test“, dem schnellen und einfachen Python-Testwerkzeug. Es gibt viele neue Funktionen und Verbesserungen, siehe unten für eine Zusammenfassung und detaillierte Listen. Viel lange veralteter Code wurde entfernt, was zu einer viel kleineren und saubereren Implementierung führte. Sehen Sie sich die neuen Dokumente mit Beispielen hier an
Ein Hinweis zur Paketierung: pytest war bis Version py-1.3.4 Teil der „py“-Distribution, aber das hat sich jetzt geändert: pytest-2.0.0 enthält nur noch py.test-bezogenen Code und wird voraussichtlich abwärtskompatibel zu bestehendem Testcode sein. Wenn Sie pytest installieren möchten, geben Sie einfach eine der folgenden Optionen ein
pip install -U pytest
easy_install -U pytest
Vielen Dank an alle, die Fehler gemeldet und Fragen gestellt oder sich beschwert haben. Besonderer Dank gilt Floris Bruynooghe und Ronny Pfannschmidt für ihre großartigen Codebeiträge und vielen anderen für ihr Feedback und ihre Hilfe.
Beste Grüße, holger krekel
Neue Funktionen¶
neue Aufrufe über den Python-Interpreter und von Python aus
python -m pytest # on all pythons >= 2.5
oder aus einem Python-Programm
import pytest ; pytest.main(arglist, pluginlist)
siehe https://docs.pytest.de/en/stable/how-to/usage.html für Details.
neue und bessere Berichterstattung in Assert-Ausdrücken beim Vergleichen von Listen, Sequenzen oder Zeichenketten.
siehe https://docs.pytest.de/en/stable/how-to/assert.html#newreport
neue Konfiguration über ini-Dateien (setup.cfg oder tox.ini erkannt), zum Beispiel
[pytest] norecursedirs = .hg data* # don't ever recurse in such dirs addopts = -x --pyargs # add these command line options by default
siehe https://docs.pytest.de/en/stable/reference/customize.html
verbesserte Standard-unittest-Unterstützung. Im Allgemeinen sollte py.test jetzt besser in der Lage sein, benutzerdefinierte unittest.TestCases wie Twisted Trial oder Django-basierte TestCases auszuführen. Sie können jetzt auch die Tests eines installierten ‚unittest‘-Pakets mit py.test ausführen
py.test --pyargs unittest
neue Option „-q“, die die Ausführlichkeit reduziert und eine „Punkt“-Ausgabe im Stil von Nose/unittest anzeigt.
viele, viele, detailliertere Verbesserungen Details
Behebungen¶
Fehler 126 behoben – Einführung von py.test.set_trace() zum Nachverfolgen der Ausführung über PDB während der Testausführung, auch wenn die Erfassung läuft.
Fehler 124 behoben – Berichterstattung widerstandsfähiger gegen Tests, die Dateien auf Filedescriptor 1 (stdout) öffnen.
Fehler 109 behoben – Geschwister-conftest.py-Dateien werden nicht geladen. (und Verzeichnissammler können nicht mehr von einem conftest.py eines Verzeichnisses angepasst werden – dies muss mindestens eine Ebene höher geschehen).
Fehler 88 behoben (Finden benutzerdefinierter Testknoten über Kommandozeilenargument)
Fehler 93 behoben – stdout/stderr wird während des Imports von conftest.py erfasst
Bug behoben: unittest gesammelte Funktionen können jetzt auch „pytestmark“ auf Klassen-/Modulebene haben
Wichtige Hinweise¶
Die übliche Art, vor Version 2.0 py.test im Python-Code zu verwenden, war der Import von „py“ und dann z. B. „py.test.raises“ für die Hilfsfunktion. Dies bleibt gültig und es ist keine Stilllegung geplant. In den meisten Beispielen und internem Code finden Sie jedoch „import pytest“ und „pytest.raises“ als empfohlene Standardmethode.
pytest führt nun zuerst die Sammlung der vollständigen Testsuite durch, bevor es einen Test ausführt. Dies ändert beispielsweise die Semantik von Aufrufen von pytest_collectstart/pytest_collectreport. Einige Plugins müssen möglicherweise aktualisiert werden.
Das pytest-Paket besteht aus einem Kern von 400 LOC und etwa 20 eingebauten Plugins, die insgesamt etwa 5000 LOCs einschließlich Docstrings umfassen. Um fair zu sein, verwendet es auch generischen Code aus der „pylib“ und das neue „py“-Paket zur Unterstützung von Dateisystem und Introspektion/Codebearbeitung.
(Inkompatible) Entfernungen¶
py.test.config ist jetzt nur noch verfügbar, wenn Sie sich in einem Testlauf befinden.
die folgende (meist bereits veraltete) Funktionalität wurde entfernt
Entfernung der Unterstützung für Modul-/Klassen-/… Sammlungsknotendefinitionen in conftest.py-Dateien. Sie werden nichts Besonderes bewirken.
Entfernung der Unterstützung für den Aufruf der Prä-1.0-Sammlungs-API von „run()“ und „join“
Entfernung des Lesens von Optionswerten aus conftest.py-Dateien oder Umgebungsvariablen. Dies kann jetzt viel, viel besser und einfacher über den ini-Dateienmechanismus und insbesondere den Eintrag „addopts“ erfolgen.
Entfernung des Attributs „disabled“ in Testklassen. Verwenden Sie den Skip- und pytestmark-Mechanismus, um eine Testklasse zu überspringen oder xfail zu kennzeichnen.
py.test.collect.Directory existiert nicht mehr und es ist nicht möglich, ein eigenes „Directory“-Objekt bereitzustellen. Wenn Sie dies verwendet haben und nicht wissen, was zu tun ist, kontaktieren Sie uns. Wir werden etwas finden.
Beachten Sie, dass pytest_collect_directory() weiterhin aufgerufen wird, aber jeder Rückgabewert wird ignoriert. Dies ermöglicht die Beibehaltung von altem Code, der beispielsweise „py.test.skip()“ in collect() durchgeführt hat, um die Rekursion in Verzeichnisbäume zu verhindern, wenn eine bestimmte Abhängigkeit oder eine Befehlszeilenoption fehlt.
siehe Änderungsprotokoll für detailliertere Änderungen.