Changelog

Versionen folgen dem Semantic Versioning (<major>.<minor>.<patch>).

Rückwärtskompatible Änderungen (Breaking Changes) werden nur in Hauptversionen eingeführt, mit vorheriger Ankündigung im Abschnitt Deprecations der Releases.

pytest 9.0.1 (2025-11-12)

Fehlerbehebungen

  • #13895: Wiederherstellung der Unterstützung für das Überspringen von Tests mit raise unittest.SkipTest.

  • #13896: Das Terminal-Fortschritts-Plugin, das in pytest 9.0 hinzugefügt wurde, wird nun automatisch deaktiviert, wenn iTerm2 erkannt wird. Es erzeugte Desktop-Benachrichtigungen anstelle der gewünschten Funktionalität.

  • #13904: Korrektur des TOML-Typs der Verbositäts-Einstellungen in der API-Referenz von Nummer zu Zeichenkette.

  • #13910: Korrigiert UserWarning: Do not expect file_or_dir bei einigen früheren Punktversionen von Python 3.12 und 3.13.

Paketaktualisierungen und Hinweise für Downstream-Nutzer

  • #13933: Die tox-Konfiguration wurde angepasst, um sicherzustellen, dass die gewünschte Versionszeichenkette über die Umgebungsvariable SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST an die package_env übergeben werden kann, als Teil des Release-Prozesses – von @webknjaz.

Änderungen für Mitwirkende

  • #13891, #13942: Der CI/CD-Teil der Release-Automatisierung kann nun GitHub-Releases erstellen, ohne einen Git-Checkout auf der Festplatte zu benötigen – von @bluetech und @webknjaz.

  • #13933: Die tox-Konfiguration wurde angepasst, um sicherzustellen, dass die gewünschte Versionszeichenkette über die Umgebungsvariable SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST an die package_env übergeben werden kann, als Teil des Release-Prozesses – von @webknjaz.

pytest 9.0.0 (2025-11-05)

Neue Funktionen

  • #1367: **Unterstützung für Subtests** wurde hinzugefügt.

    Subtests sind eine Alternative zur Parametrisierung, nützlich in Situationen, in denen die Parametrisierungswerte nicht alle zur Sammelzeit bekannt sind.

    Beispiel

    def contains_docstring(p: Path) -> bool:
        """Return True if the given Python file contains a top-level docstring."""
        ...
    
    
    def test_py_files_contain_docstring(subtests: pytest.Subtests) -> None:
        for path in Path.cwd().glob("*.py"):
            with subtests.test(path=str(path)):
                assert contains_docstring(path)
    

    Jeder Assertionsfehler oder Fehler wird vom Kontextmanager abgefangen und einzeln gemeldet, was ein klares Bild aller Dateien liefert, denen ein Docstring fehlt.

    Zusätzlich wird nun auch unittest.TestCase.subTest() unterstützt.

    Diese Funktion wurde ursprünglich als separates Plugin in pytest-subtests implementiert, ist aber seitdem in den Kern integriert worden.

    Hinweis

    Diese Funktion ist experimentell und wird sich wahrscheinlich in zukünftigen Versionen weiterentwickeln. Damit meinen wir, dass wir möglicherweise ändern, wie Subtests bei Fehlern gemeldet werden, aber die Funktionalität und wie sie verwendet wird, sind stabil.

  • #13743: Unterstützung für **native TOML-Konfigurationsdateien** hinzugefügt.

    Während pytest seit Version 6 Konfigurationen in pyproject.toml-Dateien unter [tool.pytest.ini_options] unterstützt, tut es dies im "INI-Kompatibilitätsmodus", bei dem alle Konfigurationswerte als Zeichenketten oder Listen von Zeichenketten behandelt werden. Jetzt unterstützt pytest das native TOML-Datenmodell.

    In pyproject.toml befindet sich die native TOML-Konfiguration unter der Tabelle [tool.pytest].

    # pyproject.toml
    [tool.pytest]
    minversion = "9.0"
    addopts = ["-ra", "-q"]
    testpaths = [
        "tests",
        "integration",
    ]
    

    Die Tabelle [tool.pytest.ini_options] wird weiterhin unterstützt, aber beide Tabellen können nicht gleichzeitig verwendet werden.

    Wenn Sie eine separate Konfigurationsdatei bevorzugen oder pyproject.toml nicht verwenden, können Sie pytest.toml oder .pytest.toml verwenden.

    # pytest.toml or .pytest.toml
    [pytest]
    minversion = "9.0"
    addopts = ["-ra", "-q"]
    testpaths = [
        "tests",
        "integration",
    ]
    

    Die Dokumentation zeigt nun (manchmal) Konfigurationsausschnitte in den Formaten TOML und INI in einer tabbedierten Benutzeroberfläche.

    Siehe Konfigurationsdateiformate für vollständige Details.

  • #13823: Ein **"Strict Mode"** hinzugefügt, der durch die Konfigurationsoption strict aktiviert wird.

    Wenn auf true gesetzt, aktiviert die Option strict derzeit:

    Die einzelnen Strictness-Optionen können explizit gesetzt werden, um die globale Einstellung strict zu überschreiben.

    Das zuvor veraltete Befehlszeilen-Flag --strict aktiviert nun den Strict Mode.

    Wenn pytest in Zukunft neue Strictness-Optionen hinzufügt, werden diese ebenfalls im Strict Mode aktiviert. Daher sollten Sie den Strict Mode nur aktivieren, wenn Sie eine angepinnte/gesperrte Version von pytest verwenden oder wenn Sie proaktiv neue Strictness-Optionen übernehmen möchten, sobald sie hinzugefügt werden.

    Weitere Informationen finden Sie unter Verwendung des Strict Mode von pytest.

  • #13737: Die Konfigurationsoption strict_parametrization_ids hinzugefügt.

    Wenn diese Option gesetzt ist, gibt pytest einen Fehler aus, wenn nicht eindeutige Parameter-Set-IDs erkannt werden, anstatt die IDs automatisch eindeutig zu machen, indem 0, 1, … hinzugefügt werden. Dies kann besonders nützlich sein, um unbeabsichtigte Duplikate zu erkennen.

  • #13072: Unterstützung für die Anzeige des Fortschritts der Test-Sitzung **im Terminal-Tab** mit der OSC 9;4; ANSI-Sequenz hinzugefügt. Wenn pytest in einem unterstützten Terminal-Emulator wie ConEmu, Gnome Terminal, Ptyxis, Windows Terminal, Kitty oder Ghostty ausgeführt wird, sehen Sie den Fortschritt im Terminal-Tab oder Fenster, was es Ihnen ermöglicht, den Fortschritt von pytest auf einen Blick zu verfolgen.

    Diese Funktion ist automatisch aktiviert, wenn sie in einem TTY ausgeführt wird. Sie ist als internes Plugin implementiert. Bei Bedarf kann sie wie folgt deaktiviert werden: - Auf Benutzerebene mit -p no:terminalprogress auf der Befehlszeile oder über eine Umgebungsvariable PYTEST_ADDOPTS='-p no:terminalprogress'. - Auf Projektkonfigurationsebene mit addopts = "-p no:terminalprogress".

  • #478: Unterstützung für PEP420 (implizite Namensraum-Pakete) als --pyargs-Ziel, wenn consider_namespace_packages in der Konfiguration auf true gesetzt ist.

    Zuvor beeinflusste diese Option nur Paketimporte, jetzt betrifft sie auch die Testsuche.

  • #13678: Eine neue Konfigurationsoption faulthandler_exit_on_timeout hinzugefügt, die standardmäßig auf "false" gesetzt ist, damit faulthandler den pytest-Prozess nach einem Timeout im Falle eines Deadlocks unterbricht.

    Zuvor hat ein faulthandler-Timeout nur den Traceback aller Threads nach stderr ausgegeben, aber den pytest-Prozess nicht unterbrochen.

    – von @ogrisel.

  • #13829: Unterstützung für Konfigurationsoptions-Aliase über den Parameter aliases in Parser.addini() hinzugefügt.

    Plugins können nun alternative Namen für Konfigurationsoptionen registrieren, was mehr Flexibilität bei der Benennung von Konfigurationen ermöglicht und die Abwärtskompatibilität beim Umbenennen von Optionen unterstützt. Der kanonische Name hat immer Vorrang, wenn sowohl der kanonische Name als auch ein Alias in der Konfigurationsdatei angegeben sind.

Verbesserungen bestehender Funktionalität

  • #13330: Wenn die pytest-Konfiguration auf mehr als einer Datei verteilt ist (z. B. eine pytest.ini-Datei und pyproject.toml mit einer Tabelle [tool.pytest.ini_options]), wird nun eine Warnung ausgegeben, um dem Benutzer klarer zu machen, dass nur eine davon tatsächlich verwendet wird.

    – von @sgaist

  • #13574: Das einzelne Argument --version lädt nicht mehr die gesamte Plugin-Infrastruktur, was es schneller und zuverlässiger macht, nur die pytest-Version anzuzeigen.

    Das zweimalige Übergeben von --version (z. B. pytest --version --version) behält das ursprüngliche Verhalten bei und zeigt sowohl die pytest-Version als auch Plugin-Informationen an.

    Hinweis

    Da --version nun frühzeitig verarbeitet wird, wirkt es nur, wenn es direkt über die Befehlszeile übergeben wird. Es funktioniert nicht, wenn es über andere Mechanismen gesetzt wird, wie z. B. PYTEST_ADDOPTS oder addopts.

  • #13823: strict_xfail als Alias für die Option xfail_strict, strict_config als Alias für das Flag --strict-config und strict_markers als Alias für das Flag --strict-markers hinzugefügt. Dies sorgt dafür, dass alle Strictness-Optionen konsistent Konfigurationsoptionen mit dem Präfix strict_ haben.

  • #13700: --junitxml gibt die Zusammenfassung generated xml file am Ende der pytest-Sitzung nicht mehr aus, wenn --quiet gegeben wird.

  • #13732: Zuvor, beim Filtern von Warnungen, schlug pytest fehl, wenn der Filter auf eine Klasse verwies, die nicht importiert werden konnte. Nun wird nur noch eine Meldung ausgegeben, die das Problem anzeigt.

  • #13859: Klarere Fehlermeldung für pytest.raises(), wenn ein Regex match fehlschlägt.

  • #13861: Bessere Satzstruktur in der erwarteten Fehlermeldung eines Tests. Zuvor war die Fehlermeldung "expected exception must be <expected>, but got <actual>". Nun lautet sie "Expected <expected>, but got <actual>".

Entfernungen und rückwärtskompatible Änderungen

  • #12083: Ein Fehler wurde behoben, bei dem eine Anweisung wie pytest a/ a/b dazu führte, dass nur Tests aus a/b ausgeführt wurden und nicht andere Tests unter a/.

    Die Korrektur beinhaltet einige Breaking Changes, wie solche überlappenden Argumente und Duplikate behandelt werden.

    1. pytest a/b a/ oder pytest a/ a/b sind äquivalent zu pytest a; wenn ein Argument ein anderes Argument überlappt, bleibt nur das Präfix erhalten.

    2. pytest x.py x.py ist äquivalent zu pytest x.py; zuvor wurde eine solche Anweisung als expliziter Aufruf zur doppelten Ausführung der Tests aus der Datei interpretiert.

    Wenn Sie sich auf dieses Verhalten verlassen, erwägen Sie die Verwendung von –keep-duplicates, das sein bestehendes Verhalten (einschließlich des Fehlers) beibehält.

  • #13719: Die Unterstützung für Python 3.9 wird nach dessen End-of-Life eingestellt.

  • #13766: Zuvor ging pytest davon aus, dass es in einer CI/CD-Umgebung läuft, wenn eine der Umgebungsvariablen $CI oder $BUILD_NUMBER definiert war. Jetzt wird der CI-Modus nur noch aktiviert, wenn mindestens eine dieser Variablen definiert und auf einen nicht-leeren Wert gesetzt ist.

  • #13779: PytestRemovedIn9Warning Deprecation Warnings sind nun standardmäßig Fehler.

    Gemäß unserem Plan, veraltete Funktionen mit möglichst geringen Störungen zu entfernen, generieren alle Warnungen vom Typ PytestRemovedIn9Warning standardmäßig Fehler anstelle von Warnmeldungen.

    Die betroffenen Funktionen werden effektiv in pytest 9.1 entfernt. Bitte konsultieren Sie den Abschnitt Deprecations and Removals in der Dokumentation, um Anweisungen zur Aktualisierung bestehenden Codes zu erhalten.

    In der pytest 9.0.X Serie ist es möglich, die Fehler als Übergangsmaßnahme wieder in Warnungen umzuwandeln, indem Sie dies zu Ihrer pytest.ini Datei hinzufügen:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestRemovedIn9Warning
    

    Dies wird jedoch aufhören zu funktionieren, wenn pytest 9.1 veröffentlicht wird.

    Wenn Sie Bedenken hinsichtlich der Entfernung einer bestimmten Funktion haben, fügen Sie bitte einen Kommentar zu #13779 hinzu.

Deprecations (Entfernung in der nächsten Hauptversion)

Bugfixes

  • #13445: Die Typ-Annotationen von pytest.skip() und ähnlichen Funktionen wurden spezifikationskonformer gestaltet, damit sie mit mehr Typ-Checkern funktionieren.

  • #13537: Ein Fehler wurde behoben, bei dem ExceptionGroup mit nur Skipped-Exceptions im Teardown nicht korrekt behandelt wurde und als Fehler angezeigt wurde.

  • #13598: Mögliche Verwirrung bei der Sammlung unter Windows, wenn Kurzpfade und Symlinks beteiligt waren, wurde behoben.

  • #13716: Ein Fehler wurde behoben, bei dem eine unsinnige Aufrufsyntax wie pytest x.py[a] (eine Datei kann nicht parametrisiert werden) stillschweigend als pytest x.py behandelt wurde. Dies ist nun ein Nutzungsfehler.

  • #13722: Eine irreführende Fehlermeldung bei Assertionsfehlern wurde behoben, wenn pytest.approx() auf Abbildungen mit unterschiedlichen Längen angewendet wurde.

  • #13773: Die Berechnung der statischen Fixture-Closures wurde korrigiert, um transitive Abhängigkeiten, die von überschriebenen Fixtures angefordert werden, ordnungsgemäß zu berücksichtigen.

  • #13816: pytest.approx() gibt nun eine klarere Fehlermeldung aus, wenn Abbildungen mit unterschiedlichen Schlüsseln verglichen werden.

  • #13849: Versteckte .pytest.ini-Dateien werden nun als Konfigurationsdatei erkannt, auch wenn sie leer sind. Dies war eine Inkonsistenz mit nicht-versteckten pytest.ini.

  • #13865: Behebung von Problemen mit --show-capture zusammen mit --tb=line.

  • #13522: pytester im Subprozessmodus ignorierte alle :attr`pytester.plugins <pytest.Pytester.plugins>` außer dem ersten.

    Behebung eines Fehlers, bei dem pytester im Subprozessmodus nicht-str pytester.plugins stillschweigend ignorierte. Nun wird stattdessen ein Fehler ausgegeben. Wenn Sie davon betroffen sind, geben Sie das Plugin namentlich an oder wechseln Sie die betroffenen Tests explizit zur Verwendung von pytester.runpytest_inprocess.

Verpackungsaktualisierungen und Hinweise für Downstreams

  • #13791: Die Mindestanforderungen für iniconfig und packaging wurden auf 1.0.1 bzw. 22.0.0 erhöht.

Änderungen für Mitwirkende

  • #12244: Behebung von Self-Test-Fehlern bei TERM=dumb.

  • #12474: Geplanter GitHub Action Workflow wurde hinzugefügt, um Sphinx-Linkchecks in der Repository-Dokumentation auszuführen.

  • #13621: Die Testsuite von pytest handhabt nun das Hängenbleiben des lsof-Befehls (z.B. aufgrund unerreichbarer Netzwerkdateisysteme), wobei die betroffenen Selftests nach 10 Sekunden übersprungen werden.

  • #13638: Behebung des veralteten Befehls gh pr new im Skript scripts/prepare-release-pr.py. Das Skript verwendet nun gh pr create, was mit GitHub CLI v2.0+ kompatibel ist.

  • #13695: stdout und stderr in Pytester.run werden nun geleert, um abgeschnittene Ausgaben in test_faulthandler.py::test_timeout auf CI zu vermeiden – von @ogrisel.

  • #13771: Überspringt test_do_not_collect_symlink_siblings auf Windows-Umgebungen ohne Symlink-Unterstützung, um Fehlalarme zu vermeiden.

  • #13841: tox>=4 ist nun erforderlich, wenn Sie zu pytest beitragen.

  • #13625: Fehlende Docstrings für die Funktionen pytest_addoption(), pytest_configure() und cacheshow() in cacheprovider.py hinzugefügt.

Verschiedene interne Änderungen

  • #13830: Konfigurationsüberschreibungen (-o/--override-ini) werden nun beim Start verarbeitet und nicht erst während config.getini().

pytest 8.4.2 (2025-09-03)

Bugfixes

  • #13478: Ein Absturz bei der Verwendung von console_output_style mit times und einem übersprungenen Modul wurde behoben.

  • #13530: Ein Absturz bei der Verwendung von pytest.approx() und decimal.Decimal-Instanzen mit gesetzter decimal.FloatOperation-Falle wurde behoben.

  • #13549: Typ-Annotationen in Python 3.14 werden nun nicht mehr ausgewertet, wenn Funktion-Signaturen inspiziert werden.

    Dies verhindert Abstürze während der Modulsammlung, wenn Module nicht explizit from __future__ import annotations verwenden und Typen für Annotationen innerhalb eines if TYPE_CHECKING:-Blocks importieren.

  • #13559: Fehlende int und float Varianten wurden der Literal Typannotation des type Parameters in pytest.Parser.addini() hinzugefügt.

  • #13563: pytest.approx() importiert nun nur noch numpy, wenn NumPy bereits in sys.modules vorhanden ist. Dies behebt das Verhalten des bedingungslosen Imports, das in 8.4.0 eingeführt wurde.

Verbesserte Dokumentation

  • #13577: Klärung, dass pytest_generate_tests in Testmodulen/Klassen entdeckt wird; andere Hooks müssen in conftest.py oder Plugins liegen.

Änderungen für Mitwirkende

  • #13480: Self-testing: einige Testfehler bei der Ausführung mit -Wdefault oder ähnlichen Überschreibungen behoben.

  • #13547: Self-testing: Korrektur der erwarteten Meldung für test_doctest_unexpected_exception in Python 3.14.

  • #13684: Die Testsuite von pytest wurde unempfindlich gegenüber der Anwesenheit der CI-Umgebungsvariablen gemacht – von @ogrisel.

pytest 8.4.1 (2025-06-17)

Bugfixes

  • #13461: Korrektur von _pytest.terminal.TerminalReporter.isatty zur Unterstützung der Aufrufe als Methode. Zuvor war es nur ein boolescher Wert, der korrekten Code bei Verwendung von -o log_cli=true brechen konnte.

  • #13477: Wiedereinführung von pytest.PytestReturnNotNoneWarning, die versehentlich in pytest 8.4 entfernt wurde.

    Diese Warnung wird ausgegeben, wenn eine Testfunktion einen anderen Wert als None zurückgibt, was oft ein Fehler von Anfängern ist.

    Weitere Informationen finden Sie unter Rückgabe eines Nicht-None-Werts in Testfunktionen.

  • #13497: Kompatibilität mit Twisted 25+ behoben.

Verbesserte Dokumentation

  • #13492: Veraltete Warnung, dass faulthandler unter Windows nicht funktioniert, behoben.

pytest 8.4.0 (2025-06-02)

Entfernungen und rückwärtsinkompatible Änderungen

  • #11372: Asynchrone Tests führen nun zu einem Fehler (statt Warnung+Überspringen), wenn kein geeignetes Plugin installiert ist.

  • : Tests führen nun zu einem Fehler (statt einer Warnung), wenn sie einen anderen Wert als None zurückgeben.

  • #12874: Wir haben die Unterstützung für Python 3.8 nach dessen End-of-Life (2024-10-07) eingestellt.

  • #12960: Testfunktionen, die einen Yield enthalten, verursachen nun einen expliziten Fehler. Sie wurden seit pytest 4.0 nicht mehr ausgeführt und wurden zuvor als erwarteter Fehler und mit Deprecation Warning markiert.

    Weitere Informationen finden Sie in der Dokumentation.

Veraltete Funktionen (Entfernung in der nächsten Hauptversion)

  • #10839: Das Anfordern eines asynchronen Fixtures ohne einen Hook pytest_fixture_setup, der ihn auflöst, löst nun eine DeprecationWarning aus. Dies geschieht meistens, wenn ein synchroner Test ein asynchrones Fixture anfordert. Dies sollte für die Mehrheit der Benutzer mit asynchronen Tests oder Fixtures, die asynchrone pytest-Plugins verwenden, keine Auswirkungen haben, kann aber nicht standardmäßige Hook-Setups oder autouse=True beeinträchtigen. Anleitungen zur Umgehung dieser Warnung finden Sie unter Synchroner Test, der von einem asynchronen Fixture abhängt.

Neue Funktionen

  • #11538: pytest.RaisesGroup wurde als Äquivalent zu pytest.raises() für die Erwartung von ExceptionGroup hinzugefügt. pytest.RaisesExc wurde ebenfalls hinzugefügt, was nun die Logik hinter pytest.raises() ist und als Parameter für pytest.RaisesGroup verwendet wird. RaisesGroup bietet die Möglichkeit, mehrere verschiedene erwartete Ausnahmen anzugeben, die Struktur verschachtelter Ausnahmegruppen und Flags zur Emulation von except*. Weitere Informationen finden Sie unter Assertions zu erwarteten Ausnahmegruppen und in den Docstrings.

  • #12081: capteesys wurde hinzugefügt, um Ausgaben zu erfassen UND sie an den nächsten Handler weiterzuleiten, der von --capture= gesetzt wird.

  • #12504: pytest.mark.xfail() akzeptiert nun pytest.RaisesGroup für den Parameter raises, wenn Sie eine Ausnahmegruppe erwarten. Sie können auch ein pytest.RaisesExc übergeben, wenn Sie beispielsweise den Parameter check verwenden möchten.

  • #12713: Neue Option --force-short-summary, um die komprimierte Zusammenfassungsausgabe unabhängig vom Ausführlichkeitsgrad zu erzwingen.

    Dies ermöglicht es Benutzern, die komprimierte Zusammenfassung der Fehler für eine schnelle Referenz in Logdateien von Job-Ausgaben weiterhin anzuzeigen, was besonders nützlich ist, wenn die nicht komprimierte Ausgabe sehr ausführlich ist.

  • #12749: Pytest sammelt traditionell Klassen/Funktionen im Namensraum des Testmoduls, auch wenn sie aus einer anderen Datei importiert werden.

    Zum Beispiel

    # contents of src/domain.py
    class Testament: ...
    
    
    # contents of tests/test_testament.py
    from domain import Testament
    
    
    def test_testament(): ...
    

    In diesem Szenario sammelt pytest mit den Standardoptionen die Klasse Testament aus tests/test_testament.py, da sie mit Test beginnt, obwohl es sich in diesem Fall um eine Produktionsklasse handelt, die in den Namensraum des Testmoduls importiert wird.

    Dieses Verhalten kann nun durch Setzen der neuen Konfigurationsoption collect_imported_tests auf false verhindert werden, wodurch pytest Klassen/Funktionen aus Testdateien **nur** sammelt, wenn sie in dieser Datei definiert sind.

    – von @FreerGit

  • #12765: Schwellenwerte für die Auslösung von Snippet-Kürzungen können nun mit truncation_limit_lines und truncation_limit_chars eingestellt werden.

    Weitere Informationen finden Sie unter Anpassen der Kürzungsgrenzen.

  • #13125: console_output_style unterstützt nun times, um die Ausführungszeit jedes Tests anzuzeigen.

  • #13192: pytest.raises() löst nun eine Warnung aus, wenn ein leerer String an match übergeben wird, da dies mit jedem Wert übereinstimmt. Verwenden Sie match="^$", wenn Sie prüfen möchten, ob eine Ausnahme keine Nachricht hat.

  • #13192: pytest.raises() gibt nun eine hilfreiche String-Differenz aus, wenn die Übereinstimmung fehlschlägt und der match-Parameter ^ und $ hat und ansonsten maskiert ist.

  • #13192: Sie können nun with pytest.raises(check=fn): übergeben, wobei fn eine Funktion ist, die eine ausgelöste Ausnahme entgegennimmt und einen booleschen Wert zurückgibt. Der Aufruf raises schlägt fehl, wenn keine Ausnahme ausgelöst wurde (wie üblich), ist erfolgreich, wenn eine Ausnahme ausgelöst wird und fn True zurückgibt (ebenso wie match und die Typenübereinstimmung, falls angegeben, die zuvor geprüft werden), und gibt die Ausnahme weiter, wenn fn False zurückgibt (was wahrscheinlich auch den Test fehlschlagen lässt).

  • #13228: pytest.HIDDEN_PARAM kann nun in id von pytest.param() oder in ids von Metafunc.parametrize verwendet werden. Es verbirgt den Parameter-Set vom Testnamen.

  • #13253: Neues Flag: –disable-plugin-autoload, das als Alternative zu PYTEST_DISABLE_PLUGIN_AUTOLOAD funktioniert, wenn das Setzen von Umgebungsvariablen unpraktisch ist; und ermöglicht das Setzen in Konfigurationsdateien mit addopts.

Verbesserungen an bestehender Funktionalität

  • #10224: Die Traceback-Stile short und long von pytest (Anpassen der Python-Traceback-Ausgabe) unterstützen nun teilweise PEP 657 und zeigen spezifische Codeabschnitte im Traceback an.

    ================================= FAILURES =================================
    _______________________ test_gets_correct_tracebacks _______________________
    
    test_tracebacks.py:12: in test_gets_correct_tracebacks
        assert manhattan_distance(p1, p2) == 1
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    test_tracebacks.py:6: in manhattan_distance
        return abs(point_1.x - point_2.x) + abs(point_1.y - point_2.y)
                               ^^^^^^^^^
    E   AttributeError: 'NoneType' object has no attribute 'x'
    

    – von @ammaraskar

  • #11118: pythonpath konfiguriert nun $PYTHONPATH früher als zuvor während des Initialisierungsprozesses, was nun auch Plugins betrifft, die über die Befehlszeilenoption -p geladen werden.

    – von @millerdev

  • #11381: Der Parameter type der Methode parser.addini akzeptiert nun die Parameter "int" und "float", was die Parsierung von Konfigurationswerten in der Konfigurationsdatei erleichtert.

    Beispiel

    def pytest_addoption(parser):
        parser.addini("int_value", type="int", default=2, help="my int value")
        parser.addini("float_value", type="float", default=4.2, help="my float value")
    

    Die Datei pytest.ini

    [pytest]
    int_value = 3
    float_value = 5.4
    
  • #11525: Fixtures werden nun klar als „Fixture-Objekt“ in der Ausgabe dargestellt, nicht mehr als normale Funktion wie zuvor, was es Anfängern erleichtert, Fehler wie das Referenzieren eines Fixtures, das im selben Modul deklariert, aber nicht in der Testfunktion angefordert wurde, zu erkennen.

    – von @the-compiler und @glyphack

  • #12426: Es wird nun eine Warnung ausgegeben, wenn pytest.mark.usefixtures ohne Angabe von Fixtures verwendet wird. Zuvor wurden leere usefixtures-Marker stillschweigend ignoriert.

  • #12707: Ausnahmeketten können in Python 3.13+ im Pdb durchwandert werden.

  • #12736: Das Wurzelelement testsuites des von pytest generierten junit-xml erhielt ein neues Attribut name mit dem festen Wert "pytest tests".

    Dieses Attribut ist Teil vieler junit-xml-Spezifikationen und gehört sogar zur junit-10.xsd-Spezifikation, auf der die Implementierung von pytest basiert.

  • #12943: Wenn ein Test mit einer Ausnahmegruppe mit einer einzelnen Ausnahme fehlschlägt, wird die enthaltene Ausnahme nun in der Kurzinfo des Tests angezeigt.

  • #12958: Eine Reihe von Verbesserungen an nicht aufhebbaren Ausnahmen

    • Der Hook für nicht aufhebbare Ausnahmen wird so früh wie möglich gesetzt und so spät wie möglich aufgehoben, um die größtmögliche Anzahl von nicht aufhebbaren Ausnahmen zu erfassen.

    • Der Garbage Collector wird kurz vor dem Aufheben des Hooks für nicht aufhebbare Ausnahmen aufgerufen, um nachzügelnde Ausnahmen zu sammeln.

    • Mehrere nicht aufhebbare Ausnahmen pro Testphase erfassen.

    • Den tracemalloc-Allokations-Traceback (falls verfügbar) melden.

    • Verwenden Sie keinen generatorbasierten Hook, um StopIteration bei Testfehlern zu behandeln.

    • Die nicht aufhebbare Ausnahme als Ursache für die Ausnahme pytest.PytestUnraisableExceptionWarning melden, falls diese ausgelöst wird.

    • Berechnen Sie die repr des nicht aufhebbaren Objekts im Hook für nicht aufhebbare Ausnahmen, damit Sie die aktuellsten Informationen erhalten, falls verfügbar, und die Wiederherstellung des Objekts erleichtern.

  • #13010: pytest.approx() kann nun Sammlungen vergleichen, die gemischte Zahlen und Nicht-Zahlen enthalten.

  • #13016: Eine Reihe von Verbesserungen an Thread-Ausnahmen

    • Der excepthook wird so früh wie möglich gesetzt und so spät wie möglich aufgehoben, um die größtmögliche Anzahl von unbehandelten Ausnahmen von Threads zu erfassen.

    • Mehrere Thread-Ausnahmen pro Testphase erfassen.

    • Den tracemalloc-Allokations-Traceback (falls verfügbar) melden.

    • Verwenden Sie keinen generatorbasierten Hook, um StopIteration bei Testfehlern zu behandeln.

    • Die Thread-Ausnahme als Ursache für die Ausnahme pytest.PytestUnhandledThreadExceptionWarning melden, falls diese ausgelöst wird.

    • Extrahieren Sie den name des Thread-Objekts im excepthook, was bei der Wiederherstellung des Threads helfen sollte.

  • #13031: Ein leeres Parameter-Set wie in pytest.mark.parametrize([], ids=idfunc) löst keinen Aufruf von idfunc mit internen Objekten mehr aus.

  • #13115: Ermöglicht die Übergabe von ExceptionGroup[Exception] und BaseExceptionGroup[BaseException] an pytest.raises, um die vollständige Typisierung bei ExceptionInfo beizubehalten

    with pytest.raises(ExceptionGroup[Exception]) as exc_info:
        some_function()
    

    Parametrisierung mit anderen Ausnahmetypen bleibt ein Fehler - wir prüfen nicht die Typen von Kind-Ausnahmen und erlauben daher keinen Code, der so aussieht, als ob wir es tun.

  • #13122: Der Modus --stepwise erhielt eine Reihe von Verbesserungen

    • Er vergisst den letzten fehlgeschlagenen Test nicht mehr, falls pytest später ohne das Flag ausgeführt wird.

      Dies ermöglicht den folgenden Workflow

      1. Führen Sie pytest mit --stepwise aus, pytest stoppt dann beim ersten fehlgeschlagenen Test;

      2. Aktualisieren Sie den Code iterativ und führen Sie den Test isoliert aus, ohne das Flag --stepwise (z. B. in einer IDE), bis er behoben ist.

      3. Führen Sie pytest erneut mit --stepwise aus. Pytest wird dann vom zuvor fehlgeschlagenen Test fortgesetzt und, wenn dieser erfolgreich ist, mit den nächsten Tests fortgefahren.

      Zuvor begann pytest in Schritt 3 von vorne und vergaß den zuvor fehlgeschlagenen Test.

      Diese Änderung kann jedoch zu Problemen führen, wenn der --stepwise-Modus über einen längeren Zeitraum verwendet wird, da der Zustand veraltet sein könnte. Daher wird der interne Zustand automatisch zurückgesetzt, falls sich die Testsuite ändert (derzeit werden nur die Anzahl der Tests berücksichtigt, dies kann in Zukunft geändert/verbessert werden).

    • Neues Flag --stepwise-reset/--sw-reset, das es dem Benutzer ermöglicht, den schrittweisen Zustand explizit zurückzusetzen und den Workflow von vorne zu starten.

  • #13308: Offizielle Unterstützung für Python 3.14 hinzugefügt.

  • #13380: Behoben: ExceptionGroup-Traceback-Filterung, um Pytest-Interne auszuschließen.

  • #13415: Die Autorenmetadaten des BibTex-Beispiels sind jetzt korrekt formatiert, wobei Nachnamen den Vornamen folgen. Ein Beispiel für BibLaTex wurde hinzugefügt. BibTex- und BibLaTex-Beispiele weisen nun deutlich darauf hin, dass die zitierten Elemente Software sind.

    – von @willynilly

  • #13420: Verbesserte Leistung der Testsammlung durch Optimierung der Pfadauflösung in FSCollector.

  • #13457: Die Fehlermeldung über doppelte Parametrisierung zeigt keine interne Stack-Trace mehr an.

  • #4112: Die Verwendung von pytest.mark.usefixtures auf pytest.param() löst nun einen Fehler aus, anstatt stillschweigend nichts zu tun.

  • #5473: Ersetzt : durch ; in der Warnmeldung zur Assertion-Rewrite, damit sie mit Standard-Python-Warnfiltern gefiltert werden kann, bevor pytest.main() aufgerufen wird.

  • #6985: Verbessert pytest.approx() zur besseren Lesbarkeit von Wertebereichen und Toleranzen zwischen 0,001 und 1000.
    • Die Methode repr liefert nun klarere Ausgaben für Werte innerhalb dieser Bereiche, was die Interpretation der Ergebnisse erleichtert.

    • Zuvor wurde die Ausgabe für diese Werte- und Toleranzbereiche in wissenschaftlicher Notation angezeigt (z. B. 42 ± 1.0e+00). Die aktualisierte Methode stellt nun die Toleranz zur besseren Lesbarkeit als Dezimalzahl dar (z. B. 42 ± 1).

      Beispiel

      Vorherige Ausgabe

      >>> pytest.approx(42, abs=1)
      42 ± 1.0e+00
      

      Aktuelle Ausgabe

      >>> pytest.approx(42, abs=1)
      42 ± 1
      

    – von @fazeelghafoor

  • #7683: Die zuvor optionale Abhängigkeit pygments ist nun erforderlich, wodurch die Ausgabe immer quellcode-hervorgehoben wird (sofern nicht über die CLI-Option --code-highlight=no deaktiviert).

Fehlerbehebungen

  • #10404: Warnungsfilter aus Konfiguration/CLI so früh wie möglich anwenden und so spät wie möglich rückgängig machen, damit Warnungen als Fehler während des gesamten Pytest-Laufs gesammelt werden und bevor die Hooks für nicht auslösbare und Thread-Ausnahmen entfernt werden.

    Dies ermöglicht es sehr späten Warnungen und nicht auslösbaren/Thread-Ausnahmen, die Testsuite fehlschlagen zu lassen.

    Dies ändert auch die Warnung, die das lsof-Plugin ausgibt, von PytestWarning zu der neuen Warnung PytestFDWarning, damit sie leichter gefiltert werden kann.

  • #11067: Der Testbericht ist nun konsistent, unabhängig davon, ob der Test über pytest.mark.xfail oder pytest.fail() xfailed wurde.

    Zuvor hatten Tests, die mit dem Marker xfailed wurden, den String "reason: " vor der Nachricht, während die, die mit der Funktion xfailed wurden, dies nicht hatten. Das Präfix wurde entfernt.

  • #12008: In #11220 wurde durch eine Änderung der Indexzuweisung für direkte Parameter eine unbeabsichtigte Reihenfolgeänderung eingeführt. Genauer gesagt, vor dieser Änderung wurden die Indizes direkter Parameter zu den CallSpecs von Metafunc nach allen Parametrisierungen zugewiesen. Jetzt wird diese Änderung rückgängig gemacht.

  • #12863: Behoben: Anwenden von Markern, einschließlich pytest.mark.parametrize, wenn sie über @staticmethod oder @classmethod platziert werden.

  • #12929: StopIteration von Testfällen, Setup und Teardown korrekt behandeln.

  • #12938: Behoben: Das Argument --durations-min wurde nicht berücksichtigt, wenn -vv verwendet wurde.

  • #12946: Behoben: Fehlende Hilfe für pdb-Befehle, die von pytest umschlossen wurden – von @adamchainz.

  • #12981: Verhindert, dass Ausnahmen in pytest.Config.add_cleanup()-Callbacks weitere Bereinigungen verhindern.

  • #13047: Wiederhergestellt: pytest.approx()-Behandlung von Gleichheitsprüfungen zwischen bool- und numpy.bool_-Typen.

    Der Vergleich von bool und numpy.bool_ mit pytest.approx() hat sich in den Versionen 8.3.4 und 8.3.5 unbeabsichtigt geändert, sodass sie nicht mehr übereinstimmen.

    >>> import numpy as np
    >>> from pytest import approx
    >>> [np.True_, np.True_] == pytest.approx([True, True])
    False
    

    Dies wurde nun behoben.

    >>> [np.True_, np.True_] == pytest.approx([True, True])
    True
    
  • #13119: Verbessertes Handling von ungültigen Regex-Mustern für Warnungsfilter durch Bereitstellung einer klaren Fehlermeldung.

  • #13175: Die Unterschiede werden nun auch beim Vergleich zweier Zeichenketten korrekt hervorgehoben.

  • #13248: Behoben: Ein Problem, bei dem die Angabe eines scope in Metafunc.parametrize mit indirect=True dazu führen konnte, dass andere Fixtures nicht vom parametrisierten Fixture abhängen konnten.

  • #13291: Behoben: repr von attrs-Objekten in Assertionsfehlermeldungen bei Verwendung von attrs>=25.2.

  • #13312: Behoben: Möglicher KeyError-Absturz auf PyPy bei der Sammlung von Tests, die Parameter mit höherem Geltungsbereich betreffen.

  • #13345: Korrigiert Typ-Hinweise für pytest.TestReport.when und pytest.TestReport.location.

  • #13377: Korrigierte Behandlung von Testmethoden mit Positions-only-Parameter-Syntax.

    Nun werden Methoden unterstützt, die self formal als positions-only und/oder Fixture-Parameter als keyword-only definieren, z. B.

    class TestClass:
    
        def test_method(self, /, *, fixture): ...
    

    Zuvor verursachte dies einen internen Fehler in pytest.

  • #13384: Behoben: Ein Problem, bei dem pytest negative Dauern melden konnte.

  • #13420: lru_cache zu nodes._check_initialpaths_for_relpath hinzugefügt.

  • #9037: disable_test_id_escaping_and_forfeit_all_rights_to_community_support bei der Maskierung von IDs in parametrisierten Tests berücksichtigen.

Verbesserte Dokumentation

  • #12535: Dieses Beispiel `` zeigte ``print``-Anweisungen, die nicht genau widerspiegelten, was die verschiedenen Zweige tatsächlich tun. Die Korrektur macht das Beispiel präziser.

  • #13218: In der Dokumentation zu pytest.approx() darauf hingewiesen, dass boolesche Werte als ungleich numerischem Null oder Eins betrachtet werden.

  • #13221: Verbesserte Gruppierung von CLI-Optionen in der Ausgabe von --help.

  • #6649: TerminalReporter zur API-Referenzdokumentationsseite hinzugefügt.

  • #8612: Ein Rezept zum Umgang mit abstrakten Testklassen in der Dokumentation hinzugefügt.

    Ein neues Beispiel wurde der Dokumentation hinzugefügt, das zeigt, wie eine Mixin-Klasse verwendet werden kann, um abstrakte Testklassen zu behandeln, ohne das Attribut __test__ für Unterklassen manuell zu setzen. Dies stellt sicher, dass Unterklassen von abstrakten Testklassen automatisch von pytest gesammelt werden.

Paketierungsaktualisierungen und Hinweise für Downstream-Nutzer

  • #13317: Minimale zulässige Versionen von colorama, iniconfig und packaging angegeben; und die minimale zulässige Version von exceptiongroup für python_version<'3.11' von einem Release Candidate zu einer vollständigen Veröffentlichung hochgestuft.

Änderungen für Mitwirkende

  • #12017: Gemischte interne Verbesserungen

    • Formatierung in einigen Tests auf f-Strings migriert.

    • Typsichere Konstrukte in JUnitXML-Tests verwendet.

    • `` MockTiming`` nach _pytest.timing verschoben.

    – von @RonnyPfannschmidt

  • #12647: Behoben: Ausführung der Testsuite mit dem hypothesis pytest-Plugin.

Verschiedene interne Änderungen

pytest 8.3.5 (2025-03-02)

Fehlerbehebungen

  • #11777: Behoben: Problem, bei dem Sequenzen immer noch gekürzt wurden, auch bei der Ausführlichkeit -vv.

  • #12888: Behoben: Fehlerhafte Eingabe bei Verwendung von Python 3.13+ und einer libedit-Build von Python, wie z. B. unter macOS oder mit uv-verwalteten Python-Binärdateien aus dem python-build-standalone-Projekt. Dies konnte sich z. B. durch eine fehlerhafte Eingabeaufforderung bei Verwendung von Pdb oder durch leere Eingaben bei manueller Verwendung von input() und unterbrochener Erfassung äußern.

  • #13026: Behoben: AttributeError-Absturz bei Verwendung von --import-mode=importlib, wenn das Top-Level-Verzeichnis denselben Namen wie ein anderes Modul der Standardbibliothek hat.

  • #13053: Behoben: Regression in pytest 8.3.4, bei der ein Verzeichnis, das eine Python-Datei mit demselben Namen enthielt, bei Verwendung von --import-mode=importlib einen ImportError verursachte.

  • #13083: Behoben: Problem, bei dem pytest abstürzen konnte, wenn eines der gesammelten Verzeichnisse während der Sammlung entfernt wurde.

Verbesserte Dokumentation

  • #12842: Dedizierte Seite zum Thema Verwendung von Typen mit pytest hinzugefügt.

    Siehe Typisierung in pytest für detaillierte Hinweise zur Verwendung.

Änderungen für Mitwirkende

  • #13112: Behoben: Selftest-Fehler in test_terminal.py mit Pygments >= 2.19.0

  • #13256: Unterstützung für Towncrier-Versionen, die im Jahr 2024 veröffentlicht wurden, beim Erstellen von Sphinx-Dokumenten wurde erneut aktiviert – von @webknjaz.

pytest 8.3.4 (2024-12-01)

Fehlerbehebungen

  • #12592: Behoben: KeyError-Absturz bei Verwendung von --import-mode=importlib in einem Verzeichnislayout, bei dem ein Verzeichnis ein Unterverzeichnis mit demselben Namen enthält.

  • #12818: Assertion-Rewriting bewahrt jetzt die Quellcodebereiche der ursprünglichen Anweisungen, sodass es gut mit Tools, die mit der AST arbeiten, wie z. B. executing, zusammenarbeitet.

  • #12849: ANSI-Escape-Codes für farbige Ausgabe werden jetzt korrekt in pytest.fail() mit pytrace=False behandelt.

  • #9353: pytest.approx() verwendet jetzt strenge Gleichheit bei der Übergabe von Booleans.

Verbesserte Dokumentation

Änderungen für Mitwirkende

  • #12497: Behoben: Zwei fehlgeschlagene pdb-bezogene Tests unter Python 3.13.

pytest 8.3.3 (2024-09-09)

Fehlerbehebungen

  • #12446: Vermeidet Aufruf von @property (und anderen Instanzdeskriptoren) während der Fixture-Erkennung – von @asottile

  • #12659: Behoben: Problem, dass Assertionsfehler-Unterschiede nicht angezeigt wurden, wenn der Parameter --import-mode=importlib in pytest>=8.1 verwendet wurde.

  • #12667: Behoben: Regression, bei der eine Typänderung in ExceptionInfo.errisinstance dazu führte, dass mypy fehlschlug.

  • #12744: Behoben: Typkompatibilität mit Python 3.9 oder niedriger – typing.Self ersetzt durch typing_extensions.Self – von @Avasam

  • #12745: Behoben: Problem, bei dem Backslashes in Nodeid-Pfaden unter Windows falsch konvertiert wurden, was eine konsistente Pfadbehandlung über Umgebungen hinweg gewährleistet.

  • #6682: Behoben: Fehler, bei dem die Ausführlichkeitsstufen bei der Ausgabe des „msg“-Teils einer fehlgeschlagenen Assertion (wie in assert condition, msg) nicht respektiert wurden.

  • #9422: Behoben: Fehler, bei dem das Deaktivieren des Terminal-Plugins über -p no:terminal zu Abstürzen im Zusammenhang mit der fehlenden verbose-Option führte.

    – von @GTowers1

Verbesserte Dokumentation

  • #12663: Klärung, dass der Hook pytest_deselected aus Implementierungen des Hooks pytest_collection_modifyitems aufgerufen werden sollte, wenn Items abgewählt werden.

  • #12678: Entfernt fehlerhafte Anführungszeichen aus dem Beispiel tmp_path_retention_policy in der Dokumentation.

Verschiedene interne Änderungen

  • #12769: Behoben: Tippfehler, die von codespell entdeckt wurden, und Hinzufügen von codespell zu Pre-Commit-Hooks.

pytest 8.3.2 (2024-07-24)

Fehlerbehebungen

  • #12652: Behoben: Regression in conda-Umgebungen, bei denen diese nicht mehr automatisch erkannt wurden.

    – von @RonnyPfannschmidt

pytest 8.3.1 (2024-07-20)

Das Release 8.3.0 enthielt nicht die Änderungsnotizen und Dokumentation für das Release. Dieses Patch-Release behebt dies. Es gibt keine weiteren Änderungen.

pytest 8.3.0 (2024-07-20)

Neue Funktionen

  • #12231: Hinzugefügt: Flag --xfail-tb, das die Ausgabe von Tracebacks für XFAIL-Ergebnisse aktiviert.

    • Wenn das Flag --xfail-tb nicht angegeben ist, werden Tracebacks für XFAIL-Ergebnisse NICHT angezeigt.

    • Der Stil des Tracebacks für XFAIL wird mit --tb festgelegt und kann auto|long|short|line|native|no sein.

    • Hinweis: Selbst wenn --xfail-tb gesetzt ist, werden diese nicht angezeigt, wenn --tb=no gesetzt ist.

    Einige Historie

    Mit pytest 8.0 aktivierten -rx oder -ra nicht nur Zusammenfassungsberichte für xfail, sondern auch die Tracebacks für xfail-Ergebnisse. Dies verursachte Probleme bei einigen Projekten, die xfail verwenden, aber nicht alle xfail-Tracebacks sehen möchten.

    Diese Änderung löst xfail-Tracebacks von -rx, und jetzt aktivieren wir xfail-Tracebacks mit --xfail-tb. Damit ist das Standardverhalten von -rx / -ra in Bezug auf xfail-Tracebacks identisch mit dem Verhalten vor Version 8.0. Obwohl dies eine Verhaltensänderung ist, bringt sie das Standardverhalten zurück auf das Verhalten vor 8.0.0, was letztendlich als der bessere Weg angesehen wurde.

    – von @okken

  • #12281: Unterstützung für Keyword-Matching in Marker-Ausdrücken hinzugefügt.

    Jetzt können Tests nach Marker-Keyword-Argumenten ausgewählt werden. Unterstützte Werte sind int, (nicht maskiertes) str, bool & None.

    Siehe Beispiele für Marker für weitere Informationen.

    – von @lovetheguitar

  • #12567: Hinzugefügt: Kommandozeilenoption --no-fold-skipped.

    Wenn diese Option gesetzt ist, werden übersprungene Tests in der Kurzzusammenfassung nicht mehr nach Grund gruppiert, sondern alle Tests werden individuell mit ihrem Nodeid gedruckt, auf dieselbe Weise wie andere Status.

    – von @pbrezina

Verbesserungen bestehender Funktionalität

  • #12469: Die Konsolenausgabe verwendet jetzt die Terminologie „Third-party plugins“ und ersetzt den zuvor etablierten, aber verwirrenden und veralteten Verweis auf setuptools – von @webknjaz.

  • #12544, #12545: Die Erkennung von Python-virtuellen Umgebungen wurde verbessert, indem nach einer pyvenv.cfg-Datei gesucht wird, um eine zuverlässige Erkennung auf verschiedenen Plattformen zu gewährleisten – von @zachsnickers.

  • #2871: Argumente für Funktionen in der Ausgabe werden bei Ausführung mit -vvv nicht mehr abgeschnitten.

  • #389: Die Lesbarkeit der Assertions-Introspektion von gebundenen Methoden wurde verbessert – von @farbodahm, @webknjaz, @obestwalter, @flub und @glyphack.

    Früher war es so:

    =================================== FAILURES ===================================
    _____________________________________ test _____________________________________
    
        def test():
    >       assert Help().fun() == 2
    E       assert 1 == 2
    E        +  where 1 = <bound method Help.fun of <example.Help instance at 0x256a830>>()
    E        +    where <bound method Help.fun of <example.Help instance at 0x256a830>> = <example.Help instance at 0x256a830>.fun
    E        +      where <example.Help instance at 0x256a830> = Help()
    
    example.py:7: AssertionError
    =========================== 1 failed in 0.03 seconds ===========================
    

    Und jetzt ist es so:

    =================================== FAILURES ===================================
    _____________________________________ test _____________________________________
    
        def test():
    >       assert Help().fun() == 2
    E       assert 1 == 2
    E        +  where 1 = fun()
    E        +    where fun = <test_local.Help object at 0x1074be230>.fun
    E        +      where <test_local.Help object at 0x1074be230> = Help()
    
    test_local.py:13: AssertionError
    =========================== 1 failed in 0.03 seconds ===========================
    
  • #7662: Zeitzoninformationen zur Zeitstempelinformation in der JUnit-XML-Berichterstattung hinzugefügt.

Fehlerbehebungen

  • #11706: Fehlerhafte Meldung von Teardown-Fehlern in höherwertigen Fixtures bei Verwendung von --maxfail oder --stepwise behoben.

    Ursprünglich in pytest 8.0.0 hinzugefügt, aber in 8.0.2 wegen einer Regression in pytest-xdist zurückgenommen. Diese Regression wurde in pytest-xdist 3.6.1 behoben.

  • #11797: pytest.approx() behandelt nun korrekt Sequence-ähnliche Objekte.

  • #12204, #12264: Behoben einer Regression in pytest 8.0, bei der Tracebacks immer länger wurden, wenn mehrere Tests aufgrund einer gemeinsam genutzten höherwertigen Fixture, die eine Ausnahme auslöste, fehlschlugen – von @bluetech.

    Ebenfalls behoben wurde eine ähnliche Regression in pytest 5.4 für Collector, die während des Setups eine Ausnahme auslösten.

    Die Behebung erforderte interne Änderungen, die einige Plugins beeinflussen könnten

    • FixtureDef.cached_result[2] ist nun ein Tupel (exc, tb) anstelle von exc.

    • SetupState.stack-Fehler sind nun ein Tupel (exc, tb) anstelle von exc.

  • #12275: Behoben des Sammelfehlers beim Auftreten einer abstrakten Klasse, einschließlich abstrakter unittest.TestCase-Unterklassen.

  • #12328: Behoben einer Regression in pytest 8.0.0, bei der Paket-skalierte parametrisierte Elemente in einigen Fällen nicht korrekt neu geordnet wurden, um Setups/Teardowns zu minimieren.

  • #12424: Behoben eines Absturzes bei einem fehlgeschlagenen assert testcase is not None-Assertion beim erneuten Ausführen von unittest-Tests mit Plugins wie pytest-rerunfailures. Regression in 8.2.2.

  • #12472: Behoben eines Absturzes bei der Rückgabe der Kategorie "error" oder "failed" mit einem benutzerdefinierten Teststatus aus dem pytest_report_teststatus Hook – @pbrezina.

  • #12505: Verbesserte Handhabung ungültiger Regex-Muster in pytest.raises(match=r'...') durch Bereitstellung einer klaren Fehlermeldung.

  • #12580: Behoben eines Absturzes bei der Verwendung der Cache-Klasse unter Windows, wenn das Cache-Verzeichnis gleichzeitig erstellt wurde.

  • #6962: Parametrisierungsparameter werden nun mit == anstelle von is verglichen (is wird weiterhin als Fallback verwendet, wenn der Parameter == nicht unterstützt). Dies behebt die Verwendung von Parametern wie Listen, die eine andere id haben, aber gleichwertig sind, was dazu führt, dass Fixtures neu berechnet anstatt gecached werden.

  • #7166: Behoben von Fortschrittsprozentsätzen (die [ 87%] am Bildschirmrand), die beim Ausführen mit pytest-xdist -n manchmal nicht korrekt ausgerichtet waren.

Verbesserte Dokumentation

  • #12153: Dokumentiert die Verwendung von PYTEST_VERSION zur Erkennung, ob Code innerhalb eines pytest-Laufs ausgeführt wird.

  • #12469: Externe Plugin-Erwähnungen in der Dokumentation vermeiden nun die Nennung von setuptools entry-points, da das Konzept heutzutage viel generischer ist. Stattdessen ersetzt die Terminologie von „externen“, „installierten“ oder „Drittanbieter“-Plugins (oder Paketen) dies.

    – von @webknjaz

  • #12577: Die Rolle der Umgebungsvariablen CI und BUILD_NUMBER wird in der Referenzdokumentation beschrieben. Sie werden nun auch angezeigt, wenn pytest -h ausgeführt wird – von @MarcBresson.

Änderungen für Mitwirkende

  • #12467: Alle internen Typ-Annotationen wurden im Stil von python3.10+ migriert, indem der `annotations`-Future-Import verwendet wurde.

    – von @RonnyPfannschmidt

  • #11771, #12557: Die PyPy-Laufzeitversion wurde von 3.8 auf 3.9 aktualisiert, da eine fehlerhafte Bug im Garbage Collector, der nicht erwartet wurde zu beheben, da 3.8 EoL ist.

    – von @x612skm

  • #12493: Die Integration der Änderungslog-Entwurfs-Vorschau wurde refaktoriert, um eine Drittanbietererweiterung sphinxcontib-towncrier zu verwenden. Das vorherige In-Repo-Skript platzierte die Änderungslog-Vorschau-Datei unter doc/en/_changelog_towncrier_draft.rst. Diese Datei wird nicht mehr in Git ignoriert und könnte in den Entwicklungsumgebungen der Mitwirkenden als ungetrackte Datei erscheinen. Um dem entgegenzuwirken, können die Mitwirkenden den folgenden Befehl ausführen, der sie bereinigt:

    $ git clean -x -i -- doc/en/_changelog_towncrier_draft.rst
    

    – von @webknjaz

  • #12498: Alle undokumentierten tox-Umgebungen haben nun Beschreibungen. Sie können in Ihrer Entwicklungsumgebung durch Eingabe von tox -av in einem Terminal aufgelistet werden.

    – von @webknjaz

  • #12501: Die Änderungslog-Konfiguration wurde aktualisiert, um passendere zielgruppenspezifische Kategorien einzuführen. Zuvor gab es einen trivial-Typ für Änderungslog-Fragmente mit unklarer und breiter Bedeutung. Dieser wurde entfernt und wir haben nun contrib, misc und packaging anstelle dessen.

    Die neuen Änderungsnotiztypen richten sich an Leser, die nachgelagerte Paketierer und Projektmitwirkende sind. Darüber hinaus wird der Abschnitt "Sonstiges" für nicht spezifizierte Aktualisierungen beibehalten, die nirgendwo sonst passen.

    – von @webknjaz

  • #12502: Die UX der GitHub-Automatisierung, die Pull-Requests zur Aktualisierung der Plugin-Liste erstellt, wurde aktualisiert. Zuvor mussten die Maintainer die automatisch erstellten Pull-Requests schließen und wieder öffnen, um die CI-Läufe auszulösen. Von nun an müssen sie nur noch auf den Knopf Ready for review klicken.

    – von @webknjaz

  • #12522: Die RST-Rolle :pull: wurde durch eine kürzere :pr: ersetzt, da die Implementierung der Drittanbieter-Erweiterung sphinx-issues verwendet wird – von @webknjaz.

  • #12531: Die Konfiguration der Coverage-Berichterstattung wurde aktualisiert, um die eigenen Tests von pytest, die als fehlerhaft gekennzeichnet sind, aus dem Coverage-Bericht auszuschließen. Dies hat zur Folge, dass der Einfluss von fehlerhaften Tests auf die resultierende Zahl reduziert wird.

    – von @webknjaz

  • #12533: Die Sphinx-Erweiterung extlinks ist nicht mehr aktiviert. Die Rolle :bpo:, die sie deklarierte, wurde mit ihr entfernt. BPO selbst ist vor einigen Jahren zu GitHub migriert und es ist möglich, die jeweiligen Issues unter Verwendung ihrer GitHub-Issue-Nummern und der Rolle :issue:, die die sphinx-issues-Erweiterung implementiert, zu verlinken.

    – von @webknjaz

  • #12562: Mögliche Tippfehler bei der Verwendung der RST-Rolle :user: werden nun über die Pre-Commit-Tool-Integration gelintet – von @webknjaz.

pytest 8.2.2 (2024-06-04)

Fehlerbehebungen

  • #12355: Behoben möglicher katastrophaler Leistungseinbrüche bei einem bestimmten Parametrisierungsmuster, das viele höherwertige Parameter beinhaltet.

  • #12367: Behoben einer Regression in pytest 8.2.0, bei der unittest-Klasseninstanzen (eine frische wird für jeden Test erstellt) nicht beim Test-Teardown, sondern erst beim Session-Teardown prompt freigegeben wurden.

  • #12381: Behoben möglicher „Verzeichnis nicht leer“-Abstürze, die durch gleichzeitige Erstellung von Cache-Verzeichnissen (.pytest_cache) entstehen. Regression in pytest 8.2.0.

Verbesserte Dokumentation

  • #12290: Aktualisiertes Sphinx-Theme, um Furo anstelle von Flask zu verwenden, wodurch das Dark-Mode-Theme aktiviert wird.

  • #12356: Hinzufügen eines Unterabschnitts zur Dokumentation für die Fehlersuche bei flüchtigen Tests, um die fehlende Threadsicherheit in pytest als mögliche Ursache für Flackern zu erwähnen.

  • #12363: Die Dokumentationswebseiten verlinken nun auf eine kanonische Version, um veraltete Dokumentation in Suchmaschinenergebnissen zu reduzieren.

pytest 8.2.1 (2024-05-19)

Verbesserungen

  • #12334: Unterstützung für Python 3.13 (beta1 zum Zeitpunkt der Erstellung).

Fehlerbehebungen

  • #12120: Behoben von PermissionError-Abstürzen, die durch Verzeichnisse verursacht wurden, die nicht in der Befehlszeile ausgewählt wurden.

  • #12191: Tastaturunterbrechungen und Systemausstiege werden nun während der Testsammlung ordnungsgemäß behandelt.

  • #12300: Behoben der Handhabung des Fehlers „Funktion nicht implementiert“ unter squashfuse_ll, was eine andere Art zu sagen ist, dass der Mountpoint schreibgeschützt ist.

  • #12308: Behoben einer Regression in pytest 8.2.0, bei der die Berechtigungen von automatisch erstellten .pytest_cache-Verzeichnissen rwx------ anstelle der erwarteten rwxr-xr-x wurden.

Triviale/Interne Änderungen

  • #12333: pytest-Releases werden nun mithilfe der aktuellen Artifact Attestation-Unterstützung von GitHub signiert, wodurch Benutzer die Herkunft von pytests sdist- und wheel-Artefakten verifizieren können.

pytest 8.2.0 (2024-04-27)

Brechende Änderungen

  • #12089: pytest erfordert nun, dass unittest.TestCase-Unterklassen frei mit MyTestCase('runTest') instanziiert werden können.

    Wenn die Klasse dies nicht zulässt, kann es bei der Sammlung zu einem Fehler kommen, z. B. AttributeError: 'MyTestCase' object has no attribute 'runTest'.

    Klassen, die __init__ nicht überschreiben oder die die Testmethode in __init__ nicht mit getattr oder ähnlichem abrufen, sind davon nicht betroffen.

    Klassen, die dies tun, sollten darauf achten, nicht abzustürzen, wenn "runTest" übergeben wird, wie in der Implementierung von unittest.TestCases gezeigt. Alternativ können Sie setUp anstelle von __init__ verwenden.

    Wenn Sie auf dieses Problem mit tornado.AsyncTestCase stoßen, lesen Sie bitte Issue 12263.

    Wenn Sie auf dieses Problem mit einer abstrakten TestCase-Unterklasse stoßen, lesen Sie bitte Issue 12275.

    Historischer Hinweis: Die Auswirkung dieser Änderung auf benutzerdefinierte TestCase-Implementierungen wurde anfänglich nicht richtig berücksichtigt, weshalb sie in einer kleineren Version vorgenommen wurde. Wir entschuldigen uns für die Unannehmlichkeiten.

Veraltet

Features

  • #11871: Unterstützung für das Lesen von Befehlszeilenargumenten aus einer Datei mit dem Präfixzeichen @ wurde hinzugefügt, z. B.: pytest @tests.txt. Die Datei muss ein Argument pro Zeile enthalten.

    Siehe Argumente aus Datei lesen für Details.

Verbesserungen

  • #11523: pytest.importorskip() gibt nun eine Warnung aus, wenn das Modul gefunden werden konnte, aber ImportError anstelle von ModuleNotFoundError ausgelöst hat.

    Die Warnung kann durch Übergabe von exc_type=ImportError an pytest.importorskip() unterdrückt werden.

    Siehe Standardverhalten von pytest.importorskip bezüglich ImportError für Details.

  • #11728: Bei unittest-basierten Tests werden nun Ausnahmen während der Klassenbereinigung (wie sie von Funktionen ausgelöst werden, die mit TestCase.addClassCleanup registriert sind) gemeldet, anstatt stillschweigend fehzuschlagen.

  • #11777: Text wird nicht mehr im Abschnitt Kurze Zusammenfassung der Testinformationen abgeschnitten, wenn -vv gegeben ist.

  • #12112: Verbesserte Erkennung von Namensraum-Paketen, wenn consider_namespace_packages aktiviert ist, was mehr Situationen abdeckt (wie z. B. Editierebare Installationen).

  • #9502: Umgebungsvariable PYTEST_VERSION hinzugefügt, die zu Beginn der pytest-Sitzung definiert und danach undefiniert ist. Sie enthält den Wert von pytest.__version__ und kann unter anderem verwendet werden, um leicht zu prüfen, ob Code innerhalb eines pytest-Laufs ausgeführt wird.

Fehlerbehebungen

  • #12065: Regression in pytest 8.0.0 behoben, bei der Testklassen mit setup_method und Tests, die @staticmethod oder @classmethod verwenden, mit AttributeError: 'NoneType' object has no attribute 'setup_method' abstürzten.

    Nun ist das request.instance Attribut von Tests, die @staticmethod und @classmethod verwenden, nicht mehr None, sondern eine neue Instanz der Klasse, wie bei nicht-statischen Methoden. Zuvor war es None, und alle Fixtures solcher Tests teilten sich ein einziges self.

  • #12135: Problem behoben, bei dem Fixtures, die ihren Finalizer mehrfach zu angeforderten Fixtures hinzufügten, in einigen Fällen zu unzuverlässiger und nicht intuitiver Teardown-Reihenfolge führten.

  • #12194: Bug behoben mit --importmode=importlib und --doctest-modules, bei denen Kindmodule nicht als Attribute in Elternmodulen erschienen.

  • #1489: Einige Fälle behoben, in denen der Teardown von Fixtures mit höherem Scope nicht in umgekehrter Reihenfolge ihrer Initialisierung erfolgte.

Triviale/Interne Änderungen

  • #12069: pluggy>=1.5.0 wird nun benötigt.

  • #12167: Cache: Unterstützungsdateien (CACHEDIR.TAG, .gitignore, etc.) werden in einem temporären Verzeichnis erstellt, um atomare Semantik zu bieten.

pytest 8.1.2 (2024-04-26)

Fehlerbehebungen

  • #12114: Fehler in pytest.approx() behoben, wenn er mit numpy-Arrays verwendet und mit anderen Typen verglichen wurde.

pytest 8.1.1 (2024-03-08)

Hinweis

Diese Version ist keine übliche Fehlerbehebungsversion – sie enthält Features und Verbesserungen und ist eine Folgeversion von 8.1.0, die von PyPI zurückgezogen wurde.

Features

Verbesserungen

  • #10865: pytest.warns() validiert nun, dass warnings.warn() mit einem str oder einer Warning aufgerufen wurde. Derzeit ist es in Python möglich, andere Typen zu verwenden, dies führt jedoch zu einer Ausnahme, wenn warnings.filterwarnings() verwendet wird, um diese Warnungen zu filtern (siehe CPython #103577 für eine Diskussion). Obwohl dies als Fehler in CPython betrachtet werden kann, haben wir uns entschieden, Schutzmaßnahmen in pytest einzubauen, da die Fehlermeldung ohne diese Überprüfung verwirrend ist.

  • #11311: Bei Verwendung von --override-ini für Pfade in Aufrufen ohne definierte Konfigurationsdatei wird das aktuelle Arbeitsverzeichnis als relatives Verzeichnis verwendet.

    Zuvor hätte dies eine AssertionError ausgelöst.

  • #11475: –import-mode=importlib versucht nun, Module mit dem Standard-Importmechanismus zu importieren (aber immer noch, ohne sys.path zu ändern), und greift nur auf den direkten Import von Modulen zurück, wenn dies fehlschlägt.

    Das bedeutet, dass installierte Pakete zuerst unter ihrem kanonischen Namen importiert werden, falls möglich, z. B. app.core.models, anstatt dass der Modulname immer vom Pfad abgeleitet wird (z. B. .env310.lib.site_packages.app.core.models).

  • #11801: Hilfsmethode iter_parents() für Knoten hinzugefügt. Sie ist ähnlich wie listchain, geht aber von unten nach oben und gibt einen Iterator zurück, keine Liste.

  • #11850: Unterstützung für sys.last_exc für Post-Mortem-Debugging unter Python>=3.12 hinzugefügt.

  • #11962: Wenn keine anderen geeigneten Kandidaten für eine Konfigurationsdatei gefunden werden, wird eine pyproject.toml (auch ohne eine [tool.pytest.ini_options] Tabelle) als Konfigurationsdatei betrachtet und die rootdir definiert.

  • #11978: Option --log-file-mode zum Logging-Plugin hinzugefügt, die das Anhängen an Log-Dateien ermöglicht. Diese Option akzeptiert entweder "w" oder "a" und standardmäßig auf "w".

    Zuvor war der Modus fest auf "w" codiert, was die Datei vor dem Logging abschneidet.

  • #12047: Wenn mehrere Finalizer eines Fixtures eine Ausnahme auslösen, werden nun alle Ausnahmen als Ausnahmegruppe gemeldet. Zuvor wurde nur die erste Ausnahme gemeldet.

Fehlerbehebungen

  • #11475: Regression behoben, bei der --importmode=importlib Nicht-Test-Module mehr als einmal importierte.

  • #11904: Regression in pytest 8.0.0 behoben, die die Testsammlung aufgrund von Berechtigungsfehlern bei Verwendung von --pyargs zum Fehlschlagen brachte.

    Diese Änderung verbessert den Sammlungsbaum für Tests, die mit --pyargs angegeben wurden. Siehe #12043 für einen Vergleich mit pytest 8.0 und <8.

  • #12011: Behobenen eines Regressionsfehlers in 8.0.1, bei dem setup_module Xunit-Style-Fixtures nicht ausgeführt wurden, wenn --doctest-modules übergeben wurde.

  • #12014: Korrigiert die stacklevel, die beim Warnen über Marks auf Fixtures verwendet wird.

  • #12039: Korrigiert einen Regressionsfehler in 8.0.2, bei dem Tests, die mit tmp_path erstellt wurden, unter Windows in CI mehrfach gesammelt wurden.

Verbesserte Dokumentation

  • #11790: Detailliertere Dokumentation der Beibehaltung von temporären Verzeichnissen, die mit dem tmp_path-Fixture erstellt wurden.

Triviale/interne Änderungen

  • #11785: Es wurden einige Änderungen an privaten Funktionen vorgenommen, die sich auf Plugins auswirken könnten, die auf sie zugreifen

    • FixtureManager._getautousenames() nimmt jetzt einen Node selbst anstelle der nodeid.

    • FixtureManager.getfixturedefs() nimmt jetzt den Node selbst anstelle der nodeid.

    • Die Funktion _pytest.nodes.iterparentnodeids() wird ohne Ersatz entfernt. Bevorzugen Sie stattdessen die Traversierung der Knoten-Hierarchie. Wenn Sie dies unbedingt benötigen, kopieren Sie die Funktion aus der vorherigen Pytest-Version.

  • #12069: Verschiebung der Deprecation der folgenden Funktionen auf 9.0.0

    Nach der Veröffentlichung von 8.1.0 wurde festgestellt, dass die Warnungen über die bevorstehende Entfernung nicht angezeigt wurden, daher entschied sich das Team, die Entfernung rückgängig zu machen.

    Dies ist der Grund, warum 8.1.0 zurückgezogen wurde.

pytest 8.1.0 (ZURÜCKGEZOGEN)

Hinweis

Diese Veröffentlichung wurde **zurückgezogen**: Sie hat einige Plugins ohne angemessene Warnperiode unterbrochen, da einige Warnungen nicht wie erwartet angezeigt wurden.

Siehe #12069.

pytest 8.0.2 (2024-02-24)

Fehlerbehebungen

  • #11895: Korrigiert die Sammlung unter Windows, wenn initiale Pfade die Kurzform eines Pfades enthalten (z. B. c:\PROGRA~1\tests).

  • #11953: Korrigiert einen IndexError-Absturz, der von getstatementrange_ast ausgelöst wird.

  • #12021: Rückgängigmachen einer Korrektur der --maxfail-Behandlung in Pytest 8.0.0, da dies einen Regressionsfehler in pytest-xdist verursachte, bei dem Session-Fixture-Teardowns mehrmals ausgeführt werden könnten, wenn die maximale Fehleranzahl erreicht ist.

pytest 8.0.1 (2024-02-16)

Fehlerbehebungen

  • #11875: Korrekte Behandlung von Fehlern von getpass.getuser() in Python 3.13.

  • #11879: Korrigiert einen Grenzfall, in dem ExceptionInfo._stringify_exception pytest.raises() abstürzen lassen könnte.

  • #11906: Korrigiert einen Regressionsfehler bei der Verwendung von pytest.warns() mit benutzerdefinierten Warnungsklassen, die mehr als einen Parameter in ihrem __init__ haben.

  • #11907: Korrigiert einen Regressionsfehler in Pytest 8.0.0, bei dem das Aufrufen von pytest.skip() und ähnlichen Kontrollfluss-Ausnahmen innerhalb eines pytest.warns()-Blocks diese unterdrückt anstatt sie weiterzuleiten.

  • #11929: Korrigiert einen Regressionsfehler in Pytest 8.0.0, bei dem Autouse-Fixtures, die in einem Modul definiert sind, von den Doctests im Modul ignoriert wurden.

  • #11937: Korrigiert einen Regressionsfehler in Pytest 8.0.0, bei dem Elemente unter bestimmten Umständen in umgekehrter Reihenfolge gesammelt wurden.

pytest 8.0.0 (2024-01-27)

Fehlerbehebungen

  • #11842: Korrektes Escaping des reason eines skip-Marks beim Schreiben von JUnit XML-Dateien.

  • #11861: Vermeidet Mikrosekunden-Überschreitungen von 1_000_000 bei Verwendung von log-date-format mit dem %f-Spezifizierer, was die Testsuite zum Absturz bringen könnte.

pytest 8.0.0rc2 (2024-01-17)

Verbesserungen

  • #11233: Verbesserungen an -r für xfailures und xpasses

    • Tracebacks für xfailures berichten, wenn -rx gesetzt ist.

    • Aufgefangene Ausgaben für xpasses berichten, wenn -rX gesetzt ist.

    • Für xpasses wird ein - in der Zusammenfassung zwischen Testnamen und Grund eingefügt, um die Anzeige von xfail nachzuahmen.

  • #11825: Der Hook pytest_plugin_registered hat einen neuen Parameter plugin_name, der den Namen enthält, unter dem plugin registriert wird.

Fehlerbehebungen

  • #11706: Korrigiert die Berichterstattung über Teardown-Fehler in höherwertigen Fixtures bei Verwendung von --maxfail oder --stepwise.

    HINWEIS: Diese Änderung wurde in Pytest 8.0.2 rückgängig gemacht, um einen von ihr verursachten Regressionsfehler in pytest-xdist zu beheben.

  • #11758: Korrigiert den Absturz IndexError: string index out of range in if highlighted[-1] == "\n" and source[-1] != "\n". Dieser Fehler wurde in Pytest 8.0.0rc1 eingeführt.

  • #9765, #11816: Korrigiert einen frustrierenden Fehler, der einige Benutzer mit dem einzigen Fehler assert mod not in mods betraf. Das Problem wurde dadurch verursacht, dass str(Path(mod)) und mod.__file__ nicht notwendigerweise die gleiche Zeichenkette erzeugen, und wurde versehentlich an einigen Stellen im Code austauschbar verwendet.

    Diese Korrektur brach auch die interne API von PytestPluginManager.consider_conftest, indem ein neuer Parameter eingeführt wurde – wir erwähnen dies für den Fall, dass es von externem Code verwendet wird, auch wenn es als *privat* gekennzeichnet ist.

pytest 8.0.0rc1 (2023-12-30)

Abwärtskompatibilitätsprobleme

Alte Deprecations sind jetzt Fehler

  • #7363: **PytestRemovedIn8Warning-Deprecationswarnungen sind jetzt standardmäßig Fehler.**

    Gemäß unserem Plan, veraltete Funktionen mit so wenig Störungen wie möglich zu entfernen, erzeugen nun alle Warnungen vom Typ PytestRemovedIn8Warning standardmäßig Fehler anstelle von Warnmeldungen.

    **Die betroffenen Funktionen werden effektiv in Pytest 8.1 entfernt**, konsultieren Sie daher bitte den Abschnitt Deprecations and Removals in der Dokumentation, um Anweisungen zur Aktualisierung bestehender Codes zu erhalten.

    In der Pytest-Serie 8.0.X ist es als Übergangsmaßnahme möglich, die Fehler wieder in Warnungen umzuwandeln, indem Sie dies zu Ihrer pytest.ini-Datei hinzufügen

    [pytest]
    filterwarnings =
        ignore::pytest.PytestRemovedIn8Warning
    

    Dies wird jedoch aufhören zu funktionieren, wenn Pytest 8.1 veröffentlicht wird.

    **Wenn Sie Bedenken** bezüglich der Entfernung einer bestimmten Funktion haben, hinterlassen Sie bitte einen Kommentar unter #7363.

Versionskompatibilität

Änderungen bei der Sammlung

In dieser Version haben wir mehrere abwärtsinkompatible Änderungen an der Sammlungsphase von Pytest vorgenommen, insbesondere im Hinblick darauf, wie Dateisystemverzeichnisse und Python-Pakete gesammelt werden. Dies behebt Mängel und ermöglicht Bereinigungen und Verbesserungen der internen Abläufe von Pytest. Eine Deprecationsperiode für diese Änderungen war nicht möglich.

  • #7777: Dateien und Verzeichnisse werden nun alphabetisch gemeinsam gesammelt, es sei denn, sie werden durch ein Plugin geändert. Zuvor wurden Dateien vor Verzeichnissen gesammelt. Siehe unten für ein Beispiel.

  • #8976: Das Ausführen von pytest pkg/__init__.py sammelt nun nur die Datei pkg/__init__.py (Modul). Zuvor wurde das gesamte Paket pkg gesammelt, einschließlich anderer Testdateien im Verzeichnis, aber ohne Tests in der Datei __init__.py selbst (es sei denn, python_files wurde geändert, um __init__.py-Dateien zuzulassen).

    Um das gesamte Paket zu sammeln, geben Sie nur das Verzeichnis an: pytest pkg.

  • #11137: pytest.Package ist kein pytest.Module oder pytest.File mehr.

    Der Package-Collector-Knoten bezeichnet ein Python-Paket, d. h. ein Verzeichnis mit einer __init__.py-Datei. Zuvor war Package ein Untertyp von pytest.Module (das ein einzelnes Python-Modul repräsentiert), wobei das Modul die Datei __init__.py war. Dies wurde als Designfehler angesehen (siehe #11137 und #7777 für Details).

    Die Eigenschaft path von Package-Knoten zeigt nun auf das Paketverzeichnis anstelle der Datei __init__.py.

    Beachten Sie, dass ein Module-Knoten für __init__.py (der kein Package ist) weiterhin existieren kann, wenn er während der Sammlung erfasst wird (z. B. wenn Sie python_files so konfiguriert haben, dass __init__.py-Dateien enthalten sind).

  • #7777: Ein neuer Basis-Sammlungsknoten pytest.Directory wurde hinzugefügt, von dem erwartet wird, dass alle Collector-Knoten für Dateisystemverzeichnisse abgeleitet werden. Dies ist analog zum vorhandenen pytest.File für Dateiknoten.

    Geändert: pytest.Package ist nun ein Untertyp von pytest.Directory. Ein Package repräsentiert ein Dateisystemverzeichnis, das ein Python-Paket ist, d. h. eine Datei __init__.py enthält.

    pytest.Package sammelt nun nur Dateien in seinem eigenen Verzeichnis; zuvor sammelte es rekursiv. Unterverzeichnisse werden als eigene Collector-Knoten gesammelt, die sich dann selbst sammeln, wodurch ein Sammlungsbaum entsteht, der die Dateisystemhierarchie widerspiegelt.

    Hinzugefügt wurde ein neuer konkreter Sammlungsknoten pytest.Dir, eine Unterklasse von pytest.Directory. Dieser Knoten repräsentiert ein Dateisystemverzeichnis, das kein pytest.Package ist, d. h. keine __init__.py-Datei enthält. Ähnlich wie Package sammelt er nur die Dateien in seinem eigenen Verzeichnis.

    pytest.Session sammelt nun nur noch die anfänglichen Argumente, ohne in Verzeichnisse zu rekursieren. Diese Arbeit wird nun vom rekursiven Erweiterungsprozess von Verzeichnissammlerknoten übernommen.

    session.name ist nun ""; zuvor war es der Verzeichnisname des rootdir. Dies entspricht session.nodeid, das schon immer "" war.

    Der Sammelbaum enthält nun Verzeichnisse/Pakete bis zum rootdir für anfängliche Argumente, die innerhalb des rootdir gefunden werden. Für Dateien außerhalb des rootdir wird nur das unmittelbare Verzeichnis/Paket gesammelt – beachten Sie jedoch, dass das Sammeln von außerhalb des rootdir nicht empfohlen wird.

    Als Beispiel, gegeben den folgenden Dateisystembaum

    myroot/
        pytest.ini
        top/
        ├── aaa
        │   └── test_aaa.py
        ├── test_a.py
        ├── test_b
        │   ├── __init__.py
        │   └── test_b.py
        ├── test_c.py
        └── zzz
            ├── __init__.py
            └── test_zzz.py
    

    ist der Sammelbaum, wie er von pytest --collect-only top/ gezeigt wird, aber mit dem ansonsten versteckten Session-Knoten zur Verdeutlichung, nun der folgende

    <Session>
      <Dir myroot>
        <Dir top>
          <Dir aaa>
            <Module test_aaa.py>
              <Function test_it>
          <Module test_a.py>
            <Function test_it>
          <Package test_b>
            <Module test_b.py>
              <Function test_it>
          <Module test_c.py>
            <Function test_it>
          <Package zzz>
            <Module test_zzz.py>
              <Function test_it>
    

    Zuvor war es

    <Session>
      <Module top/test_a.py>
        <Function test_it>
      <Module top/test_c.py>
        <Function test_it>
      <Module top/aaa/test_aaa.py>
        <Function test_it>
      <Package test_b>
        <Module test_b.py>
          <Function test_it>
      <Package zzz>
        <Module test_zzz.py>
          <Function test_it>
    

    Code/Plugins, die von einer bestimmten Struktur des Sammelbaums abhängen, müssen möglicherweise aktualisiert werden.

  • #11676: Die Klassen Node, Collector, Item, File, FSCollector sind nun abstrakt markiert (siehe abc).

    Wir erwarten nicht, dass diese Änderung Benutzer und Plugin-Autoren beeinträchtigt; sie wird nur dann Fehler verursachen, wenn der Code bereits falsch oder problematisch ist.

Andere Breaking Changes

Dies sind Breaking Changes, bei denen eine Deprecation nicht möglich war.

  • #11282: Bereinigte Behandlung des default-Parameters bei der Definition von Konfigurationsoptionen.

    Zuvor, wenn default für parser.addini nicht mitgeliefert wurde und der Wert der Konfigurationsoption in einer Testsitzung nicht definiert war, gaben Aufrufe von config.getini eine *leere Liste* oder einen *leeren String* zurück, je nachdem, ob type mitgeliefert wurde oder nicht, was offensichtlich falsch ist. Außerdem wurde None nicht berücksichtigt, selbst wenn default=None explizit bei der Definition der Option verwendet wurde.

    Nun ist das Verhalten von parser.addini wie folgt:

    • Wenn default NICHT übergeben wird, aber type angegeben ist, wird ein typspezifischer Standardwert zurückgegeben. Zum Beispiel gibt type=bool False zurück, type=str gibt "" zurück, etc.

    • Wenn default=None übergeben wird und die Option in einer Testsitzung nicht definiert ist, wird None zurückgegeben, unabhängig vom type.

    • Wenn weder default noch type angegeben sind, wird angenommen, dass type=str ist und "" als Standardwert zurückgegeben (dies entspricht dem vorherigen Verhalten).

    Das Team hat beschlossen, für diese Änderung keine Deprecationsperiode einzuführen, da dies sowohl in Bezug auf die Kommunikation an die Community als auch auf die Implementierung kompliziert wäre und das Team glaubt, dass diese Änderung bestehende Plugins nur in seltenen Fällen beeinträchtigen sollte.

  • #11667: Die setup.py-Datei von pytest wurde entfernt. Wenn Sie sich auf diese Datei verlassen haben, z. B. um pytest mit setup.py install zu installieren, lesen Sie bitte Why you shouldn’t invoke setup.py directly für Alternativen.

  • #9288: warns() gibt nun nicht abgeglichene Warnungen erneut aus, wenn der Kontext geschlossen wird – zuvor wurden alle Warnungen konsumiert und diejenigen, die nicht vom Funktion abgeglichen wurden, versteckt.

    Obwohl dies eine neue Funktion ist, kündigen wir sie als Breaking Change an, da viele Testsuiten so konfiguriert sind, dass sie bei Warnungen einen Fehler ausgeben, und daher bei den neu ausgegebenen Warnungen fehlschlagen.

  • Die interne Methode FixtureManager.getfixtureclosure wurde geändert. Plugins, die diese Methode verwenden oder von FixtureManager ableiten und diese Methode überschreiben, müssen sich an die Änderung anpassen.

Deprecations

  • #10465: Testfunktionen, die einen anderen Wert als None zurückgeben, geben nun eine pytest.PytestWarning statt einer pytest.PytestRemovedIn8Warning aus, was bedeutet, dass dies eine Warnung bleibt und nicht zu einem Fehler in der Zukunft wird.

  • #3664: Das Anwenden eines Marks auf eine Fixture-Funktion gibt nun eine Warnung aus: Marks in Fixtures hatten nie eine Auswirkung, aber es ist ein häufiger Benutzerfehler, ein Mark auf eine Fixture anzuwenden (z. B. usefixtures) und zu erwarten, dass es funktioniert.

    Dies wird in pytest 9.0 zu einem Fehler.

Features und Verbesserungen

Verbesserte Diffs

Diese Änderungen verbessern die Diffs, die pytest beim Fehlschlagen einer Assertion ausgibt. Beachten Sie, dass die Syntaxhervorhebung das Paket pygments erfordert.

  • #11520: Die sehr ausführliche (-vv) Diff-Ausgabe wird nun als Diff und nicht als großer roter Block farbig dargestellt.

    Python-Code in Fehlermeldungen wird nun mit Python-Syntax hervorgehoben.

    Die Abschnitte in den Fehlermeldungen sind nun besser voneinander getrennt.

  • #1531: Die sehr ausführliche Diff (-vv) für jeden Standardbibliothekscontainer-Typ wurde verbessert. Die Einrückung ist nun konsistent und die Marker befinden sich auf separaten Zeilen, was die für Benutzer angezeigten Diffs reduzieren sollte.

    Zuvor wurde der Standard-Python-Pretty-Printer verwendet, um die Ausgabe zu generieren, der öffnende und schließende Marker auf derselben Zeile wie der erste/letzte Eintrag platziert und keine konsistente Einrückung aufweist.

  • #10617: Umfassendere Set-Assertion-Rewrites für andere Vergleiche als Gleichheit == wurden hinzugefügt. Mit den folgenden Operationen werden nun bessere Fehlermeldungen geliefert: !=, <=, >=, < und >.

Separate Steuerung der Assertions-Ausführlichkeit

  • #11387: Die neue Konfigurationsoption verbosity_assertions wurde für eine feingranulare Steuerung der Ausführlichkeit von fehlgeschlagenen Assertions hinzugefügt.

    Wenn Sie sich jemals gewünscht haben, dass pytest Ihnen immer vollständige Diffs anzeigt, aber ohne alles andere ausführlich zu machen, ist dies genau das Richtige für Sie.

    Weitere Details finden Sie unter Fine-grained verbosity.

    Für Plugin-Autoren kann config.get_verbosity verwendet werden, um den Ausführlichkeitsgrad für einen bestimmten Ausführlichkeitstyp abzurufen.

Zusätzliche Unterstützung für Exception Groups und __notes__

Diese Änderungen verbessern die Unterstützung von pytest für Exception Groups.

Benutzerdefinierte Verzeichnissammler

“New-style” Hook Wrappers

Weitere Verbesserungen

Fehlerbehebungen

  • #10701: pytest.WarningsRecorder.pop() gibt die am besten passende Warnung in der Liste zurück, anstatt der ersten Warnung, die eine Instanz des angeforderten Typs ist.

  • #11255: Absturz bei parametrize(..., scope="package") ohne vorhandenes Paket behoben.

  • #11277: Ein Fehler wurde behoben, bei dem bei mehreren Fixtures für einen indirekten Parameter der Scope des Fixtures mit dem höchsten Scope für den Parameter-Set ausgewählt wurde, anstatt des Fixtures mit dem engsten Scope.

  • #11456: Parametrisierte Tests stellen nun *wirklich* sicher, dass die IDs für jede Eingabe eindeutig sind – zum Beispiel führt a, a, a0 nun zu a1, a2, a0 anstelle des vorherigen (fehlerhaften) a0, a1, a0. Dies bedeutet zwangsläufig eine Änderung von Node-IDs, wo diese zuvor kollidierten, und zur besseren Lesbarkeit wird ein Unterstrich hinzugefügt, wenn nicht eindeutige IDs auf eine Zahl enden.

  • #11563: Absturz bei der mehrfachen Verwendung eines leeren Strings für denselben parametrisierten Wert behoben.

  • #11712: Die Verarbeitung von NO_COLOR und FORCE_COLOR wurde verbessert, um leere Werte zu ignorieren.

  • #9036: pytest.warns und ähnliche Funktionen erfassen nun Warnungen, wenn eine Ausnahme innerhalb eines with-Blocks ausgelöst wird.

Verbesserte Dokumentation

  • #11011: Eine Warnung wurde hinzugefügt, die auf die Änderung des Root-Loggers während Tests bei Verwendung von caplog hinweist.

  • #11065: pytestconfig anstelle von request.config im Cache-Beispiel verwendet, um Konsistenz mit der API-Dokumentation zu gewährleisten.

Trivial/Interne Änderungen

  • #11208: Der Typ von FixtureDef.cached_result (intern) hat sich geändert. Das dritte Element cached_result[2] ist nun, wenn gesetzt, eine Ausnahminstanz anstelle eines Ausnahme-Tripels.

  • #11218: (Dieser Eintrag dient dazu, Plugins zu unterstützen, die auf private pytest-Interna zugreifen, um FixtureRequest-Objekte zu instanziieren.)

    FixtureRequest ist nun eine abstrakte Klasse, die nicht direkt instanziiert werden kann. Eine neue konkrete Unterklasse TopRequest von FixtureRequest wurde für das request-Fixture in Testfunktionen hinzugefügt, als Gegenstück zur bestehenden Unterklasse SubRequest für das request-Fixture in Fixture-Funktionen.

  • #11315: Das pytester-Fixture verwendet nun das monkeypatch-Fixture zur Verwaltung des aktuellen Arbeitsverzeichnisses. Wenn Sie pytester in Kombination mit monkeypatch.undo() verwenden, kann das CWD wiederhergestellt werden. Verwenden Sie stattdessen monkeypatch.context().

  • #11333: Die Schreibweise von Config.ArgsSource.INVOCATION_DIR wurde korrigiert. Die vorherige Schreibweise INCOVATION_DIR bleibt als Alias erhalten.

  • #11638: Die Selftests wurden so korrigiert, dass sie korrekt bestanden werden, wenn FORCE_COLOR, NO_COLOR oder PY_COLORS in der aufrufenden Umgebung gesetzt sind.

pytest 7.4.4 (2023-12-31)

Fehlerbehebungen

  • #11140: Korrigiert, dass Nicht-String-Konstanten am Anfang einer Datei ab Python >= 3.8 als Docstrings erkannt werden.

  • #11572: Ein Grenzfall wurde behandelt, bei dem sys.stderr und sys.__stderr__ bereits geschlossen sein könnten, wenn der Fehlerhandler herunterfährt.

  • #11710: Absturzrückverfolgungen von Erfassungsfehlern wurden nicht mehr beschnitten.

  • #7966: Eine nicht hilfreiche Fehlermeldung aus dem Mechanismus zur Behandlung von Assertion-Rewrites wurde entfernt, wenn Ausnahmen in __iter__-Methoden ausgelöst werden. Diese werden nun stattdessen als nicht iterierbar behandelt.

Verbesserte Dokumentation

  • #11091: Die Dokumentation wurde aktualisiert, um auf Bindestrich-Optionen zu verweisen: --junitxml wurde durch --junit-xml und --collectonly durch --collect-only ersetzt.

pytest 7.4.3 (2023-10-24)

Fehlerbehebungen

  • #10447: Marker werden nun in umgekehrter mro-Reihenfolge betrachtet, um sicherzustellen, dass Basisklassenmarker zuerst berücksichtigt werden – dies behebt eine Regression.

  • #11239: behoben, dass := in Assertions sich auf nicht verwandte Testfälle auswirkte.

  • #11439: Ein Randfall wurde behandelt, bei dem sys.stderr bereits geschlossen sein könnte, wenn der Fehlerhandler herunterfährt.

pytest 7.4.2 (2023-09-07)

Fehlerbehebungen

  • #11237: Korrigiert die Erfassung von Doctests für functools.cached_property-Objekte.

  • #11306: Behoben, dass bei Verwendung von --importmode=importlib Paket-__init__.py-Dateien in einigen Fällen mehr als einmal importiert wurden.

  • #11367: Behoben, dass user_properties in der JUnit-XML-Datei nicht gespeichert wurden, wenn ein Fixture während des Aufräumens fehlschlug.

  • #11394: Absturz bei der Analyse langer Kommandozeilenargumente behoben, die als Dateien interpretiert werden könnten.

Verbesserte Dokumentation

  • #11391: Der Haftungsausschluss auf der Seite mit der Referenz zu pytest-Plugins wurde verbessert, um besser anzugeben, dass es sich um eine automatisierte, nicht kuratierte Liste handelt.

pytest 7.4.1 (2023-09-02)

Fehlerbehebungen

  • #10337: Behoben, dass von --import-mode=importlib generierte gefälschte Zwischenmodule die Kindmodule nicht als Attribute der Elternmodule einschlossen.

  • #10702: Die Fehlerbehandlung von Ausnahmen in pytest.approx() wurde korrigiert, wenn None ein erwarteter oder empfangener Wert beim Vergleichen von Wörterbüchern ist.

  • #10811: Problem behoben, bei dem --import-mode=importlib zusammen mit --doctest-modules verwendet wurde, was dazu führte, dass Module mehr als einmal importiert wurden und Probleme mit Modulen mit Import-Seiteneffekten verursachte.

pytest 7.4.0 (2023-06-23)

Funktionen

Verbesserungen

  • #10872: Die Anmerkung für Testprotokollberichte wurde zu einem Named-Tuple aktualisiert und die Inkonsistenz in der Dokumentation für den Hook pytest_report_teststatus behoben.

  • #10907: Wenn ein Ausnahme-Traceback, der angezeigt werden soll, vollständig ausgeblendet wird (durch Mechanismen wie __tracebackhide__, interne Frames und ähnliches), werden nun nur die Ausnahmezeichenkette und die folgende Meldung angezeigt

    „Alle Traceback-Einträge sind ausgeblendet. Übergeben Sie --full-trace, um ausgeblendete und interne Frames anzuzeigen.“.

    Zuvor wurde der letzte Frame des Tracebacks angezeigt, obwohl er ausgeblendet war.

  • #10940: Verbose Ausgabe (-vv) von skip und xfail Gründen verbessert, indem Textumbruch durchgeführt wird und gleichzeitig ein klarer Rand für die Fortschrittsanzeige erhalten bleibt.

    TerminalReporter.wrap_write() als Hilfsfunktion dafür hinzugefügt.

  • #10991: Behandlung der Direktive %f hinzugefügt, um Mikrosekunden in Protokollformatierungsoptionen, wie z. B. log-date-format, auszugeben.

  • #11005: Die zugrundeliegende Ausnahme zu den Warnmeldungen zur Pfaderstellung und zum Schreiben des Cache-Providers hinzugefügt.

  • #11013: Warnung hinzugefügt, wenn testpaths gesetzt ist, aber keine Pfade per Glob gefunden werden. In diesem Fall fällt pytest auf die Suche ab dem aktuellen Verzeichnis zurück.

  • #11043: Wenn --confcutdir nicht angegeben ist und keine Konfigurationsdatei vorhanden ist, wird das Conftest-Cutoff-Verzeichnis (--confcutdir) jetzt auf das rootdir gesetzt. Zuvor wurden in solchen Fällen conftest.py-Dateien bis zum Stammverzeichnis des Dateisystems durchsucht. Wenn Sie von dieser Änderung stark betroffen sind, sollten Sie eine leere Konfigurationsdatei in Ihrem gewünschten Cutoff-Verzeichnis hinzufügen oder explizit --confcutdir setzen.

  • #11081: Die Prüfung von norecursedirs wird nun in einer pytest_ignore_collect-Implementierung durchgeführt, sodass Plugins sie beeinflussen können.

    Wenn nach der Aktualisierung auf diese Version festgestellt wird, dass Ihre norecursedirs-Einstellung nicht beachtet wird, bedeutet dies, dass ein Conftest oder ein von Ihnen verwendetes Plugin eine fehlerhafte pytest_ignore_collect-Implementierung hat. Höchstwahrscheinlich gibt Ihr Hook False für Pfade zurück, die er nicht ignorieren möchte, was die Verarbeitung beendet und anderen Plugins, einschließlich pytest selbst, nicht erlaubt, den Pfad zu ignorieren. Die Korrektur besteht darin, None anstelle von False für Pfade zurückzugeben, die Ihr Hook nicht ignorieren möchte.

  • #8711: caplog.set_level() und caplog.at_level() aktivieren temporär das angeforderte level, wenn level global über logging.disable(LEVEL) deaktiviert wurde.

Fehlerbehebungen

  • #10831: Terminal-Berichterstattung: Fehler behoben, bei dem unter --tb=line-Modus ausgeführte pytest.fail(pytrace=False)-Tests None meldeten.

  • #11068: Die Funktionalität zum Überspringen ganzer Dateien bei --last-failed ("übersprungen N Dateien") für Nicht-Python-Testdateien behoben.

  • #11104: Rückschritt in pytest 7.3.2 behoben, der dazu führte, dass testpaths für das Laden von anfänglichen Conftests berücksichtigt wurde, auch wenn es nicht verwendet wurde (z. B. wenn explizite Pfade auf der Befehlszeile angegeben wurden). Nun werden testpaths nur dann berücksichtigt, wenn sie verwendet werden.

  • #1904: Rückverfolgungseinträge, die mit __tracebackhide__ = True ausgeblendet wurden, werden jetzt auch für verkettete Ausnahmen (Teile nach der Meldung "... die obige Ausnahme ...") korrekt angezeigt.

  • #7781: Korrigiert das Schreiben nicht kodierbarer Texte in die Protokolldatei bei Verwendung von --debug.

Verbesserte Dokumentation

Triviale/Interne Änderungen

  • #11031: Das CLI-Flag -c wurde erweitert, um nun --config-file einzuschließen, um klarzustellen, dass dieses Flag für die Verwendung einer benutzerdefinierten Konfigurationsdatei gilt.

pytest 7.3.2 (2023-06-10)

Fehlerbehebungen

  • #10169: Fehler behoben, bei dem sehr lange Optionsnamen dazu führen konnten, dass pytest unter einigen Systemen mit OSError: [Errno 36] Dateiname zu lang abstürzte.

  • #10894: Unterstützung für Python 3.12 (zum Zeitpunkt der Erstellung als Beta).

  • #10987: testpaths wird nun zum Laden von Root-conftests berücksichtigt.

  • #10999: Die Typannotationen von monkeypatch setitem/delitem erlauben jetzt TypedDict-Argumente.

  • #11028: Fehler in der Assertions-Rewriting-Logik behoben, bei dem eine mit dem Walross-Operator zugewiesene Variable später in einem Funktionsaufruf nicht verwendet werden konnte.

  • #11054: Funktionalität "(übersprungen N Dateien)" von --last-failed für Dateien innerhalb von Paketen (Verzeichnisse mit __init__.py-Dateien) behoben.

pytest 7.3.1 (2023-04-14)

Verbesserungen

  • #10875: Unterstützung für Python 3.12: Fehler RuntimeError: TestResult has no addDuration method beim Ausführen von unittest-Tests behoben.

  • #10890: Unterstützung für Python 3.12: Deprecation-Warnung für shutil.rmtree(onerror=...) bei Verwendung von tmp_path behoben.

Fehlerbehebungen

  • #10896: Leistungsregression im Zusammenhang mit tmp_path und der neuen Option tmp_path_retention_policy behoben.

  • #10903: Absturz behoben INTERNALERROR IndexError: list index out of range, der beim Anzeigen einer Ausnahme auftritt, bei der alle Einträge ausgeblendet sind. Dies macht die Änderung "Behandelt __tracebackhide__ für verkettete Ausnahmen korrekt." aus Version 7.3.0 rückgängig.

pytest 7.3.0 (2023-04-08)

Funktionen

  • #10525: Testmethoden, die mit @classmethod dekoriert sind, können jetzt als Tests erkannt werden, nach denselben Regeln wie normale Methoden. Dies schließt die Lücke, dass statische Methoden als Tests erkannt wurden, Klassenmethoden aber nicht.

  • #10755: console_output_style unterstützt jetzt progress-even-when-capture-no, um die Fortschrittsanzeige zu erzwingen, auch wenn die Erfassung deaktiviert ist. Dies ist nützlich in großen Testsuiten, bei denen die Erfassung erhebliche Leistungseinbußen haben kann.

  • #7431: CLI-Option --log-disable hinzugefügt, um einzelne Logger zu deaktivieren.

  • #8141: Konfigurationsoptionen tmp_path_retention_count und tmp_path_retention_policy hinzugefügt, um zu steuern, wie Verzeichnisse, die von der tmp_path-Fixture erstellt werden, beibehalten werden.

Verbesserungen

  • #10226: Wenn beim Aufräumen mehrere Fehler auftreten, wird nun eine ExceptionGroup dieser Fehler erneut ausgelöst, anstatt alle bis auf den letzten zu verwerfen.

  • #10658: Erlaubt -p Argumenten, Leerzeichen zu enthalten (z. B.: -p no:logging statt -pno:logging). Hauptsächlich nützlich im addopts-Abschnitt der Konfigurationsdatei.

  • #10710: Start- und Stopp-Zeitstempel zu TestReport-Objekten hinzugefügt.

  • #10727: Der Kopfzeilenbericht für rootdir, die config file und testpaths wurde aufgeteilt, sodass jeder eine eigene Zeile hat.

  • #10840: pytest sollte nicht mehr bei ASTs mit pathologischen Positionsattributen abstürzen, z. B. beim Testen von ASTs, die von Hylang <https://github.com/hylang/hy>__ generiert wurden.

  • #6267: Die vollständige Ausgabe eines Tests wird nicht mehr abgeschnitten, wenn die abgeschnittene Meldung länger wäre als der ausgeblendete Text. Auch die angezeigte Zeilennummer wurde korrigiert.

Fehlerbehebungen

  • #10743: Der Assertions-Rewriting-Mechanismus funktioniert jetzt korrekt, wenn Assertionsausdrücke den Walross-Operator enthalten.

  • #10765: Behoben, dass die tmp_path-Fixture auf der emscripten-Plattform aufgrund des fehlenden os.getuid() immer OSError auslöste.

  • #1904: Korrekte Behandlung von __tracebackhide__ für verkettete Ausnahmen. HINWEIS: Diese Änderung wurde in Version 7.3.1 rückgängig gemacht.

Verbesserte Dokumentation

  • #10782: Das minimale Beispiel in Gute Integrationspraktiken korrigiert: pip install -e . erfordert einen version-Eintrag in pyproject.toml, um erfolgreich ausgeführt zu werden.

Triviale/Interne Änderungen

  • #10669: pytest hängt nicht mehr direkt vom attrs-Paket ab. Obwohl wir bei pytest alle das Paket sehr schätzen und dem attrs-Team für viele Jahre der Zusammenarbeit und Unterstützung danken möchten, ist es für pytest sinnvoll, so wenig externe Abhängigkeiten wie möglich zu haben, da dies nachgelagerten Projekten hilft. Aus diesem Grund haben wir die begrenzte interne Verwendung von pytest durch die Verwendung der dataclasses der Standardbibliothek ersetzt.

    Schöne Diffs für attrs-Klassen werden weiterhin unterstützt.

pytest 7.2.2 (2023-03-03)

Fehlerbehebungen

  • #10533: Behoben: `pytest.approx()`-Behandlung von Dictionaries, die einen oder mehrere Werte von `0.0` enthalten.

  • #10592: Behoben: Absturz, wenn `--cache-show` und `--help` gleichzeitig übergeben werden.

  • #10597: Behoben: Fehler, bei dem eine Fixture-Methode namens `teardown` als Teil der `nose`-Teardown-Phase aufgerufen wurde.

  • #10626: Behoben: Absturz, wenn `--fixtures` und `--help` gleichzeitig übergeben werden.

  • #10660: Behoben: `pytest.raises()` gibt nun ein 'ContextManager' zurück, damit Type-Checker `pytest.raises(...) if ... else nullcontext()` auf 'ContextManager' statt auf 'object' einschränken können.

Verbesserte Dokumentation

  • #10690: Umgebungsvariablen `CI` und `BUILD_NUMBER` zur Dokumentation hinzugefügt.

  • #10721: Korrigierte Deklaration von Entry-Points im Dokumentationsbeispiel mit Hatch.

  • #10753: Wortlaut des Modul-Level-Skips geändert, um explizit darauf hinzuweisen, dass keine Tests gesammelt und der Rest des Moduls nicht ausgeführt wird.

pytest 7.2.1 (2023-01-13)

Fehlerbehebungen

  • #10452: Behoben: `importlib.abc.TraversableResources`-Deprecation-Warnung in Python 3.12.

  • #10457: Wenn ein Test aus einer Fixture heraus übersprungen wird, zeigt die Testzusammenfassung nun den Speicherort des Tests anstelle des Speicherorts der Fixture.

  • #10506: Behoben: Fehler, bei dem pytest unter Windows manchmal das Stammverzeichnis des Dateisystems als `rootdir` verwendete.

  • #10607: Behoben: Wettlaufsituation bei der Erstellung von junitxml-Berichten, die auftreten konnte, wenn mehrere Instanzen von pytest parallel ausgeführt wurden.

  • #10641: Behoben: Wettlaufsituation bei der Erstellung oder Aktualisierung des Caches des `stepwise`-Plugins, die auftreten konnte, wenn mehrere `xdist`-Worker-Knoten versuchten, gleichzeitig den Cache des `stepwise`-Plugins zu aktualisieren.

pytest 7.2.0 (2022-10-23)

Veralterungen

  • #10012: `pytest.PytestUnhandledCoroutineWarning` in eine Verwarnung umgewandelt; wird in pytest 8 einen Fehler auslösen.

  • #10396: pytest hängt nicht mehr von der `py`-Bibliothek ab. `pytest` stellt eine eingebundene Kopie der Module `py.error` und `py.path` bereit, verwendet aber die `py`-Bibliothek, wenn diese installiert ist. Wenn Sie andere `py.*`-Module benötigen, installieren Sie weiterhin die veraltete `py`-Bibliothek separat, andernfalls kann sie als Abhängigkeit normalerweise entfernt werden.

  • #4562: Konfiguration von Hook-Spezifikationen/Implementierungen über Attribute/Markierungen veraltet.

    Verwenden Sie stattdessen `pytest.hookimpl()` und `pytest.hookspec()`. Weitere Details finden Sie in der Dokumentation.

  • #9886: Die Funktionalität zum Ausführen von für `nose` geschriebenen Tests ist offiziell veraltet.

    Dies umfasst

    • Einfache `setup`- und `teardown`-Funktionen und -Methoden: Dies kann Benutzer überraschen, da `setup()` und `teardown()` keine pytest-Idiome sind, sondern Teil der `nose`-Unterstützung.

    • Setup/Teardown mit dem `@with_setup`-Decorator.

    Weitere Details finden Sie in der Veraltungsdokumentation.

  • #7337: Es wird nun eine Verwarnung ausgegeben, wenn eine Testfunktion etwas anderes als `None` zurückgibt. Dies verhindert einen häufigen Fehler bei Anfängern, die erwarten, dass die Rückgabe eines `bool` (z. B. `return foo(a, b) == result`) einen Test bestehen oder fehlschlagen lässt, anstatt `assert` zu verwenden. Der Plan ist, die Rückgabe von Nicht-`None` aus Tests in Zukunft zu einem Fehler zu machen.

Features

  • #9897: Shell-ähnliche Wildcard-Unterstützung für `testpaths` hinzugefügt.

Verbesserungen

  • #10218: `@pytest.mark.parametrize()` (und ähnliche Funktionen) akzeptiert nun jede `Sequence[str]` für die Argumentnamen anstelle von nur `list[str]` und `tuple[str, ...]`.

    (Beachten Sie, dass `str`, das selbst eine `Sequence[str]` ist, weiterhin wie zuvor als kommaseparierte Namensliste behandelt wird).

  • #10381: Das Flag `--no-showlocals` wurde hinzugefügt. Dies kann direkt an Tests übergeben werden, um `--showlocals`, das über `addopts` deklariert wurde, zu überschreiben.

  • #3426: Fehlgeschlagene Assertionen mit Zeichenketten in NFC- und NFD-Formen, die zu derselben Zeichenkette normalisiert werden, haben nun eine spezielle Fehlermeldung, die das Problem detailliert beschreibt, und ihre UTF-8-Darstellung wird stattdessen ausgegeben.

  • #8508: Mehrzeilige Anzeige für Warnungsabgleich über `pytest.warns()` eingeführt und die Übereinstimmungsprüfung für `pytest.ExceptionInfo.match()` verbessert, wie sie von `pytest.raises()` zurückgegeben wird.

  • #8646: `pytest.raises()` verbessert. Zuvor führte die Übergabe eines leeren Tupels zu einem verwirrenden Fehler. Wir lösen nun sofort mit einer hilfreicheren Nachricht aus.

  • #9741: Unter Python 3.11 wird die Standardbibliothek `tomllib` zum Parsen von TOML verwendet.

    tomli ist unter Python 3.11 keine Abhängigkeit mehr.

  • #9742: Assertion-Nachricht ohne maskierte Zeilenumbruchzeichen mit `-vv` anzeigen.

  • #9823: Verbesserte Fehlermeldung, die angezeigt wird, wenn für eine gegebene Datei kein Collector gefunden wird.

  • #9873: Dem Kurzbericht über Testergebnisse wurde eine Farbanzeige hinzugefügt.

  • #9883: Hilfe-Beschreibung aller Kommandozeilenoptionen normalisieren.

  • #9920: Vollständige Absturzmeldungen im Kurzbericht über Testergebnisse anzeigen, wenn in einer CI-Umgebung ausgeführt.

  • #9987: Unterstützung für versteckte Konfigurationsdateien hinzugefügt, indem `.pytest.ini` als Alternative zu `pytest.ini` erlaubt wird.

Fehlerbehebungen

  • #10150: `sys.stdin` enthält nun alle erwarteten Methoden eines dateiähnlichen Objekts, wenn die Erfassung aktiviert ist.

  • #10382: Kein Aufruf von pdb, wenn `raise unittest.SkipTest()` auf oberster Ebene in einer Datei erscheint.

  • #7792: Markierungen werden nun entsprechend der vollständigen MRO in Testklassen vererbt. Zuvor, wenn eine Testklasse von zwei oder mehr Klassen erbte, galten nur Markierungen von der ersten Oberklasse.

    Beim Vererben von Markierungen von Oberklassen werden Markierungen von den Unterklassen nun vor den Markierungen von den Oberklassen in MRO-Reihenfolge sortiert. Zuvor war es umgekehrt.

    Beim Vererben von Markierungen von Oberklassen enthält das `pytestmark`-Attribut der Unterklasse nun nur die direkt darauf angewendeten Markierungen. Zuvor enthielt es auch Markierungen von ihren Oberklassen. Bitte beachten Sie, dass auf dieses Attribut normalerweise nicht direkt zugegriffen werden sollte; verwenden Sie stattdessen `Node.iter_markers`.

  • #9159: Innere Ausnahmen werden angezeigt, indem die native Anzeige in `ExceptionGroups` erzwungen wird, auch wenn andere Anzeigeoptionen als `--tb=native` verwendet werden. Ein temporärer Schritt vor der vollständigen Implementierung der nativen pytest-Anzeige für innere Ausnahmen in `ExceptionGroups`.

  • #9877: Sicherstellen, dass `caplog.get_records(when)` nach dem Aufruf von `caplog.clear()` aktuelle/korrekte Daten zurückgibt.

Verbesserte Dokumentation

  • #10344: Informationen zum Schreiben von Plugins aktualisiert, um `pyproject.toml` anstelle von `setup.py` zu verwenden.

  • #9248: Die Dokumentation wird nun mit Sphinx 5.x (bisher 3.x) erstellt.

  • #9291: Dokumentation aktualisiert, wie `pytest.warns()` `DeprecationWarning` beeinflusst.

Trivial/Interne Änderungen

  • #10313: _pytest.doctest.DoctestItem exportiert pytest.DoctestItem für Typüberprüfung und Laufzeitzwecke. _pytest.doctest verwendet interne APIs, um zirkuläre Importe zu vermeiden.

  • #9906: _pytest.compat re-exportiert importlib_metadata für Typüberprüfungen.

  • #9910: Behebt eine Warnung für die Standardkodierung (EncodingWarning) in cacheprovider

  • #9984: Verbessert die Fehlermeldung, wenn versucht wird, auf ein Fixture zuzugreifen, das abgebaut wurde. Fügt dem Docstring einen zusätzlichen Satz hinzu, der erklärt, wann es keine gute Idee ist, getfixturevalue aufzurufen.

pytest 7.1.3 (2022-08-31)

Fehlerbehebungen

  • #10060: Bei Ausführung mit --pdb wird TestCase.tearDown nicht mehr für Tests aufgerufen, wenn die *Klasse* über unittest.skip oder pytest.mark.skip übersprungen wurde.

  • #10190: Ungültige XML-Zeichen in Fehler- oder Abbruchmeldungen werden nun ordnungsgemäß für JUnit XML-Berichte escaped.

  • #10230: Ignoriert .py-Dateien, die von pyproject.toml-basierten editierbaren Builds ab pip 21.3 erstellt wurden.

  • #3396: Doctests berücksichtigen nun das Flag --import-mode.

  • #9514: FixtureRequest.param wird als Any typisiert als Übergangslösung, bis #8073 behoben ist.

  • #9791: Korrigiert die Pfadbehandlungslogik in rewrite.py, die zwar funktional war, aber inkorrekt war und auf einigen Systemen fehlschlug.

  • #9917: Korrigiert die String-Darstellung für pytest.approx() beim Vergleichen von Tupeln.

Verbesserte Dokumentation

  • #9937: Expliziter Hinweis, dass das tmpdir-Fixture zugunsten von tmp_path nicht mehr empfohlen wird.

Trivial/Interne Änderungen

pytest 7.1.2 (2022-04-23)

Fehlerbehebungen

  • #9726: Ein unnötiger numpy-Import innerhalb von pytest.approx() wurde entfernt.

  • #9820: Korrigiert den Vergleich von dataclasses mit InitVar.

  • #9869: Erhöht stacklevel für die Deprecation NODE_CTOR_FSPATH_ARG, um auf den Code des Benutzers und nicht auf pytest zu zeigen.

  • #9871: Behebt einen seltsamen (und glücklicherweise seltenen) Fehler, bei dem das temp_path-Fixture einen internen Fehler auslösen konnte, als versucht wurde, den Benutzernamen des aktuellen Benutzers abzurufen.

pytest 7.1.1 (2022-03-17)

Fehlerbehebungen

  • #9767: Korrigiert eine Regression in pytest 7.1.0, bei der einige conftest.py-Dateien außerhalb des Quellbaums (z. B. im site-packages-Verzeichnis) nicht berücksichtigt wurden.

pytest 7.1.0 (2022-03-13)

Abbruch-Änderungen

  • #8838: Gemäß unserer Richtlinie wurden die folgenden Funktionen in der 6.X-Serie als veraltet markiert und sind nun entfernt:

    • pytest._fillfuncargs Funktion.

    • pytest_warning_captured Hook – verwenden Sie stattdessen pytest_warning_recorded.

    • -k -foobar Syntax – verwenden Sie stattdessen -k 'not foobar'.

    • -k foobar: Syntax.

    • pytest.collect Modul – importieren Sie direkt aus pytest.

    Weitere Informationen finden Sie unter Veraltete Funktionen und Entfernungen in der Dokumentation.

  • #9437: Unterstützung für Python 3.6 wurde eingestellt, das am 23.12.2021 sein End-of-Life erreicht hat.

Verbesserungen

  • #5192: Korrigierte Testausgabe für einige Datentypen, bei denen -v weniger Informationen anzeigte.

    Außerdem produzierte -q bei der Anzeige von Diffs für Sequenzen vollständige Diffs anstelle der erwarteten.

  • #9362: pytest vermeidet nun spezialisierte Assertionsformatierung, wenn erkannt wird, dass __eq__ in attrs oder dataclasses überschrieben wurde.

  • #9536: Wenn -vv auf der Kommandozeile angegeben wird, werden Überspringungs- und xfail-Gründe vollständig angezeigt, anstatt sie abzuschneiden, um in die Terminalbreite zu passen.

  • #9644: Mehr Informationen über den Speicherort von Ressourcen, die Python dazu veranlassten, ResourceWarning auszulösen, können nun durch Aktivieren von tracemalloc erhalten werden.

    Weitere Informationen finden Sie unter Ressourcenwarnungen.

  • #9678: Mehr Typen werden nun im ids-Argument für @pytest.mark.parametrize akzeptiert. Zuvor wurden nur str, float, int und bool akzeptiert; nun werden auch bytes, complex, re.Pattern, Enum und alles mit einem __name__ akzeptiert.

  • #9692: pytest.approx() löst nun einen TypeError aus, wenn eine ungeordnete Sequenz (wie ein set) übergeben wird.

    Beachten Sie, dass dies bedeutet, dass benutzerdefinierte Klassen, die nur __iter__ und __len__ implementieren, nicht mehr unterstützt werden, da sie keine Reihenfolge garantieren.

Fehlerbehebungen

  • #8242: Die Veralterung des Auslösens von unittest.SkipTest zum Überspringen der Sammlung von Tests während der pytest-Sammlungsphase wird rückgängig gemacht – dies ist nun wieder eine unterstützte Funktion.

  • #9493: Symlink-Komponenten werden in conftest-Pfaden nicht mehr aufgelöst. Das bedeutet, dass, wenn ein conftest im Sammlungsbaum zweimal vorkommt und Symlinks verwendet, dieser zweimal ausgeführt wird. Zum Beispiel, gegeben

    tests/real/conftest.py tests/real/test_it.py tests/link -> tests/real

    führt die Ausführung von pytest tests nun den conftest zweimal ein, einmal als tests/real/conftest.py und einmal als tests/link/conftest.py. Dies ist eine Korrektur, um eine ähnliche Änderung zu replizieren, die an der Testsammlung selbst in pytest 6.0 vorgenommen wurde (siehe #6523 für Details).

  • #9626: Korrigiert die Zählung der ausgewählten Tests in der Terminal-Sammlungszusammenfassung, wenn es Fehler oder übersprungene Module gab.

    Wenn es Fehler oder übersprungene Module bei der Sammlung gab, würde pytest diese fälschlicherweise von der ausgewählten Anzahl abziehen.

  • #9645: Behebt eine Regression, bei der --import-mode=importlib zusammen mit der Umgebungsvariable PYTHONPATH oder dem Konfigurationswert pythonpath zu Importfehlern in Testsuiten führte.

  • #9708: Das pytester-Fixture fordert nun ein monkeypatch-Fixture an, anstatt eines intern zu erstellen. Dies löst einige Probleme mit Tests, die pytest-Umgebungsvariablen betreffen.

  • #9730: Fehlerhafte pyproject.toml-Dateien erzeugen nun eine klarere Fehlermeldung.

pytest 7.0.1 (2022-02-11)

Fehlerbehebungen

  • #9608: Behebt ungültigen Import von importlib.readers in Python 3.9.

  • #9610: Stellt UnitTestFunction.obj wieder her, um eine ungebundene statt eine gebundene Methode zurückzugeben. Behebt einen Absturz während eines fehlgeschlagenen Abbruchs in unittest TestCases mit nicht standardmäßigem __init__. Regrediert in pytest 7.0.0.

  • #9636: Das Plugin pythonpath wurde in python_path umbenannt. Dies vermeidet einen Konflikt mit dem Plugin pytest-pythonpath.

  • #9642: Korrigiert die Ausführung von Tests nach ID mit :: im parametrierten Teil.

  • #9643: Verzögert die Ausgabe einer PytestWarning bezüglich Mehrfachvererbung, die Item und Collector betrifft, damit diese mit Standard-Warnungsfiltern gefiltert werden kann.

pytest 7.0.0 (2022-02-03)

(**Bitte beachten Sie die vollständige Liste der Änderungen für diese Version auch in den 7.0.0rc1-Hinweisen unten**)

Veralterungen

Fehlerbehebungen

  • #9355: Korrigiert die Fehlermeldung, die Funktionsdekoratoren druckt, wenn assert in Python 3.8 und höher verwendet wird.

  • #9396: Stellt sicher, dass pytest.Config.inifile während des pytest_cmdline_main Hooks verfügbar ist (Regression während 7.0.0rc1).

Verbesserte Dokumentation

  • #9404: Zusätzliche Dokumentation zu Alternativen zu häufigen Missbräuchen von pytest.warns(None) vor dessen Veraltung hinzugefügt.

  • #9505: Klärung, wo sich die Konfigurationsdateien befinden. Um Verwirrung zu vermeiden, erwähnt die Dokumentation, dass sich die Konfigurationsdatei im Stammverzeichnis des Repositorys befindet.

Triviale/interne Änderungen

  • #9521: Hinzufügen von Testabdeckung zum Assertion Rewrite Pfad.

pytest 7.0.0rc1 (2021-12-06)

Wesentliche Änderungen

  • #7259: Der Rückgabetyp des ersten Werts der Funktion Node.reportinfo() wurde von py.path.local | str zu os.PathLike[str] | str erweitert.

    Die meisten Plugins, die sich auf reportinfo() beziehen, definieren es nur als Teil einer benutzerdefinierten pytest.Item-Implementierung. Da py.path.local ein os.PathLike[str] ist, sind diese Plugins nicht betroffen.

    Plugins und Benutzer, die reportinfo() aufrufen, den ersten Rückgabewert verwenden und ihn als py.path.local behandeln, müssten dies durch Aufruf von py.path.local(fspath) anpassen. Vorzugsweise sollte jedoch das ältere py.path.local vermieden und stattdessen pathlib.Path verwendet werden oder item.location oder item.path.

    Hinweis: pytest konnte für diese Änderung keine Abgabefrist bereitstellen.

  • #8246: --version schreibt Versionsinformationen nun nach stdout anstelle von stderr.

  • #8733: Entfernen eines Workarounds für pyreadline, der es mit --pdb funktionierte.

    Der Workaround wurde 2015 in #1281 eingeführt. Seitdem scheint pyreadline nicht mehr gepflegt zu werden, generiert Warnungen und wird unter Python 3.10 nicht mehr funktionieren.

  • #9061: Die Verwendung von pytest.approx() in einem booleschen Kontext löst nun einen Fehler aus, der auf die richtige Verwendung hinweist.

    Es ist anscheinend üblich, dass Benutzer versehentlich pytest.approx wie folgt verwenden:

    assert pytest.approx(actual, expected)
    

    Während die korrekte Verwendung lautet:

    assert actual == pytest.approx(expected)
    

    Die neue Fehlermeldung hilft, diese Fehler zu erkennen.

  • #9277: Der Collector-Typ pytest.Instance wurde entfernt. Der Import von pytest.Instance oder _pytest.python.Instance gibt einen Dummy-Typ zurück und gibt eine Deprecation-Warnung aus. Einzelheiten finden Sie unter Der pytest.Instance Collector.

  • #9308: **PytestRemovedIn7Warning Deprecation Warnings sind jetzt standardmäßig Fehler.**

    Gemäß unserem Plan, veraltete Funktionen mit so geringen Störungen wie möglich zu entfernen, generieren alle Warnungen vom Typ PytestRemovedIn7Warning standardmäßig Fehler anstelle von Warnmeldungen.

    **Die betroffenen Funktionen werden effektiv in pytest 7.1 entfernt**, konsultieren Sie daher bitte den Abschnitt Deprecations und Entfernungen in der Dokumentation, um Anleitungen zur Aktualisierung bestehender Codes zu erhalten.

    In der pytest 7.0.X-Serie ist es möglich, die Fehler als Übergangsmaßnahme wieder in Warnungen umzuwandeln, indem Sie dies zu Ihrer pytest.ini-Datei hinzufügen:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestRemovedIn7Warning
    

    Dies wird jedoch aufhören zu funktionieren, wenn pytest 7.1 veröffentlicht wird.

    **Wenn Sie Bedenken** hinsichtlich der Entfernung einer bestimmten Funktion haben, hinterlassen Sie bitte einen Kommentar zu #9308.

Deprecations

  • #7259: py.path.local-Argumente für Hooks sind veraltet. Detaillierte Informationen finden Sie in der Deprecations-Notiz.

    py.path.local-Argumente für Node-Konstruktoren sind veraltet. Detaillierte Informationen finden Sie in der Deprecations-Notiz.

    Hinweis

    Der Name der Node-Argumente und -Attribute (das neue Attribut ist path) ist das **Gegenteil** der Situation für Hooks (das alte Argument ist path).

    Dies ist ein unglückliches Artefakt aus historischen Gründen, das in zukünftigen Versionen behoben werden sollte, wenn wir die py-Abhängigkeit langsam abschaffen (siehe #9283 für eine ausführlichere Diskussion).

  • #7469: Das direkte Erstellen der folgenden Klassen ist nun veraltet:

    • _pytest.mark.structures.Mark

    • _pytest.mark.structures.MarkDecorator

    • _pytest.mark.structures.MarkGenerator

    • _pytest.python.Metafunc

    • _pytest.runner.CallInfo

    • _pytest._code.ExceptionInfo

    • _pytest.config.argparsing.Parser

    • _pytest.config.argparsing.OptionGroup

    • _pytest.pytester.HookRecorder

    Diese Konstruktoren galten schon immer als privat, geben aber nun eine Deprecation-Warnung aus, die in pytest 8 zu einem harten Fehler werden kann.

  • #8242: Das Auslösen von unittest.SkipTest, um die Sammlung von Tests während der pytest-Sammlungsphase zu überspringen, ist veraltet. Verwenden Sie stattdessen pytest.skip().

    Hinweis: Diese Veraltung betrifft nur die Verwendung von unittest.SkipTest während der Testsammlung. Sie tun dies wahrscheinlich nicht. Die normale Verwendung von unittest.SkipTest / unittest.TestCase.skipTest() / unittest.skip() in unittest-Testfällen wird vollständig unterstützt.

    Hinweis

    Diese Veraltung wurde in pytest 7.1.0 rückgängig gemacht.

  • #8315: Mehrere Verhaltensweisen von Parser.addoption sind nun für die Entfernung in pytest 8 geplant (veraltet seit pytest 2.4.0)

    • parser.addoption(..., help=".. %default ..") - verwenden Sie stattdessen %(default)s.

    • parser.addoption(..., type="int/string/float/complex") - verwenden Sie stattdessen type=int usw.

  • #8447: Das Definieren eines benutzerdefinierten pytest-Knotentyps, der sowohl ein Item als auch ein Collector ist (z.B. File), gibt nun eine Warnung aus. Es wurde nie sinnvoll unterstützt und löst schwer zu debuggende Fehler aus.

    Einzelheiten finden Sie in der Deprecations-Notiz.

  • #8592: pytest_cmdline_preparse ist nun offiziell veraltet. Es wird in einer zukünftigen Version entfernt. Verwenden Sie stattdessen pytest_load_initial_conftests.

    Einzelheiten finden Sie in der Deprecations-Notiz.

  • #8645: pytest.warns(None) ist nun veraltet, da viele Leute es verwendeten, um zu sagen "dieser Code löst keine Warnungen aus", aber es hatte tatsächlich die Auswirkung, zu überprüfen, ob der Code mindestens eine Warnung eines beliebigen Typs auslöst - wie pytest.warns() oder pytest.warns(Warning).

  • #8948: Die Signaturen von pytest.skip(msg=...), pytest.fail(msg=...) und pytest.exit(msg=...) akzeptieren nun ein Argument reason anstelle von msg. Die Verwendung von msg funktioniert weiterhin, ist aber veraltet und wird in einer zukünftigen Version entfernt.

    Dies wurde zur Konsistenz mit pytest.mark.skip und pytest.mark.xfail geändert, die beide reason als Argument akzeptieren.

  • #8174: Die folgenden Änderungen wurden an Typen vorgenommen, die über pytest.ExceptionInfo.traceback erreichbar sind:

    • Die path-Eigenschaft von _pytest.code.Code gibt Path anstelle von py.path.local zurück.

    • Die path-Eigenschaft von _pytest.code.TracebackEntry gibt Path anstelle von py.path.local zurück.

    Für diese Änderung gab es keine Abgabefrist (tut uns leid!).

Funktionen

  • #5196: Tests werden nun in mehr Fällen nach der Definitionsreihenfolge sortiert.

    In einer Klassenhierarchie werden Tests aus Basisklassen nun konsistent vor Tests sortiert, die in ihren Unterklassen definiert sind (umgekehrte MRO-Reihenfolge).

  • #7132: Zwei Umgebungsvariablen PYTEST_THEME und PYTEST_THEME_MODE wurden hinzugefügt, damit Benutzer das verwendete Pygments-Theme anpassen können.

  • #7259: cache.mkdir() wurde hinzugefügt, das dem bestehenden cache.makedir() ähnelt, aber einen pathlib.Path anstelle eines älteren py.path.local zurückgibt.

    Ein paths-Typ wurde zu parser.addini() hinzugefügt, wie in parser.addini("mypaths", "my paths", type="paths"), was dem bestehenden pathlist ähnelt, aber eine Liste von pathlib.Path anstelle von legacy py.path.local zurückgibt.

  • #7469: Die Typen von Objekten, die in Pytest's API verwendet werden, werden nun exportiert, damit sie in Typannotationen verwendet werden können.

    Die neu exportierten Typen sind

    Die direkte Konstruktion der meisten davon wird nicht unterstützt; sie sind nur für die Verwendung in Typannotationen gedacht. Dies führt zu einer Deprecation-Warnung und könnte in pytest 8.0 zu einem Fehler werden.

    Auch die Unterklassifizierung ist nicht unterstützt. Dies wird derzeit nicht zur Laufzeit erzwungen, aber von Typ-Checkern wie mypy erkannt.

  • #7856: --import-mode=importlib funktioniert nun mit Features, die vom Vorhandensein von Modulen in sys.modules abhängen, wie z.B. pickle und dataclasses.

  • #8144: Die folgenden Hooks erhalten nun ein zusätzliches pathlib.Path-Argument, das einem bestehenden py.path.local-Argument entspricht

    Hinweis

    Der Name der Node-Argumente und -Attribute (das neue Attribut ist path) ist das **Gegenteil** der Situation für Hooks (das alte Argument ist path).

    Dies ist ein unglückliches Artefakt aus historischen Gründen, das in zukünftigen Versionen behoben werden sollte, wenn wir die py-Abhängigkeit langsam abschaffen (siehe #9283 für eine ausführlichere Diskussion).

  • #8251: Implementierung von Node.path als pathlib.Path. Sowohl der alte fspath als auch dieses neue Attribut werden gesetzt, unabhängig davon, ob path oder fspath (veraltet) an den Konstruktor übergeben wird. Es ist ein Ersatz für das Attribut fspath (das denselben Pfad wie py.path.local darstellt). Obwohl fspath aufgrund der laufenden Migration von Methoden wie reportinfo() noch nicht veraltet ist, erwarten wir, dass es in einer zukünftigen Version veraltet wird.

    Hinweis

    Der Name der Node-Argumente und -Attribute (das neue Attribut ist path) ist das **Gegenteil** der Situation für Hooks (das alte Argument ist path).

    Dies ist ein unglückliches Artefakt aus historischen Gründen, das in zukünftigen Versionen behoben werden sollte, wenn wir die py-Abhängigkeit langsam abschaffen (siehe #9283 für eine ausführlichere Diskussion).

  • #8421: pytest.approx() funktioniert nun mit Decimal in Mappings/Dicts und Sequenzen/Listen.

  • #8606: Pytest-Aufrufe mit --fixtures-per-test und --fixtures wurden angereichert mit

    • Der Pfad zum Speicherort der Fixture wird mit dem Namen der Fixture ausgegeben.

    • Der erste Abschnitt der Docstring-Datei der Fixture wird unter dem Namen der Fixture ausgegeben.

    • Der gesamte Docstring der Fixture wird unter dem Namen der Fixture mit der Option --verbose ausgegeben.

  • #8761: Neues Attribut pytest.version_tuple, das es Benutzern erleichtert, etwas zu tun, das von der Pytest-Version abhängt (z. B. Hooks zu deklarieren, die in späteren Versionen eingeführt wurden).

  • #8789: Wechsel des TOML-Parsers von toml zu tomli für TOML v1.0.0 Unterstützung in pyproject.toml.

  • #8920: Hinzugefügt pytest.Stash, eine Einrichtung für Plugins, um ihre Daten auf Config und Nodes auf typsichere und konfliktfreie Weise zu speichern. Weitere Details finden Sie unter Speichern von Daten auf Items über Hook-Funktionen hinweg.

  • #8953: Die Methode RunResult.assert_outcomes() akzeptiert nun ein Argument warnings, um die Gesamtzahl der erfassten Warnungen zu überprüfen.

  • #8954: Das Flag --debug akzeptiert nun eine str-Datei, in die Debug-Protokolle geleitet werden sollen, und ist weiterhin standardmäßig auf pytestdebug.log gesetzt.

  • #9023: Vollständige Diffs werden nun immer für Gleichheitsprüfungen von Iterables angezeigt, wenn CI oder BUILD_NUMBER in der Umgebung gefunden werden, auch wenn -v nicht verwendet wird.

  • #9113: Die Methode RunResult.assert_outcomes() akzeptiert nun ein Argument deselected, um die Gesamtzahl der nicht ausgewählten Tests zu überprüfen.

  • #9114: Hinzugefügt Einstellung pythonpath, die die aufgeführten Pfade für die Dauer der Testsitzung zu sys.path hinzufügt. Wenn Sie derzeit die Plugins pytest-pythonpath oder pytest-srcpaths verwenden, sollten Sie sie durch die integrierte Einstellung pythonpath ersetzen können.

Verbesserungen

  • #7480: Eine Veranlagung, die in einer Hauptversion X (z. B. pytest 7, 8, 9, ...) entfernt werden soll, verwendet nun die Warnungskategorie PytestRemovedInXWarning, eine Unterklasse von PytestDeprecationWarning, anstelle von direkt PytestDeprecationWarning.

    Siehe Richtlinien zur Abwärtskompatibilität für weitere Details.

  • #7864: Verbesserte Fehlermeldungen beim Parsen von Warnungsfiltern.

    Zuvor zeigte pytest einen internen Traceback an, der abgesehen davon, dass er unschön war, manchmal die Ursache des Problems (z. B. einen ImportError beim Importieren eines bestimmten Warnungstyps) verdeckte.

  • #8335: Verbesserte Assertionsmeldungen für Zahlenfolgen in pytest.approx().

    Die Assertionsmeldungen geben nun eine Tabelle mit dem Index und dem Fehler jeder Differenz aus. Beispiel:

    >       assert [1, 2, 3, 4] == pytest.approx([1, 3, 3, 5])
    E       assert comparison failed for 2 values:
    E         Index | Obtained | Expected
    E         1     | 2        | 3 +- 3.0e-06
    E         3     | 4        | 5 +- 5.0e-06
    
  • #8403: Standardmäßig kürzt pytest lange Zeichenketten in Assertionsfehlern, damit diese die Ausgabe nicht zu sehr überladen, derzeit auf standardmäßig 240 Zeichen.

    In einigen Fällen ist die längere Ausgabe jedoch hilfreich oder sogar entscheidend, um einen Fehler zu diagnostizieren. Die Verwendung von -v erhöht nun den Kürzungsschwellenwert auf 2400 Zeichen, und -vv oder höher deaktiviert die Kürzung vollständig.

  • #8509: Problem behoben, bei dem unittest.TestCase.setUpClass() nicht aufgerufen wurde, wenn ein Test seit pytest 6.2.0 einen / in seinem Namen hatte. (unittest.TestCase.setUpClass())

    Dies bezieht sich auf den Pfadteil in pytest-Knoten-IDs, z. B. TestClass::test_it in der Knoten-ID tests/test_file.py::TestClass::test_it.

    Nun wird nicht mehr davon ausgegangen, dass der Testname / enthält, sondern dass der Testpfad :: nicht enthält. Wir hoffen, dass wir in Zukunft beides ermöglichen können.

  • #8803: Es ist nun möglich, benutzerdefinierten Log-Leveln auf der Kommandozeile Farben hinzuzufügen.

    Durch die Verwendung von add_color_level aus einem pytest_configure Hook können Farben hinzugefügt werden.

    logging_plugin = config.pluginmanager.get_plugin('logging-plugin')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO, 'cyan')
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM, 'blue')
    

    Weitere Informationen finden Sie unter Anpassen von Farben.

  • #8822: Beim Anzeigen von Fixture-Pfaden in --fixtures oder --fixtures-by-test werden Fixtures, die von pytest selbst stammen, nun mit einem gekürzten Pfad angezeigt, anstatt des vollständigen Pfads zur Datei im site-packages-Verzeichnis.

  • #8898: Komplexe Zahlen werden nun wie Gleitkomma- und Ganzzahlen bei der Generierung von Parametrisierungs-IDs behandelt.

  • #9062: --stepwise-skip aktiviert nun implizit --stepwise und kann eigenständig verwendet werden.

  • #9205: pytest.Cache.set() behält nun die Schlüsselreihenfolge bei, wenn Dictionaries gespeichert werden.

Fehlerbehebungen

  • #7124: Problem behoben, bei dem __main__.py einen ImportError auslöste, wenn --doctest-modules angegeben wurde.

  • #8061: Fehlgeschlagene staticmethod-Testfälle behoben, wenn sie von einer übergeordneten Testklasse geerbt wurden.

  • #8192: testdir.makefile akzeptiert nun stillschweigend Werte, die nicht mit . beginnen, um die Abwärtskompatibilität mit älteren pytest-Versionen zu gewährleisten.

    pytester.makefile gibt nun eine klarere Fehlermeldung aus, wenn der . im ext-Argument fehlt.

  • #8258: Problem behoben, bei dem die faulthandler-Unterstützung von pytest keinen Traceback bei Abstürzen ausgab, wenn das faulthandler-Modul bereits beim Start von pytest aktiviert war (z. B. mit python -X dev -m pytest).

  • #8317: Problem behoben, bei dem ungültige Verzeichnissymbole, die von getpass.getuser() abgeleitet wurden, einen OSError auslösten.

  • #8367: Class.from_parent korrigiert, sodass zusätzliche Schlüsselwortargumente an den Konstruktor weitergeleitet werden.

  • #8377: Die Testauswahloptionen pytest -k und pytest -m unterstützen nun das Abgleichen von Namen, die Schrägstriche (/) enthalten.

  • #8384: Der Dekorator @pytest.mark.skip behandelt seine Argumente nun korrekt. Wenn das Argument reason versehentlich sowohl positionsweise als auch als Schlüsselwort übergeben wird (z. B. weil es mit skipif verwechselt wurde), wird nun ein TypeError ausgelöst. Zuvor wurden solche Tests stillschweigend übersprungen und das Positionsargument ignoriert. Zusätzlich wird reason nun korrekt als positionsweise oder Schlüsselwort (anstelle von nur Schlüsselwort) dokumentiert.

  • #8394: Interne Fixtures, die klassisches Setup/Teardown behandeln, verwenden nun private Namen, damit sie bei der Standardaufrufung von --fixtures nicht angezeigt werden (sie werden aber immer noch mit --fixtures -v angezeigt).

  • #8456: Die Konfigurationsoption required_plugins funktioniert nun korrekt, wenn Vorabversionen von Plugins installiert sind, und behauptet nicht mehr fälschlicherweise, dass diese Plugins gar nicht installiert sind.

  • #8464: -c <config file> definiert nun auch korrekt rootdir als das Verzeichnis, das die <config file> enthält.

  • #8503: pytest.MonkeyPatch.syspath_prepend() schlägt nicht mehr fehl, wenn setuptools nicht installiert ist. Es ruft pkg_resources.fixup_namespace_packages nur auf, wenn pkg_resources zuvor importiert wurde, da es sonst nicht benötigt wird.

  • #8548: Korrektur zur Handhabung der Präzisionsbreite in log-cli-format, um die Farbausgabe für bestimmte Formate zu korrigieren.

  • #8796: Interner Fehler beim Überspringen von Doctests behoben.

  • #8983: Die Testauswahloptionen pytest -k und pytest -m unterstützen nun das Abgleichen von Namen, die Backslash (\) enthalten. Backslashes werden wörtlich behandelt, nicht als Escape-Zeichen (die Werte, gegen die abgeglichen wird, sind bereits escaped).

  • #8990: Behebung eines Absturzes von pytest -vv mit einer internen Ausnahme AttributeError: 'str' object has no attribute 'relative_to' in einigen Fällen.

  • #9077: Verwirrende Fehlermeldung behoben, wenn request.fspath / request.path aus einem Sitzungs-Scope-Fixture abgerufen wurde.

  • #9131: Die von --pastebin verwendete URL wurde korrigiert, um bpa.st zu verwenden.

  • #9163: Die Endzeilennummer und der Endspalten-Offset werden nun korrekt für neu geschriebene Assertionsanweisungen gesetzt.

  • #9169: Unterstützung für die files API aus importlib.resources innerhalb neu geschriebener Dateien.

  • #9272: Die Modul-Level-Fixtures setup() und teardown() des Nose-Kompatibilitätsmoduls werden nun nur noch einmal pro Modul aufgerufen, anstatt für jede Testfunktion. Sie werden nun auch aufgerufen, wenn ein Objekt-Level setup/teardown definiert ist.

Verbesserte Dokumentation

  • #4320: Verbesserte Dokumentation für pytester.copy_example.

  • #5105: Automatisch generierte Pytest Plugin-Liste hinzugefügt. Die Liste wird in regelmäßigen Abständen aktualisiert.

  • #8337: Empfehlung des numpy.testing-Moduls in der Dokumentation von pytest.approx().

  • #8655: Der Hilfetext für --pdbcls spiegelt das Verhalten der Option genauer wider.

  • #9210: Falsche Dokumentation bezüglich confcutdir als Konfigurationsoption entfernt: es kann nur über die Kommandozeilenoption --confcutdir gesetzt werden.

  • #9242: Readthedocs-Konfiguration auf eine neuere Ubuntu Version <https://blog.readthedocs.com/new-build-specification/>`__ mit besserer Unicode-Unterstützung für PDF-Dokumente aktualisiert.

  • #9341: Verschiedene Methoden, die häufig für Arbeiten mit Nicht-Python-Tests verwendet werden, sind nun korrekt in den Referenzdokumenten dokumentiert. Sie waren zuvor nicht dokumentiert.

Triviale/Interne Änderungen

  • #8133: Migration zu setuptools_scm 6.x zur Verwendung von SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST für robustere Release-Tools.

  • #8174: Die folgenden Änderungen wurden an internen pytest-Typen/Funktionen vorgenommen:

    • Die Funktion _pytest.code.getfslineno() gibt Path anstelle von py.path.local zurück.

    • Die Funktion _pytest.python.path_matches_patterns() nimmt Path anstelle von py.path.local entgegen.

    • Die Funktion _pytest._code.Traceback.cut() akzeptiert jede os.PathLike[str], nicht nur py.path.local.

  • #8248: Interne Umstrukturierung: python.PyObjMixin erbt nun von nodes.Node, um Typing-Informationen zu übertragen.

  • #8432: Verbesserung der Fehlermeldung, wenn pytest.skip() auf Modul-Ebene verwendet wird, ohne allow_module_level=True zu übergeben.

  • #8818: Stellen Sie sicher, dass regendoc von der Auswahl des TOX_ENV Cache-Verzeichnisses ausschließt, um unabhängige Beispieltestläufe zu gewährleisten.

  • #8913: Das private Attribut CallSpec2._arg2scopenum wurde nach einer internen Refaktorisierung entfernt.

  • #8967: pytest_assertion_pass wird nicht mehr als experimentell betrachtet und zukünftige Änderungen daran werden sorgfältiger geprüft.

  • #9202: Fügt GitHub-Aktion hinzu, um den Coverage-Report an Codecov statt an den Bash-Uploader hochzuladen.

  • #9225: Geändert wurde der Befehl zum Erstellen von sdist- und Wheel-Artefakten: Verwendet das Build-Paket anstelle von setup.py.

  • #9351: Korrektur kleiner Tippfehler in doc/en/example/special.rst.

pytest 6.2.5 (2021-08-29)

Triviale/interne Änderungen

  • #8494: Python 3.10 wird jetzt unterstützt.

  • #9040: Aktiviert Kompatibilität mit pluggy 1.0 oder neuer.

pytest 6.2.4 (2021-05-04)

Fehlerbehebungen

  • #8539: Korrigierte Assertion-Rewriting auf Python 3.10.

pytest 6.2.3 (2021-04-03)

Fehlerbehebungen

  • #8414: pytest erstellte zuvor Verzeichnisse unter /tmp mit weltweit lesbaren Berechtigungen. Das bedeutet, dass jeder Benutzer im System Informationen lesen konnte, die von Tests in temporären Verzeichnissen (wie denen, die von der tmp_path/tmpdir Fixture erstellt wurden) geschrieben wurden. Jetzt werden die Verzeichnisse mit privaten Berechtigungen erstellt.

    pytest benutzte lautlos ein bereits existierendes /tmp/pytest-of-<username>-Verzeichnis, auch wenn es einem anderen Benutzer gehörte. Das bedeutete, dass ein anderer Benutzer ein solches Verzeichnis vorab erstellen und die Kontrolle über das temporäre Verzeichnis eines anderen Benutzers erlangen konnte. Nun führt eine solche Bedingung zu einem Fehler.

pytest 6.2.2 (2021-01-25)

Fehlerbehebungen

  • #8152: Korrigiert, dass "(<Skipped instance>)" als Überspringgrund in der ausführlichen Testzusammenfassungszeile angezeigt wurde, wenn die Begründung leer war.

  • #8249: Korrigiert das faulthandler Plugin für Fälle, in denen mit twisted.logger und pytest --capture=no ausgeführt wird.

pytest 6.2.1 (2020-12-15)

Fehlerbehebungen

  • #7678: Behoben wurde ein Fehler, bei dem ImportPathMismatchError für kompilierte Dateien auf dem Host und später aus einem UNC-gemounteten Pfad (Windows) geladen, ausgelöst wurde.

  • #8132: Behobene Regression in approx: in 6.2.0 löste approx keine TypeError mehr aus, wenn mit nicht-numerischen Typen umgegangen wurde, und fiel auf den normalen Vergleich zurück. Vor 6.2.0 fielen Array-Typen wie tf.DeviceArray in den Skalarfall und verglichen zufällig korrekt mit einem Skalar, wenn sie nur ein Element hatten. Nach 6.2.0 begannen diese Typen zu fehlschlagen, da sie weder von der Standard-Python-Zahlenhierarchie noch von numpy.ndarray erbten.

    approx konvertiert nun Argumente in numpy.ndarray, wenn sie das Array-Protokoll exponieren und keine Skalare sind. Dies behandelt Array-ähnliche Objekte wie NumPy-Arrays, unabhängig von ihrer Größe.

pytest 6.2.0 (2020-12-12)

Abwärtskompatibilität brüchende Änderungen

  • #7808: pytest unterstützt jetzt nur noch Python 3.6+.

Veralterungen

  • #7469: Das direkte Erstellen/Aufrufen der folgenden Klassen/Funktionen ist nun veraltet

    • _pytest.cacheprovider.Cache

    • _pytest.cacheprovider.Cache.for_config()

    • _pytest.cacheprovider.Cache.clear_cache()

    • _pytest.cacheprovider.Cache.cache_dir_from_config()

    • _pytest.capture.CaptureFixture

    • _pytest.fixtures.FixtureRequest

    • _pytest.fixtures.SubRequest

    • _pytest.logging.LogCaptureFixture

    • _pytest.pytester.Pytester

    • _pytest.pytester.Testdir

    • _pytest.recwarn.WarningsRecorder

    • _pytest.recwarn.WarningsChecker

    • _pytest.tmpdir.TempPathFactory

    • _pytest.tmpdir.TempdirFactory

    Diese wurden immer als privat betrachtet, geben nun aber eine Veraltungswarnung aus, die in pytest 8.0.0 zu einem harten Fehler werden kann.

  • #7530: Die Befehlszeilenoption --strict ist veraltet, verwenden Sie stattdessen --strict-markers.

    Wir haben Pläne, --strict möglicherweise in Zukunft wieder einzuführen und es zu einer umfassenden Flagge für alle strengheitsbezogenen Optionen zu machen (--strict-markers und --strict-config derzeit, weitere könnten in Zukunft hinzukommen).

  • #7988: Der Dekorator/die Funktion @pytest.yield_fixture ist nun veraltet. Verwenden Sie stattdessen pytest.fixture().

    yield_fixture ist seit langem ein Alias für fixture, kann also gefahrlos gesucht und ersetzt werden.

Funktionen

  • #5299: pytest warnt nun vor nicht abfangbaren Ausnahmen und nicht behandelten Thread-Ausnahmen, die in Tests unter Python>=3.8 auftreten. Weitere Informationen finden Sie unter Warnung vor nicht abfangbaren Ausnahmen und nicht behandelten Thread-Ausnahmen.

  • #7425: Neue pytester Fixture, die identisch mit testdir ist, aber deren Methoden geben pathlib.Path zurück, wo angemessen, anstelle von py.path.local.

    Dies ist Teil der Bewegung zur internen Verwendung von pathlib.Path Objekten, um die Abhängigkeit von py in Zukunft zu entfernen.

    Intern ist das alte pytest.Testdir nun ein dünner Wrapper um Pytester, das die alte Schnittstelle beibehält.

  • #7695: Ein neuer Hook wurde hinzugefügt, pytest_markeval_namespace, der ein Dictionary zurückgeben sollte. Dieses Dictionary wird verwendet, um die "globalen" Variablen zu erweitern, die zur Auswertung von skipif/xfail/xpass Markierungen verfügbar sind.

    Pseudo-Beispiel

    conftest.py:

    def pytest_markeval_namespace():
        return {"color": "red"}
    

    test_func.py:

    @pytest.mark.skipif("color == 'blue'", reason="Color is not red")
    def test_func():
        assert False
    
  • #8006: Es ist nun möglich, ein MonkeyPatch Objekt direkt als pytest.MonkeyPatch() zu konstruieren, in Fällen, in denen die monkeypatch Fixture nicht verwendet werden kann. Zuvor importierten einige Benutzer es aus dem privaten _pytest.monkeypatch.MonkeyPatch Namespace.

    Zusätzlich ist MonkeyPatch.context jetzt eine Klassenmethode und kann als with MonkeyPatch.context() as mp: ... verwendet werden. Dies ist die empfohlene Methode, um MonkeyPatch direkt zu verwenden, da im Gegensatz zur monkeypatch Fixture eine direkt erstellte Instanz nicht automatisch undo() wird.

Verbesserungen

  • #1265: Eine __str__ Implementierung wurde zur Klasse LineMatcher hinzugefügt, die von pytester.run_pytest().stdout und ähnlichem zurückgegeben wird. Sie gibt die gesamte Ausgabe zurück, ähnlich wie die bestehende str() Methode.

  • #2044: Der ausführliche Modus zeigt nun die Begründung für das Überspringen eines Tests in der Terminalzeile des Tests nach "SKIPPED", "XFAIL" oder "XPASS" an.

  • #7469 Die Typen von eingebauten pytest Fixtures werden nun exportiert, damit sie in Typ-Annotationen von Testfunktionen verwendet werden können. Die neu exportierten Typen sind

    • pytest.FixtureRequest für die request Fixture.

    • pytest.Cache für die cache Fixture.

    • pytest.CaptureFixture[str] für die capfd und capsys Fixtures.

    • pytest.CaptureFixture[bytes] für die capfdbinary und capsysbinary Fixtures.

    • pytest.LogCaptureFixture für die caplog Fixture.

    • pytest.Pytester für die pytester Fixture.

    • pytest.Testdir für die testdir Fixture.

    • pytest.TempdirFactory für die tmpdir_factory Fixture.

    • pytest.TempPathFactory für die tmp_path_factory Fixture.

    • pytest.MonkeyPatch für die monkeypatch Fixture.

    • pytest.WarningsRecorder für die recwarn Fixture.

    Ihr Erstellen wird nicht unterstützt (außer für MonkeyPatch); sie sind nur für die Verwendung in Typ-Annotationen gedacht. Dies wird eine Veraltungswarnung ausgeben und in pytest 8.0 zu einem harten Fehler werden.

    Auch die Unterklassifizierung ist nicht unterstützt. Dies wird derzeit nicht zur Laufzeit erzwungen, aber von Typ-Checkern wie mypy erkannt.

  • #7527: Wenn ein Vergleich zwischen namedtuple Instanzen desselben Typs fehlschlägt, zeigt pytest nun die abweichenden Feldnamen (möglicherweise verschachtelt) anstelle ihrer Indizes an.

  • #7615: Node.warn erlaubt nun jede Unterklasse von Warning, nicht nur PytestWarning.

  • #7701: Verbesserte Berichterstattung bei Verwendung von --collected-only. Die Anzahl der gesammelten Tests wird nun in den Zusammenfassungsstatistiken angezeigt.

  • #7710: Verwendung von strikter Gleichheitsprüfung für nicht-numerische Typen in pytest.approx() anstelle des Auslösens von TypeError.

    Dies war vor 3.7 ein undokumentiertes Verhalten, ist aber nun offiziell ein unterstütztes Feature.

  • #7938: Neues Argument --sw-skip, das eine Abkürzung für --stepwise-skip ist.

  • #8023: 'node_modules' zum Standardwert für norecursedirs hinzugefügt.

  • #8032: doClassCleanups (eingeführt in unittest in Python und 3.8) wird nun korrekt aufgerufen.

Fehlerbehebungen

  • #4824: Quadratisches Verhalten behoben und Leistung bei der Sammlung von Elementen unter Verwendung von Autouse-Fixtures und xunit-Fixtures verbessert.

  • #7758: Problem behoben, bei dem einige Dateien in Paketen bei Verwendung von --lf verloren gingen, obwohl sie fehlgeschlagene Tests enthielten. Regression in pytest 5.4.0.

  • #7911: Von tmp_path und tmpdir erstellte Verzeichnisse gelten nun nach 3 Tagen ohne Änderung als veraltet (vorher 3 Stunden), um die Löschung von Verzeichnissen zu vermeiden, die in lang laufenden Test-Suiten noch in Gebrauch sind.

  • #7913: Absturz oder Hängenbleiben in pytester.spawn behoben, wenn das Modul readline beteiligt ist.

  • #7951: Behandlung von rekursiven Symlinks beim Sammeln von Tests behoben.

  • #7981: Symlink-Verzeichnisse werden beim Sammeln nun nicht mehr ignoriert. Regression in pytest 6.1.0.

  • #8016: Nur ein Doctest wird beim Verwenden von pytest --doctest-modules path/to/an/__init__.py gesammelt.

Verbesserte Dokumentation

  • #7429: Weitere Informationen und Anwendungsfälle zum Überspringen von Doctests hinzugefügt.

  • #7780: Klassen, die nicht geerbt werden sollen, sind nun in der API-Referenz als final class markiert.

  • #7872: _pytest.config.argparsing.Parser.addini() akzeptiert explizite None und "string".

  • #7878: Im Abschnitt „Pull Request“ wird aufgefordert, nach der Bearbeitung der Changelog- und Autoren-Datei zu committen.

Trivial-/interne Änderungen

  • #7802: Die Abhängigkeitsanforderung attrs ist nun >=19.2.0 anstelle von >=17.4.0.

  • #8014: .pyc-Dateien, die von Pytest's Assertions-Rewriting erstellt werden, entsprechen nun dem neueren Format von PEP 552 auf Python>=3.7. (Diese Dateien sind intern und werden nur von Pytest selbst interpretiert.)

pytest 6.1.2 (2020-10-28)

Fehlerbehebungen

  • #7758: Problem behoben, bei dem einige Dateien in Paketen bei Verwendung von --lf verloren gingen, obwohl sie fehlgeschlagene Tests enthielten. Regression in pytest 5.4.0.

  • #7911: Von tmpdir erstellte Verzeichnisse gelten nun nach 3 Tagen ohne Änderung als veraltet (vorher 3 Stunden), um die Löschung von Verzeichnissen zu vermeiden, die in lang laufenden Test-Suiten noch in Gebrauch sind.

Verbesserte Dokumentation

  • #7815: Deprecation-Warnmeldung für pytest._fillfuncargs() verbessert.

pytest 6.1.1 (2020-10-03)

Fehlerbehebungen

  • #7807: Regression in pytest 6.1.0 behoben, die bei einigen nicht-trivialen Fällen, bei denen übergeordnete Verzeichnisse ebenfalls Konfigurationsdateien hatten, zu einer falschen Ermittlung des `rootdir` führte.

  • #7814: Absturz in der Header-Berichterstattung behoben, wenn testpaths verwendet wird und absolute Pfade enthält (Regression in 6.1.0).

pytest 6.1.0 (2020-09-26)

Breaking Changes

  • #5585: Gemäß unserer Richtlinien sind die folgenden Funktionen, die in der 5.X-Serie als veraltet markiert waren, nun entfernt:

    • Die schreibgeschützte Eigenschaft funcargnames der Klassen FixtureRequest, Metafunc und Function. Verwenden Sie stattdessen das Attribut fixturenames.

    • @pytest.fixture unterstützt keine Positionsargumente mehr. Übergeben Sie alle Argumente stattdessen als Schlüsselwortargumente.

    • Die direkte Konstruktion von Node-Unterklassen löst nun einen Fehler aus. Verwenden Sie stattdessen from_parent.

    • Der Standardwert für junit_family wurde auf xunit2 geändert. Wenn Sie das alte Format benötigen, fügen Sie junit_family=xunit1 zu Ihrer Konfigurationsdatei hinzu.

    • Der TerminalReporter hat kein writer-Attribut mehr. Plugin-Entwickler können die öffentlichen Funktionen des TerminalReporter verwenden, anstatt direkt auf das TerminalWriter-Objekt zuzugreifen.

    • Die Option --result-log wurde entfernt. Benutzern wird empfohlen, stattdessen das Plugin pytest-reportlog zu verwenden.

    Weitere Informationen finden Sie unter Veraltete Funktionen und Entfernungen in der Dokumentation.

Veraltete Funktionen

  • #6981: Das Modul pytest.collect ist veraltet: Alle seine Namen können direkt aus pytest importiert werden.

  • #7097: Die Funktion pytest._fillfuncargs ist veraltet. Diese Funktion wurde zur Abwärtskompatibilität mit einem älteren Plugin beibehalten.

    Ihre Funktionalität ist nicht für den direkten Gebrauch bestimmt, aber wenn Sie sie ersetzen müssen, verwenden Sie stattdessen function._request._fillfixtures(). Beachten Sie jedoch, dass dies keine öffentliche API ist und in Zukunft brechen kann.

  • #7210: Die spezielle Syntax -k '-expr' für -k ist veraltet. Verwenden Sie stattdessen -k 'not expr'.

    Die spezielle Syntax -k 'expr:' für -k ist veraltet. Bitte eröffnen Sie ein Issue, wenn Sie diese verwenden und eine Ersetzung wünschen.

  • #7255: Der Hook pytest_warning_captured ist zugunsten von pytest_warning_recorded veraltet und wird in einer zukünftigen Version entfernt.

  • #7648: Die Methoden gethookproxy() und isinitpath() von FSCollector und Package sind veraltet; verwenden Sie stattdessen self.session.gethookproxy() und self.session.isinitpath(). Dies sollte unter allen Pytest-Versionen funktionieren.

Features

  • #7667: Das neue Kommandozeilenflag --durations-min steuert die minimale Dauer für die Aufnahme in die Liste der langsamsten Tests, die von --durations angezeigt wird. Zuvor war dies fest auf 0.005s codiert.

Verbesserungen

  • #6681: Interne Pytest-Warnungen, die während der frühen Initialisierungsphasen ausgegeben werden, werden nun korrekt behandelt und können über filterwarnings oder --pythonwarnings/-W gefiltert werden.

    Dies behebt auch eine Reihe langjähriger Probleme: #2891, #7620, #7426.

  • #7572: Wenn ein Plugin, das in required_plugins aufgeführt ist, fehlt oder ein unbekannter Konfigurationsschlüssel mit --strict-config verwendet wird, wird nun eine einfache Fehlermeldung anstelle eines Stack-Trace angezeigt.

  • #7685: Zwei neue Attribute rootpath und inipath wurden zu Config hinzugefügt. Diese Attribute sind pathlib.Path-Versionen der vorhandenen Attribute rootdir und inifile und sollten, wo immer möglich, bevorzugt werden.

  • #7780: Öffentliche Klassen, die nicht zum Erben bestimmt sind, sind nun mit @final gekennzeichnet. Code, der von diesen Klassen erbt, löst einen Typüberprüfungsfehler aus (z. B. mypy), funktioniert aber zur Laufzeit weiterhin. Derzeit erscheint die Bezeichnung final nicht in der API-Referenz, wird aber hoffentlich in Zukunft dort erscheinen.

Fehlerbehebungen

  • #1953: Fehler beim Überschreiben eines parametrisierten Fixtures unter gleichzeitiger Wiederverwendung des Super-Fixture-Werts behoben.

    # conftest.py
    import pytest
    
    
    @pytest.fixture(params=[1, 2])
    def foo(request):
        return request.param
    
    
    # test_foo.py
    import pytest
    
    
    @pytest.fixture
    def foo(foo):
        return foo * 2
    
  • #4984: Interner Fehlerabsturz mit IndexError: list index out of range beim Sammeln eines Moduls behoben, das mit einer dekorierten Funktion beginnt, der Dekorator einen Fehler auslöst und Assertions-Rewriting aktiviert ist.

  • #7591: Pylint sollte nicht mehr über nicht implementierte abstrakte Methoden beschweren, wenn von File geerbt wird.

  • #7628: Testsammlung behoben, wenn ein vollständiger Pfad ohne Laufwerksbuchstaben an pytest unter Windows übergeben wurde (z. B. \projects\tests\test.py anstelle von c:\projects\tests\pytest.py).

  • #7638: Behandlung von Kommandozeilenoptionen behoben, die als Pfade erscheinen, aber unter Windows einen OS-weiten Syntaxfehler auslösen, wie z. B. die von pytest-xdist intern verwendeten Optionen.

  • #7742: INTERNALERROR beim Zugriff auf Locals/Globals mit fehlerhaftem exec behoben.

Verbesserte Dokumentation

  • #1477: faq.rst und sein Verweis in contents.rst entfernt.

Trivial-/interne Änderungen

  • #7536: Das interne junitxml-Plugin wurde mit xml.etree.ElementTree neu geschrieben. Die Reihenfolge der Attribute in XML-Elementen kann sich ändern. Einige unnötige Escapes werden nicht mehr durchgeführt.

  • #7587: Die Abhängigkeit vom Paket more-itertools wurde entfernt.

  • #7631: Der Rückgabetyp von capfd.readouterr() (und ähnlichen) ist kein Namedtuple mehr, sollte sich aber in jeder Hinsicht wie eines verhalten. Dies geschah aus technischen Gründen.

  • #7671: Beim Sammeln von Tests findet pytest Testklassen und -funktionen, indem es die Attribute von Python-Objekten (Module, Klassen und Instanzen) untersucht. Um diesen Prozess zu beschleunigen, ignoriert pytest nun eingebaute Attribute (wie __class__, __delattr__ und __new__), ohne die Konfigurationsoptionen python_classes und python_functions zu konsultieren und ohne sie an Plugins über den pytest_pycollect_makeitem-Hook zu übergeben.

pytest 6.0.2 (2020-09-04)

Fehlerbehebungen

  • #7148: Behoben, dass --log-cli potenziell nicht zusammenhängende print-Ausgaben verschlucken konnte.

  • #7672: Behoben, dass der Log-Capturing-Level bei mehrmaligem Aufruf von caplog.set_level falsch wiederhergestellt wurde.

  • #7686: Behoben, dass NotSetType.token als Parameter-ID verwendet wurde, wenn die Parametrisierungsliste leer war. Regression in pytest 6.0.0.

  • #7707: Behebung interner Fehler bei der Behandlung einiger Ausnahmen, die mehrere Zeilen enthalten, oder wenn der Stil mehrere Zeilen verwendet (z. B. --tb=line).

pytest 6.0.1 (2020-07-30)

Fehlerbehebungen

  • #7394: Das Übergeben eines leeren help-Werts an Parser.add_option wird nun akzeptiert, anstatt beim Ausführen von pytest --help abzustürzen. Das Übergeben von None löst einen informativeren TypeError aus.

  • #7558: Behebung des pylint not-callable Lints auf pytest.mark.parametrize() und den anderen eingebauten Markierungen: skip, skipif, xfail, usefixtures, filterwarnings.

  • #7559: Behebung einer Regression in Plugins, die TestReport.longreprtext (wie pytest-html) verwenden, wenn TestReport.longrepr keine Zeichenkette ist.

  • #7569: Behebung, dass der Level des Log-Capturing-Handlers nach einem Aufruf von caplog.set_level() nicht zurückgesetzt wurde.

pytest 6.0.0 (2020-07-28)

(Bitte beachten Sie die vollständige Liste der Änderungen für diese Version auch in den Notizen zu 6.0.0rc1 unten)

Umwälzende Änderungen

  • #5584: PytestDeprecationWarning sind jetzt standardmäßig Fehler.

    Gemäß unserem Plan, veraltete Funktionen mit so geringen Störungen wie möglich zu entfernen, lösen nun alle Warnungen vom Typ PytestDeprecationWarning statt Warnmeldungen Fehler aus.

    Die betroffenen Funktionen werden in pytest 6.1 effektiv entfernt. Bitte konsultieren Sie den Abschnitt Veralterungen und Entfernungen in der Dokumentation, um Anleitungen zur Aktualisierung bestehender Codes zu erhalten.

    In der pytest-Serie 6.0.X ist es möglich, die Fehler als Übergangsmaßnahme zurück in Warnungen zu ändern, indem Sie dies zu Ihrer pytest.ini-Datei hinzufügen

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    Dies wird jedoch bei der Veröffentlichung von pytest 6.1 nicht mehr funktionieren.

    Wenn Sie Bedenken hinsichtlich der Entfernung einer bestimmten Funktion haben, hinterlassen Sie bitte einen Kommentar zu #5584.

  • #7472: Die Methoden exec_() und is_true() von _pytest._code.Frame wurden entfernt.

Funktionen

  • #7464: Unterstützung für die Umgebungsvariablen NO_COLOR und FORCE_COLOR zur Steuerung der farbigen Ausgabe hinzugefügt.

Verbesserungen

  • #7467: Die CLI-Option --log-file und die Ini-Markierung log_file erstellen nun bei Bedarf Unterverzeichnisse.

  • #7489: Die Funktion pytest.raises() hat eine klarere Fehlermeldung, wenn match mit der erhaltenen Zeichenkette übereinstimmt, aber keine Regex-Übereinstimmung ist. In diesem Fall wird vorgeschlagen, die Regex zu escapen.

Fehlerbehebungen

  • #7392: Korrektur des berichteten Speicherorts von Tests, die mit @pytest.mark.skip übersprungen wurden, wenn --runxfail verwendet wurde.

  • #7491: tmpdir und tmp_path lösen keine Fehlermeldung mehr aus, wenn der Sperrmechanismus zur Überprüfung veralteter temporärer Verzeichnisse nicht zugänglich ist.

  • #7517: Beibehaltung von Zeilenumbrüchen, wenn sie über capfd erfasst werden.

  • #7534: Wiederherstellung der vorherigen Formatierung von TracebackEntry.__str__, die versehentlich geändert wurde.

Verbesserte Dokumentation

  • #7422: Klärung, wann die usefixtures-Markierung Fixtures auf Tests anwenden kann.

  • #7441: Hinzufügen einer Notiz zur Option -q, die im Leitfaden für den Einstieg verwendet wird.

Triviale/interne Änderungen

  • #7389: Der Fixture-Bereich package wird nicht mehr als experimentell betrachtet.

pytest 6.0.0rc1 (2020-07-08)

Umwälzende Änderungen

  • #1316: TestReport.longrepr ist nun immer eine Instanz von ReprExceptionInfo. Zuvor war es eine str, wenn ein Test mit pytest.fail(..., pytrace=False) fehlschlug.

  • #5965: Symlinks werden bei der Sammlung und beim Abgleich von conftest.py-Dateien mit Testdateipfaden nicht mehr aufgelöst.

    Das Auflösen von Symlinks für das aktuelle Verzeichnis und während der Sammlung wurde in 3.9.0 als Fehlerbehebung eingeführt, war aber eigentlich eine neue Funktion, die unter Windows unglückliche Folgen und auf anderen Plattformen überraschende Ergebnisse hatte.

    Das Team hat beschlossen, das Auflösen von Symlinks ganz einzustellen und plant, dies in Zukunft mit einer solideren Lösung zu überprüfen (siehe Diskussion in #6523 für Details).

    Dies kann Testsuiten beeinträchtigen, die diese Funktion genutzt haben. Die Lösung besteht darin, einen Symlink für den gesamten Testbaum zu erstellen und nicht nur für partielle Dateien/Bäume, wie es bisher möglich war.

  • #6505: Testdir.run().parseoutcomes() gibt nun immer die analysierten Nomen in Pluralform zurück.

    Ursprünglich gab parseoutcomes() immer die Nomen in Pluralform zurück, aber eine Änderung, die darauf abzielte, die Terminalzusammenfassung zu verbessern, indem singuläre Formen für einzelne Elemente verwendet wurden (1 warning oder 1 error), führte zu einer unbeabsichtigten Regression, indem die von parseoutcomes() zurückgegebenen Schlüssel geändert wurden.

    Jetzt garantiert die API, immer die Pluralform zurückzugeben. Daher müssen Aufrufe wie dieser

    result = testdir.runpytest()
    result.assert_outcomes(error=1)
    

    geändert werden zu

    result = testdir.runpytest()
    result.assert_outcomes(errors=1)
    
  • #6903: Die Funktion os.dup() wird nun als vorhanden angenommen. Uns sind keine unterstützten Python 3-Implementierungen bekannt, die sie nicht bereitstellen.

  • #7040: -k passt nicht mehr gegen die Namen von Verzeichnissen außerhalb des Test-Session-Stamms.

    Außerdem ist pytest.Package.name nun nur noch der Name des Verzeichnisses, das die __init__.py-Datei des Pakets enthält, anstatt des vollständigen Pfads. Dies entspricht der Benennung der anderen Knoten und ist auch einer der Gründe, warum -k gegen jedes Verzeichnis passen würde, das die Testsuite enthält.

  • #7122: Ausdrücke, die an die Optionen -m und -k übergeben werden, werden nicht mehr mit Pythons eval() ausgewertet. Das Format unterstützt or, and, not, Klammern und allgemeine Bezeichner zum Abgleichen. Python-Konstanten, Schlüsselwörter oder andere Operatoren werden nicht mehr unterschiedlich ausgewertet.

  • #7135: Pytest verwendet nun seine eigene Klasse TerminalWriter anstelle derjenigen aus der py-Bibliothek. Plugins greifen im Allgemeinen über TerminalReporter.writer, TerminalReporter.write() (und ähnliche Methoden) oder _pytest.config.create_terminal_writer() auf diese Klasse zu.

    Die folgenden umwälzenden Änderungen wurden vorgenommen

    • Ausgabe (Methode write() und andere) wird nicht mehr implizit geleert; das Leerverhalten der zugrunde liegenden Datei wird beachtet. Um explizit zu leeren (z. B. wenn die Ausgabe vor dem Zeilenumbruch angezeigt werden soll), verwenden Sie write(flush=True) oder terminal_writer.flush().

    • Explizite Windows-Konsolenunterstützung wurde entfernt und an die colorama-Bibliothek delegiert.

    • Unterstützung für das Schreiben von bytes wurde entfernt.

    • Die Methode reline und die Eigenschaft chars_on_current_line wurden entfernt.

    • Die Argumente stringio und encoding wurden entfernt.

    • Unterstützung für die Übergabe eines aufrufbaren Objekts anstelle einer Datei wurde entfernt.

  • #7224: Die Attribute item.catch_log_handler und item.catch_log_handlers, die vom Logging-Plugin gesetzt wurden und nie öffentlich bestimmt waren, sind nicht mehr verfügbar.

    Die veraltete Option --no-print-logs und die INI-Option log_print wurden entfernt. Verwenden Sie stattdessen --show-capture.

  • #7226: Der ungenutzte Parameter args aus pytest.Function.__init__ wurde entfernt.

  • #7418: Die Hook-Spezifikation pytest_doctest_prepare_content wurde entfernt. Dieser Hook wurde von pytest seit mindestens 10 Jahren nicht mehr ausgelöst.

  • #7438: Es wurden einige Änderungen an den internen _pytest._code.source vorgenommen, die hier zum Nutzen von Plugin-Autoren aufgeführt sind, die es möglicherweise verwenden.

    • Das Argument deindent für Source() wurde entfernt, es ist nun immer `true`.

    • Unterstützung für null oder mehrere Argumente für Source() wurde entfernt.

    • Unterstützung für den Vergleich von Source mit einem str wurde entfernt.

    • Die Methoden Source.isparseable() und Source.putaround() wurden entfernt.

    • Die Methode Source.compile() und die Funktion _pytest._code.compile() wurden entfernt; verwenden Sie stattdessen das einfache compile().

    • Die Funktion _pytest._code.source.getsource() wurde entfernt; verwenden Sie stattdessen direkt Source().

Veraltungen

  • #7210: Die spezielle Syntax -k '-expr' für -k ist veraltet. Verwenden Sie stattdessen -k 'not expr'.

    Die spezielle Syntax -k 'expr:' für -k ist veraltet. Bitte eröffnen Sie ein Issue, wenn Sie diese verwenden und eine Ersetzung wünschen.

  • #4049: pytest_warning_captured ist zugunsten des Hooks pytest_warning_recorded veraltet.

Funktionen

  • #1556: pytest unterstützt nun pyproject.toml-Dateien für die Konfiguration.

    Die Konfigurationsoptionen sind ähnlich denen, die in anderen Formaten verfügbar sind, müssen aber in einer [tool.pytest.ini_options]-Tabelle definiert werden, damit sie von pytest erkannt werden.

    # pyproject.toml
    [tool.pytest.ini_options]
    minversion = "6.0"
    addopts = "-ra -q"
    testpaths = [
        "tests",
        "integration",
    ]
    

    Weitere Informationen finden Sie in der Dokumentation.

  • #3342: pytest enthält nun Inline-Typannotationen und stellt sie für Benutzerprogramme bereit. Die meisten benutzerorientierten APIs sowie interner Code sind abgedeckt.

    Wenn Sie einen Typenprüfer wie mypy auf Ihren Tests ausführen, können Sie möglicherweise Typfehler bemerken, die auf eine falsche Verwendung hinweisen. Wenn Sie auf einen Fehler stoßen, der Ihrer Meinung nach falsch ist, melden Sie uns dies bitte in einem Issue.

    Die Typen wurden gegen mypy Version 0.780 entwickelt. Versionen vor 0.750 funktionieren bekanntermaßen nicht. Wir empfehlen die Verwendung der neuesten Version. Andere Typenprüfer funktionieren möglicherweise ebenfalls, sind aber noch nicht offiziell von pytest verifiziert.

  • #4049: Einführung eines neuen Hooks namens pytest_warning_recorded, um Informationen über von dem internen pytest-Warnungsplugin erfasste Warnungen zu übermitteln.

    Dieser Hook soll pytest_warning_captured ersetzen, das veraltet ist und in einer zukünftigen Version entfernt wird.

  • #6471: Neue Kommandozeilenflaggen

    • --no-header: deaktiviert die anfängliche Kopfzeile, einschließlich Plattform, Version und Plugins.

    • --no-summary: deaktiviert die abschließende Testzusammenfassung, einschließlich Warnungen.

  • #6856: Es wird nun eine Warnung ausgegeben, wenn ein unbekannter Schlüssel aus einer Konfigurations-INI-Datei gelesen wird.

    Das Flag --strict-config wurde hinzugefügt, um diese Warnungen als Fehler zu behandeln.

  • #6906: Die Kommandozeilenoption --code-highlight wurde hinzugefügt, um die Codehervorhebung in der Terminalausgabe zu aktivieren/deaktivieren.

  • #7245: Neue Option --import-mode=importlib, die importlib zum Importieren von Testmodulen verwendet.

    Traditionell verwendete pytest __import__, während sys.path geändert wurde, um Testmodule zu importieren (was auch sys.modules als Nebeneffekt ändert), was zwar funktioniert, aber eine Reihe von Nachteilen hat, wie z. B. die Notwendigkeit, dass Testmodule, die nicht in Paketen liegen, eindeutige Namen haben müssen (da sie unter einem eindeutigen Namen in sys.modules liegen müssen).

    --import-mode=importlib verwendet fein granularere Importmechanismen aus importlib, die nicht erfordern, dass pytest sys.path oder sys.modules überhaupt ändert, wodurch viele der Nachteile des vorherigen Modus entfallen.

    Wir beabsichtigen, --import-mode=importlib in zukünftigen Versionen zum Standard zu machen, daher werden Benutzer ermutigt, den neuen Modus auszuprobieren und Feedback (sowohl positiv als auch negativ) in Issue #7245 zu geben.

    Sie können mehr über diese Option in der Dokumentation lesen.

  • #7305: Die neue Konfigurationsoption required_plugins ermöglicht es dem Benutzer, eine Liste von Plugins, einschließlich Versionsinformationen, anzugeben, die für die Ausführung von pytest erforderlich sind. Wenn beim Ausführen von pytest erforderliche Plugins nicht gefunden werden, wird ein Fehler ausgelöst.

Verbesserungen

  • #4375: Der pytest-Befehl unterdrückt nun die Fehlermeldung BrokenPipeError, die an stderr ausgegeben wird, wenn die Ausgabe von pytest über eine Pipe geleitet wird und die Pipe vom Pipe-Zielprogramm geschlossen wird (häufige Beispiele sind less und head).

  • #4391: Verbesserte Präzision der Messung von Testdauern. CallInfo-Objekte haben nun ein neues Attribut <CallInfo>.duration, das mit time.perf_counter() erstellt wird. Dieses Attribut wird verwendet, um das Attribut <TestReport>.duration zu füllen, was genauer ist als das vorherige <CallInfo>.stop - <CallInfo>.start (da diese auf time.time() basieren).

  • #4675: Reiche Vergleiche für Dataclasses und attrs-Klassen sind nun rekursiv.

  • #6285: Die Ausnahme pytest.FixtureLookupError wurde freigelegt, die von request.getfixturevalue() (wobei request ein FixtureRequest-Fixture ist) ausgelöst wird, wenn ein Fixture mit dem angegebenen Namen nicht zurückgegeben werden kann.

  • #6433: Wenn beim Formatieren der Nachricht in einem Logging-Aufruf ein Fehler auftritt, z. B. logging.warning("oh no!: %s: %s", "first") (ein zweites Argument fehlt), propagiert pytest nun den Fehler, was wahrscheinlich dazu führt, dass der Test fehlschlägt.

    Zuvor würde ein solcher Fehler eine Fehlermeldung an stderr ausgeben, die standardmäßig für erfolgreiche Tests nicht angezeigt wird. Diese Änderung macht den Fehler während des Testens sichtbar.

    Sie können dieses Verhalten vorübergehend oder dauerhaft unterdrücken, indem Sie logging.raiseExceptions = False setzen.

  • #6817: Explizite neue Zeilen in Hilfetexten von Kommandozeilenoptionen werden beibehalten, was Plugins eine bessere Kontrolle über die angezeigte Hilfe ermöglicht.

  • #6940: Bei Verwendung der Option --duration ist die Terminalausgabe nun präziser über die Anzahl und Dauer ausgeblendeter Elemente.

  • #6991: Gesammelte Dateien werden nach Berichten von Hooks angezeigt, z. B. dem Status von --lf.

  • #7091: Wenn fd-Capturing verwendet wird, entweder durch --capture=fd oder die Fixtures capfd und capfdbinary, und der Dateideskriptor (0, 1, 2) nicht dupliziert werden kann, wird das FD-Capturing trotzdem durchgeführt. Zuvor würden direkte Schreibvorgänge auf die Dateideskriptoren in diesem Fall fehlschlagen oder verloren gehen.

  • #7119: Beenden mit einem Fehler, wenn das Argument --basetemp leer ist, das aktuelle Arbeitsverzeichnis ist oder eines der übergeordneten Verzeichnisse ist. Dies dient dem Schutz vor versehentlichem Datenverlust, da jedes für dieses Argument angegebene Verzeichnis gelöscht wird.

  • #7128: pytest --version zeigt nun nur die pytest-Version an, während pytest --version --version ausführlichere Informationen, einschließlich Plugins, anzeigt. Dies ist konsistenter mit der Art und Weise, wie andere Tools --version anzeigen.

  • #7133: caplog.set_level() überschreibt nun jedes log_level, das über die CLI oder eine Konfigurationsdatei gesetzt wurde.

  • #7159: caplog.set_level() und caplog.at_level() beeinflussen nun nicht mehr die Ebene der Protokolle, die im Abschnitt Captured log report angezeigt werden.

  • #7348: Verbesserter rekursiver Diff-Bericht für Vergleichs-Asserts auf Dataclasses / attrs.

  • #7385: --junitxml enthält nun die Ursache der Ausnahme im XML-Attribut message für Fehler während des Setups und Teardowns.

    Zuvor

    <error message="test setup failure">
    

    Jetzt

    <error message="failed on setup with &quot;ValueError: Some error during setup&quot;">
    

Fehlerbehebungen

  • #1120: Behebung eines Problems, bei dem Verzeichnisse von tmpdir nicht korrekt entfernt werden, wenn mehrere Instanzen von pytest parallel laufen.

  • #4583: Verhindert Abstürze und liefert eine benutzerfreundliche Fehlermeldung, wenn ein Markerausdruck (-m), der die Aufrufung von eval() auslöst, eine beliebige Ausnahme wirft.

  • #4677: Der im Summary-Bericht für übersprungene Tests angezeigte Pfad ist jetzt immer relativ. Zuvor war er manchmal absolut.

  • #5456: Behebt eine mögliche Race Condition beim Versuch, Sperrdateien zu entfernen, die zum Steuern des Zugriffs auf Ordner verwendet werden, die von tmp_path und tmpdir erstellt wurden.

  • #6240: Behebt ein Problem, bei dem die Protokollierung während des Sammelschrifts zu einer Verdoppelung von Protokollmeldungen nach stderr führte.

  • #6428: Pfade, die in Fehlermeldungen erscheinen, sind nun korrekt, falls sich das aktuelle Arbeitsverzeichnis seit Beginn der Sitzung geändert hat.

  • #6755: Unterstützung für das Löschen von Pfaden mit mehr als 260 Zeichen unter Windows, die innerhalb von tmpdir erstellt wurden.

  • #6871: Behebt Absturz bei erfasstem Output bei Verwendung von capsysbinary.

  • #6909: Macht die von #6330 eingeführte Änderung rückgängig, die verlangte, dass alle Argumente für @pytest.mark.parametrize explizit in der Funktionssignatur definiert werden.

    Die ursprüngliche Änderung zielte darauf ab, ein als unbeabsichtigt/überraschend erwartetes Verhalten zu entfernen, aber es stellte sich heraus, dass viele Leute sich darauf verlassen hatten, sodass die Einschränkung rückgängig gemacht wurde.

  • #6910: Behebt Absturz, wenn Plugins eine unbekannte Statistik bei Verwendung der Option --reportlog zurückgeben.

  • #6924: Stellt sicher, dass ein unittest.IsolatedAsyncioTestCase tatsächlich awaited wird.

  • #6925: Behebt ein Problem, dass TerminalRepr-Instanzen wieder hashbar sind.

  • #6947: Behebt Regression, bei der Funktionen, die mit unittest.TestCase.addCleanup() registriert wurden, bei Testfehlern nicht aufgerufen wurden.

  • #6951: Ermöglicht Benutzern, das veraltete Attribut TerminalReporter.writer weiterhin zu setzen.

  • #6956: Verhindert, dass pytest den Traceback von ConftestImportFailure nach stdout ausgibt.

  • #6991: Behebt Regressionen, bei denen --lf seit pytest 5.4 zu viel filterte.

  • #6992: Macht "tmpdir: clean up indirection via config for factories" #6767 rückgängig, da es pytest-xdist bricht.

  • #7061: Wenn ein erzeugendes Fixture fehlschlägt, einen Wert zu erzeugen, wird ein Fehler bei der Testeinrichtung gemeldet, anstatt abzustürzen.

  • #7076: Der Pfad einer von @pytest.mark.skip übersprungenen Datei im SKIPPED-Bericht ist nun relativ zum Aufrufverzeichnis. Zuvor war er relativ zum Stammverzeichnis.

  • #7110: Korrigiert Regression: asyncbase.TestCase-Tests werden wieder korrekt ausgeführt.

  • #7126: --setup-show löst nun keinen Fehler mehr aus, wenn ein Byte-Wert als parametrize-Parameter verwendet wird, wenn Python mit dem Flag -bb aufgerufen wird.

  • #7143: Korrigiert pytest.File.from_parent, sodass zusätzliche Schlüsselwortargumente an den Konstruktor weitergeleitet werden.

  • #7145: Klassen mit fehlerhaften __getattribute__-Methoden werden bei Fehlern korrekt angezeigt.

  • #7150: Verhindert das Verstecken der zugrunde liegenden Ausnahme, wenn ConfTestImportFailure ausgelöst wird.

  • #7180: Korrigiert _is_setup_py für Dateien, die anders als das Locale kodiert sind.

  • #7215: Behebt Regression, bei der die Ausführung mit --pdb die unittest.TestCase.tearDown()-Methoden für übersprungene Tests aufrufen würde.

  • #7253: Wenn pytest.fixture direkt auf eine Funktion angewendet wird, wie z.B. pytest.fixture(func), und die Argumente autouse oder params ebenfalls übergeben werden, wird die Funktion nicht mehr ignoriert, sondern als Fixture markiert.

  • #7360: Behebt möglicherweise fehlerhafte Auswertung von Zeichenkettenausdrücken, die an pytest.mark.skipif und pytest.mark.xfail übergeben wurden, in seltenen Fällen, in denen dieselbe Zeichenkette verwendet wird, aber auf unterschiedliche globale Werte verweist.

  • #7383: Ausnahmen im gesamten Code wurden behoben, d.h. es wird raise new_exception from old_exception beim Wickeln einer Ausnahme verwendet.

Verbesserte Dokumentation

  • #7202: Der Entwicklungsleitfaden verweist nun auf den beitragsbezogenen Abschnitt der Dokumentation und auf RELEASING.rst auf GitHub.

  • #7233: Fügt eine Notiz zu --strict und --strict-markers und die Präferenz für letzteres hinzu.

  • #7345: Erklärt indirekte Parametrisierung und Marker für Fixtures.

Triviale/Interne Änderungen

  • #7035: Das Attribut originalname von _pytest.python.Function wird nun standardmäßig auf name gesetzt, wenn es nicht explizit angegeben wird, und ist immer gesetzt.

  • #7264: Die Abhängigkeit vom Paket wcwidth wurde entfernt.

  • #7291: py.iniconfig wurde durch iniconfig ersetzt.

  • #7295: src/_pytest/config/__init__.py verwendet nun das Modul warnings zur Meldung von Warnungen anstelle von sys.stderr.write.

  • #7356: Entfernt die letzten internen Verwendungen des veralteten Begriffs „slave“ aus dem alten pytest-xdist.

  • #7357: py>=1.8.2 wird nun benötigt.

pytest 5.4.3 (2020-06-02)

Fehlerbehebungen

  • #6428: Pfade, die in Fehlermeldungen erscheinen, sind nun korrekt, falls sich das aktuelle Arbeitsverzeichnis seit Beginn der Sitzung geändert hat.

  • #6755: Unterstützung für das Löschen von Pfaden mit mehr als 260 Zeichen unter Windows, die innerhalb von tmpdir erstellt wurden.

  • #6956: Verhindert, dass pytest den Traceback von ConftestImportFailure nach stdout ausgibt.

  • #7150: Verhindert das Verstecken der zugrunde liegenden Ausnahme, wenn ConfTestImportFailure ausgelöst wird.

  • #7215: Behebt Regression, bei der die Ausführung mit --pdb die tearDown-Methoden von unittest.TestCase-Unterklassen für übersprungene Tests aufrufen würde.

pytest 5.4.2 (2020-05-08)

Fehlerbehebungen

  • #6871: Behebt Absturz bei erfasstem Output bei Verwendung des capsysbinary fixture.

  • #6924: Stellt sicher, dass ein unittest.IsolatedAsyncioTestCase tatsächlich awaited wird.

  • #6925: Behebt ein Problem, dass TerminalRepr-Instanzen wieder hashbar sind.

  • #6947: Behebt Regression, bei der Funktionen, die mit TestCase.addCleanup registriert wurden, bei Testfehlern nicht aufgerufen wurden.

  • #6951: Ermöglicht Benutzern, das veraltete Attribut TerminalReporter.writer weiterhin zu setzen.

  • #6992: Macht "tmpdir: clean up indirection via config for factories" #6767 rückgängig, da es pytest-xdist bricht.

  • #7110: Korrigiert Regression: asyncbase.TestCase-Tests werden wieder korrekt ausgeführt.

  • #7143: Korrigiert File.from_parent, sodass zusätzliche Schlüsselwortargumente an den Konstruktor weitergeleitet werden.

  • #7145: Klassen mit fehlerhaften __getattribute__-Methoden werden bei Fehlern korrekt angezeigt.

  • #7180: Korrigiert _is_setup_py für Dateien, die anders als das Locale kodiert sind.

pytest 5.4.1 (2020-03-13)

Fehlerbehebungen

  • #6909: Macht die von #6330 eingeführte Änderung rückgängig, die verlangte, dass alle Argumente für @pytest.mark.parametrize explizit in der Funktionssignatur definiert werden.

    Die ursprüngliche Änderung zielte darauf ab, ein als unbeabsichtigt/überraschend erwartetes Verhalten zu entfernen, aber es stellte sich heraus, dass viele Leute sich darauf verlassen hatten, sodass die Einschränkung rückgängig gemacht wurde.

  • #6910: Behebt Absturz, wenn Plugins eine unbekannte Statistik bei Verwendung der Option --reportlog zurückgeben.

pytest 5.4.0 (2020-03-12)

Unterbrechende Änderungen

  • #6316: Die Übereinstimmung von -k AUSDRUCK mit Testnamen ist jetzt nicht mehr case-sensitiv.

  • #6443: Mit -p angegebene Plugins werden nun nach internen Plugins geladen, was dazu führt, dass ihre Hooks *vor* den internen aufgerufen werden.

    Dies macht das Verhalten von -p konsistent mit PYTEST_PLUGINS.

  • #6637: Der lange veraltete Hook pytest_itemstart wurde entfernt.

    Dieser Hook wurde als veraltet markiert und wird von pytest seit über 10 Jahren nicht mehr aufgerufen.

  • #6673: Bedeutung von "+/-" in Fehler-Diffs umgekehrt/korrigiert. "-" bedeutet, dass etwas Erwartetes im Ergebnis fehlt, und "+" bedeutet, dass unerwartete Zusätze im Ergebnis vorhanden sind.

  • #6737: Das Attribut cached_result von FixtureDef wird nun auf None gesetzt, wenn das Ergebnis nicht verfügbar ist, anstatt gelöscht zu werden.

    Wenn Ihr Plugin Prüfungen wie hasattr(fixturedef, 'cached_result') durchführt, z.B. in einer pytest_fixture_post_finalizer-Hook-Implementierung, ersetzen Sie diese durch fixturedef.cached_result is not None. Wenn Sie das Attribut del, setzen Sie es stattdessen auf None.

Veraltungen

  • #3238: Die Option --no-print-logs ist veraltet und soll in einer zukünftigen Version entfernt werden. Wenn Sie --no-print-logs verwenden, probieren Sie bitte --show-capture aus und geben Sie Feedback.

    Die Kommandozeilenoption --show-capture wurde in pytest 3.5.0 eingeführt und ermöglicht die Angabe, wie erfasste Ausgaben angezeigt werden sollen, wenn Tests fehlschlagen: no, stdout, stderr, log oder all (Standard).

  • #571: Veraltet den ungenutzten/kaputten Hook pytest_collect_directory. Er war seit der Entfernung des Directory-Collectors im Jahr 2010 fehlausgerichtet und war falsch/unbrauchbar, sobald die Sammlung von der Testausführung getrennt wurde.

  • #5975: Veraltet die Verwendung direkter Konstruktoren für Nodes.

    Stattdessen werden sie nun über Node.from_parent konstruiert.

    Dieser Übergangsmechanismus ermöglicht es uns, die sehr stark verknüpften Node-Beziehungen zu entwirren, indem wir kontrolliertere Erstellungs-/Konfigurationsmuster erzwingen.

    Als Teil dieser Änderung sind Sitzung/Konfiguration bereits nicht mehr erlaubte Parameter und während wir an den Details arbeiten, müssen wir möglicherweise noch einige weitere verbieten.

    Unterklassen sollten super().from_parent verwenden, wenn sie die Erstellung von Nodes erweitern möchten.

  • #6779: Das Attribut TerminalReporter.writer wurde veraltet und sollte nicht mehr verwendet werden. Dies wurde unbeabsichtigt als Teil der öffentlichen API dieses Plugins offengelegt und bindet es zu stark an py.io.TerminalWriter.

Funktionen

  • #4597: Neue –capture=tee-sys Option, um sowohl Live-Ausgabe als auch Erfassung von Testergebnissen zu ermöglichen.

  • #5712: Nun müssen alle Argumente für @pytest.mark.parametrize explizit in der Funktionssignatur oder über indirect deklariert werden. Zuvor war es möglich, ein Argument wegzulassen, wenn eine Fixture mit demselben Namen existierte, was lediglich ein Implementierungszufall war und nicht Teil der API sein sollte.

  • #6454: Der Standardwert für -r wurde auf fE geändert, was Fehler und Ausnahmen in der kurzen Testzusammenfassung anzeigt. -rN kann verwendet werden, um dies zu deaktivieren (das alte Verhalten).

  • #6469: Neue Optionen wurden zur junit_logging Option hinzugefügt: log, out-err und all.

  • #6834: Überschüssige Warnzusammenfassungen werden nun pro Datei zusammengeklappt, um eine lesbare Anzeige der Warnzusammenfassungen zu gewährleisten.

Verbesserungen

  • #1857: pytest.mark.parametrize akzeptiert wieder Ganzzahlen für ids und konvertiert sie in Zeichenketten.

  • #449: Verwenden Sie „gelb“ als Hauptfarbe für alle XPASSED-Tests.

  • #4639: Rückgängigmachen von „Es wird nun eine Warnung ausgegeben, wenn Assertions für None gemacht werden“.

    Die Warnung erwies sich als weniger nützlich als ursprünglich erwartet und hatte ziemlich viele Fehlalarme.

  • #5686: tmpdir_factory.mktemp schlägt nun fehl, wenn absolute und nicht normalisierte Pfade übergeben werden.

  • #5984: Der pytest_warning_captured Hook empfängt nun einen location Parameter mit dem Codeort, der die Warnung generiert hat.

  • #6213: pytester: Die testdir Fixture respektiert Umgebungseinstellungen von der monkeypatch Fixture für innere Ausführungen.

  • #6247: --fulltrace wird bei Sammlungsfehlern berücksichtigt.

  • #6384: --showlocals funktioniert nun auch mit --tb=short.

  • #6653: Unterstützung für das aufeinanderfolgende Abgleichen von Zeilen mit den Methoden fnmatch_lines() und re_match_lines() von pytest.LineMatcher hinzugefügt.

  • #6658: Code wird nun in Tracebacks hervorgehoben, wenn pygments installiert ist.

    Benutzer werden ermutigt, pygments in ihrer Umgebung zu installieren und Feedback zu geben, da geplant ist, pygments zukünftig zu einer regulären Abhängigkeit zu machen.

  • #6795: Fehlermeldung bei Importnutzung mit ungültiger -o Option.

  • #759: pytest.mark.parametrize unterstützt Iteratoren und Generatoren für ids.

Fehlerbehebungen

  • #310: Unterstützung für das Aufrufen von pytest.xfail() und pytest.importorskip() mit Doctests hinzugefügt.

  • #3823: --trace funktioniert nun mit Unittests.

  • #4445: Einige von pytest erzeugte Warnungsberichte wurden korrigiert, um auf den korrekten Speicherort der Warnung im Benutzercode zu verweisen.

  • #5301: --last-failed wurde korrigiert, um neue Tests aus Dateien mit bekannten Fehlern zu sammeln.

  • #5928: PytestUnknownMarkWarning wird auf der Ebene des Benutzercodes und nicht auf der von pytest gemeldet.

  • #5991: Interaktion mit --pdb und Unittests korrigiert: Verwenden Sie nicht TestCase.debug() von unittest.

  • #6334: Doppelte Zusammenfassungszeilen, die bei gleichzeitiger Verwendung von f/F und s/S Berichtzeichen in der -r Kommandozeilenoption (z.B. -rFf) aufgetreten sind, wurden korrigiert.

    Die Großbuchstabenvarianten waren nie dokumentiert und die bevorzugte Form sollte die Kleinbuchstabenform sein.

  • #6409: Fallback zu grün (anstelle von gelb) für nicht letzte Elemente ohne vorherige Durchläufe mit farbigem Terminal-Fortschrittsanzeiger.

  • #6454: --disable-warnings wird mit -ra und -rA berücksichtigt.

  • #6497: Fehler bei der Verknüpfung des Anforderungsschlüssels mit dem zwischengespeicherten Schlüssel in der Fixture korrigiert.

    Ein Konstrukt if key == cached_key: kann fehlschlagen, entweder weil == explizit nicht erlaubt ist, oder z.B. für NumPy-Arrays, wo das Ergebnis von a == b im Allgemeinen nicht in ein bool konvertiert werden kann. Die implementierte Korrektur ersetzt == durch is.

  • #6557: Die .write() Methode der Capture-Ausgabeströme gibt nun denselben Rückgabewert wie die ursprünglichen Ströme zurück.

  • #6566: EncodedFile.writelines wurde korrigiert, um die writelines Methode des zugrunde liegenden Puffers aufzurufen.

  • #6575: Interner Absturz bei initialisiertem faulthandler (z.B. mit der Umgebungsvariable PYTHONFAULTHANDLER=1) und definierter faulthandler_timeout in der Konfigurationsdatei, behoben.

  • #6597: Knoten-IDs, die eine parametrisierte leere Zeichenkette enthalten, korrigiert.

  • #6646: Assertion-Rewriting-Hooks werden für das aktuelle Element (wieder-)hergestellt, was korrigiert, dass sie nach z.B. testdir.runpytest usw. von pytester weiterhin verwendet werden.

  • #6660: pytest.exit() wird behandelt, wenn er vom pytest_sessionfinish Hook ausgelöst wird. Dies beinhaltet das Beenden aus einem Debugger.

  • #6752: Wenn pytest.raises() als Funktion (im Gegensatz zu einem Kontextmanager) verwendet wird, wird nun ein match Schlüsselwortargument an die getestete Funktion weitergegeben. Zuvor wurde es verschluckt und ignoriert (Regression in pytest 5.1.0).

  • #6801: Keine leeren Zeilen zwischen Tracebacks für unerwartete Ausnahmen mit Doctests anzeigen.

  • #6802: Die testdir fixture funktioniert nun innerhalb von Doctests.

Verbesserte Dokumentation

  • #6696: Liste der Fixtures am Anfang des Fixture-Kapitels hinzugefügt.

  • #6742: Erster Satz zu Fixtures zu einem Absatz erweitert.

Trivial/Interne Änderungen

  • #6404: Verwendung des parser Moduls entfernt, das in Python 3.9 als veraltet markiert wurde.

pytest 5.3.5 (2020-01-29)

Fehlerbehebungen

  • #6517: Regression in pytest 5.3.4 behoben, die einen INTERNALERROR aufgrund einer falschen Assertion verursachte.

pytest 5.3.4 (2020-01-20)

Fehlerbehebungen

  • #6496: Rückgängigmachen von #6436: Leider hat diese Änderung eine Reihe von Regressionen in vielen Suiten verursacht, daher hat das Team beschlossen, diese Änderung rückgängig zu machen und eine neue Version zu veröffentlichen, während wir weiterhin nach einer Lösung suchen.

pytest 5.3.3 (2020-01-16)

Fehlerbehebungen

  • #2780: Erfasste Ausgaben während des Teardowns werden mit -rP angezeigt.

  • #5971: Behebung eines Absturzes von pytest-xdist beim Umgang mit Ausnahmen, die in von multiprocessing erstellten Subprozessen ausgelöst werden.

  • #6436: FixtureDef-Objekte registrieren nun ordnungsgemäß ihre Finalizer bei Autouse- und parametrisierten Fixtures, die vor ihnen im Fixture-Stack ausgeführt werden, sodass sie zur richtigen Zeit und in der richtigen Reihenfolge abgebaut werden.

  • #6532: Korrigierte das Parsen von Ergebnissen, die mehrere Fehler enthalten, mit testdir Ergebnissen (Regression in 5.3.0).

Trivial/Interne Änderungen

  • #6350: Optimierte automatische Umbenennung von Testparameter-IDs.

pytest 5.3.2 (2019-12-13)

Verbesserungen

  • #4639: Rückgängigmachen von „Es wird nun eine Warnung ausgegeben, wenn Assertions für None gemacht werden“.

    Die Warnung erwies sich als weniger nützlich als ursprünglich erwartet und hatte ziemlich viele Fehlalarme.

Fehlerbehebungen

  • #5430: junitxml: Protokolle für fehlgeschlagene Tests werden nun an den junit-Bericht übergeben, falls der Test während der Aufrufphase fehlschlägt.

  • #6290: Die unterstützenden Dateien im Verzeichnis .pytest_cache werden mit --cache-clear beibehalten, was nun nur noch zwischengespeicherte Werte löscht.

  • #6301: Korrigierte Assertion-Rewriting für egg-basierte Distributionen und editable Installationen (pip install --editable).

pytest 5.3.1 (2019-11-25)

Verbesserungen

Fehlerbehebungen

pytest 5.3.0 (2019-11-19)

Veraltungen

  • #6179: Der Standardwert der Option junit_family wird in pytest 6.0 zu "xunit2" geändert, da dies die Version ist, die standardmäßig von modernen Werkzeugen unterstützt wird, die diese Art von Dateien bearbeiten.

    Um den Übergang zu erleichtern, gibt pytest eine Warnung aus, wenn die Option --junitxml in der Befehlszeile angegeben wird, junit_family jedoch nicht explizit in pytest.ini konfiguriert ist.

    Weitere Informationen finden Sie in der Dokumentation.

Funktionen

  • #4488: Das pytest-Team hat das Plugin pytest-reportlog erstellt, das eine neue Option --report-log=DATEI bereitstellt, die während der Ausführung der Testsitzung Report Logs in eine Datei schreibt.

    Jede Zeile des Report Logs enthält ein in sich geschlossenes JSON-Objekt, das einem Testereignis entspricht, wie z. B. einem Sammlungs- oder Testergebnisbericht. Die Datei wird nach dem Schreiben jeder Zeile garantiert geleert, sodass Systeme Ereignisse in Echtzeit lesen und verarbeiten können.

    Das Plugin soll die Option --resultlog ersetzen, die veraltet ist und in einer zukünftigen Version entfernt werden soll. Wenn Sie --resultlog verwenden, probieren Sie bitte pytest-reportlog aus und geben Sie Feedback.

  • #4730: Wenn sys.pycache_prefix (Python 3.8+) gesetzt ist, wird dieser von pytest zum Caching von Testdateien verwendet, die durch den Assertions-Rewriting-Mechanismus geändert wurden.

    Dies erleichtert die Nutzung von gecachten .pyc-Dateien, auch auf Dateisystemen ohne Berechtigungen.

  • #5515: Ermöglicht selektive automatische Einrückung von mehrzeiligen Log-Nachrichten.

    Fügt die Kommandozeilenoption --log-auto-indent, die Konfigurationsoption log_auto_indent und Unterstützung für die Konfiguration des Einrückungsverhaltens pro Eintrag bei Aufrufen von logging.log() hinzu.

    Ändert den Standardwert für automatische Einrückung von "on" zu "off". Dies stellt das ältere Verhalten wieder her, das vor v4.6.0 existierte. Diese Rückkehr zum früheren Verhalten erfolgte, da es besser ist, neue Funktionen, die zu fehlerhaften Tests führen können, explizit und nicht implizit zu aktivieren.

  • #5914: testdir hat zwei neue Funktionen gelernt: no_fnmatch_line() und no_re_match_line().

    Die Funktionen werden verwendet, um sicherzustellen, dass der erfasste Text nicht mit dem angegebenen Muster übereinstimmt.

    Das bisherige Idiom war die Verwendung von re.match()

    result = testdir.runpytest()
    assert re.match(pat, result.stdout.str()) is None
    

    Oder der in-Operator

    result = testdir.runpytest()
    assert text in result.stdout.str()
    

    Aber die neuen Funktionen liefern bei Fehlern die beste Ausgabe.

  • #6057: Toleranzen für komplexe Werte wurden beim Ausgeben von pytest.approx hinzugefügt.

    Zum Beispiel gibt repr(pytest.approx(3+4j)) (3+4j) ± 5e-06 ±180° zurück. Dies ist eine Polardarstellung, die einen Kreis um den erwarteten Wert mit einem Radius von 5e-06 angibt. Damit approx-Vergleiche True zurückgeben, muss der tatsächliche Wert innerhalb dieses Kreises liegen.

  • #6061: Der Pluginmanager wurde als Argument zu pytest_addoption hinzugefügt, damit Hooks beim Einrichten von Kommandozeilenoptionen aufgerufen werden können. Dies ist nützlich, wenn ein Plugin Dinge an ein anderes Plugin kommuniziert, wie z. B. Standardwerte oder welche Menge von Kommandozeilenoptionen hinzugefügt werden soll.

Verbesserungen

  • #5061: Verwendung mehrerer Farben für Terminalzusammenfassungsstatistiken.

  • #5630: Das Beenden von Debuggern wird jetzt in doctest-Items ordnungsgemäß behandelt.

  • #5924: Verbesserte detaillierte Diff-Ausgabe mit Sequenzen.

    Vorher

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E     - ['version', 'version_info', 'sys.version', 'sys.version_info']
    E     + ['version',
    E     +  'version_info',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info']
    

    Nachher

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E       [
    E        'version',
    E        'version_info',
    E        'sys.version',
    E        'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E       ]
    
  • #5934: Die `repr`-Darstellung von ExceptionInfo-Objekten wurde verbessert, um die `__repr__`-Methode der zugrunde liegenden Ausnahme zu berücksichtigen.

  • #5936: Anzeige der nicht gekürzten Assertionsnachricht mit -vv.

  • #5990: Falsche Pluralbildung in der Testzusammenfassung behoben (z. B. Anzeige von „1 Fehler“ statt „1 Fehler“).

  • #6008: Config.InvocationParams.args ist jetzt immer ein tuple, um besser zu vermitteln, dass es unveränderlich sein sollte und versehentliche Änderungen zu vermeiden.

  • #6023: pytest.main gibt jetzt eine Instanz von pytest.ExitCode zurück, außer wenn benutzerdefinierte Exit-Codes verwendet werden (dann wird immer noch ein int zurückgegeben).

  • #6026: Ausrichtung von Präfixen in der Ausgabe von LineMatcher von pytester.

  • #6059: Sammelfehler werden in der kurzen Testzusammenfassung des Terminals als Fehler (und nicht wie bisher als Fehler) gemeldet.

  • #6069: pytester.spawn überspringt/xfailt Tests unter FreeBSD nicht mehr bedingungslos.

  • #6097: Der Indikator „[...%]“ in der Testzusammenfassung wird jetzt entsprechend der Hauptfarbe der (neuen) mehrfarbigen Zeile eingefärbt.

  • #6116: --co wurde als Synonym für --collect-only hinzugefügt.

  • #6148: atomicwrites wird jetzt nur unter Windows verwendet, wodurch eine Leistungseinbuße bei der Assertions-Rewriting auf Unix behoben wird.

  • #6152: Die Parametrisierung verwendet nun das `__name__`-Attribut jedes Objekts für die ID, falls vorhanden. Zuvor wurde `__name__` nur für Funktionen und Klassen verwendet.

  • #6176: Verbesserte Fehlerberichterstattung mit `Hookrecorder.assertoutcome` von pytester.

  • #6181: Der Grund für eine abgebrochene Sitzung, z. B. mit --maxfail / -x, wird nun in der Testzusammenfassung gemeldet.

  • #6206: Verbesserte Robustheit und Leistung von cache.set.

Fehlerbehebungen

  • #2049: Behebt, dass --setup-plan ungenaue Informationen über die Lebensdauer von Fixtures anzeigte.

  • #2548: Behebt fehlerhafte Zeilenverschiebung von übersprungenen Tests in der Terminalzusammenfassung.

  • #6039: Der PytestDoctestRunner wird nun ordnungsgemäß ungültig gemacht, wenn das Doctest-Plugin dekonfiguriert wird.

    Dies ist wichtig, wenn es mit pytester's runpytest_inprocess verwendet wird.

  • #6047: `BaseExceptions` werden jetzt in saferepr behandelt, was pytest.fail.Exception usw. einschließt.

  • #6074: pytester: Reihenfolge der Argumente in der `rm_rf`-Warnung beim Bereinigen temporärer Verzeichnisse behoben und keine Warnungen für Fehler bei `os.open` ausgegeben.

  • #6189: Behebt das Ergebnis der Methode `getmodpath`.

Triviale/interne Änderungen

  • #4901: RunResult von pytester zeigt nun die Kurzform des `ret`-Attributs an, wenn es sich um einen gültigen `pytest.ExitCode`-Wert handelt.

pytest 5.2.4 (2019-11-15)

Fehlerbehebungen

  • #6194: Behebt fehlerhafte Erkennung von Nicht-Test-__init__.py-Dateien.

  • #6197: Rückgängig machen von "Der erste Test in einem Paket (__init__.py), der mit @pytest.mark.skip markiert ist, wird jetzt korrekt übersprungen.".

pytest 5.2.3 (2019-11-14)

Fehlerbehebungen

  • #5830: Der erste Test in einem Paket (__init__.py), der mit @pytest.mark.skip markiert ist, wird jetzt korrekt übersprungen.

  • #6099: Behebt --trace bei Verwendung mit parametrisierten Funktionen.

  • #6183: Die Verwendung von request als Parametername in @pytest.mark.parametrize liefert jetzt einen benutzerfreundlicheren Fehler.

pytest 5.2.2 (2019-10-24)

Fehlerbehebungen

  • #5206: Behebt --nf, damit bekannte NodeIDs bei teilweiser Testauswahl nicht vergessen werden.

  • #5906: Behebt Absturz bei KeyboardInterrupt während --setup-show.

  • #5946: Problem beim Parametrisieren von Fixtures mit NumPy-Arrays (und möglicherweise anderen sequenzähnlichen Typen) behoben.

  • #6044: `FileNotFoundError`-Ausnahmen werden nun ordnungsgemäß ignoriert, wenn versucht wird, alte temporäre Verzeichnisse zu entfernen, z. B. wenn mehrere Prozesse versuchen, dasselbe Verzeichnis zu entfernen (häufig z. B. mit pytest-xdist).

pytest 5.2.1 (2019-10-06)

Fehlerbehebungen

  • #5902: Behebt Warnungen zu veralteten `cmp`-Attributen in attrs>=19.2.

pytest 5.2.0 (2019-09-28)

Veraltungen

  • #1682: Das Übergeben von Argumenten an `pytest.fixture()` als Positionsargumente ist veraltet – übergeben Sie sie stattdessen als Schlüsselwortargument.

Funktionen

  • #1682: Der Parameter scope von @pytest.fixture kann nun ein aufrufbares Objekt sein, das den Fixture-Namen und das `config`-Objekt als Keyword-only-Parameter empfängt. Weitere Informationen finden Sie in der Dokumentation.

  • #5764: Neues Verhalten der Option --pastebin: Fehler bei der Verbindung zum Pastebin-Server werden gemeldet, ohne dass der pytest-Lauf fehlschlägt.

Fehlerbehebungen

  • #5806: Behebt die Verwendung von „lexer“ beim Hochladen nach bpaste.net aus --pastebin in „text“.

  • #5884: Korrektur von --setup-only und --setup-show für benutzerdefinierte pytest-Elemente.

Triviale/interne Änderungen

  • #5056: Der HelpFormatter verwendet py.io.get_terminal_width für eine bessere Breitenermittlung.

pytest 5.1.3 (18.09.2019)

Fehlerbehebungen

  • #5807: Korrektur für pypy3.6 (nightly) unter Windows.

  • #5811: Korrekte Handhabung von --fulltrace mit pytest.raises.

  • #5819: Windows: Korrektur einer Regression bei conftest-Dateien, deren qualifizierter Name Großbuchstaben enthält (eingeführt durch #5792).

pytest 5.1.2 (30.08.2019)

Fehlerbehebungen

  • #2270: Korrigierte `self`-Referenz in funktionenspezifischen Fixtures, die in Plugin-Klassen definiert sind: Zuvor war `self` eine Referenz auf eine *Test*-Klasse, nicht auf die *Plugin*-Klasse.

  • #570: Langjähriges Problem behoben, bei dem der Fixture-Scope nicht respektiert wurde, wenn indirekte Fixtures bei der Parametrisierung verwendet wurden.

  • #5782: Korrektur eines Dekodierungsfehlers beim Drucken einer Fehlermeldung von --pastebin.

  • #5786: Verkettete Ausnahmen in Test- und Sammlungsberichten werden jetzt korrekt serialisiert, wodurch Plugins wie pytest-xdist diese ordnungsgemäß anzeigen können.

  • #5792: Windows: Korrektur eines Fehlers, der unter bestimmten Umständen auftrat, wenn conftest.py aus einem Arbeitsverzeichnis geladen wurde, dessen Groß-/Kleinschreibung von der im Dateisystem gespeicherten abweicht (z. B. c:\test anstelle von C:\test).

pytest 5.1.1 (20.08.2019)

Fehlerbehebungen

  • #5751: Korrigierter `TypeError` beim Importieren von pytest unter Python 3.5.0 und 3.5.1.

pytest 5.1.0 (15.08.2019)

Entfernungen

  • #5180: Gemäß unserer Richtlinie wurden die folgenden Funktionen in der Serie 4.X als veraltet markiert und nun entfernt:

    • Request.getfuncargvalue: Verwenden Sie stattdessen Request.getfixturevalue.

    • pytest.raises und pytest.warns unterstützen keine Strings mehr als zweiten Parameter.

    • Der Parameter message von pytest.raises.

    • pytest.raises, pytest.warns und ParameterSet.param verwenden jetzt native Keyword-Only-Syntax. Dies kann die Fehlermeldung von früheren Versionen ändern, aber sie lösen weiterhin TypeError bei unbekannten Schlüsselwortargumenten aus.

    • Die globale Variable pytest.config.

    • Die Methode tmpdir_factory.ensuretemp.

    • Der Hook pytest_logwarning.

    • Der Warnungstyp RemovedInPytest4Warning.

    • `request` ist nun ein reservierter Name für Fixtures.

    Weitere Informationen finden Sie unter Veraltete Funktionen und Entfernungen in der Dokumentation.

  • #5565: Nicht mehr benötigter Support-Code für unittest2 entfernt.

    Das Backport-Modul unittest2 ist seit Python 3.3+ nicht mehr notwendig, und der geringe Codeanteil in pytest zur Unterstützung dessen scheint ebenfalls nicht verwendet zu werden: Nach der Entfernung bestehen alle Tests unverändert weiter.

    Obwohl unsere Richtlinie vorsieht, eine Deprecationsperiode einzuführen, bevor Funktionen oder die Unterstützung für Drittanbieterbibliotheken entfernt werden, wurde entschieden, diesen Code in dieser Version zu entfernen, da er offenbar überhaupt nicht verwendet wird (selbst wenn unittest2 von einer Testsuite verwendet wird, die von pytest ausgeführt wird).

    Wenn Sie aufgrund dessen eine Regression erleben, reichen Sie bitte ein Issue ein.

  • #5615: pytest.fail, pytest.xfail und pytest.skip unterstützen keine Bytes mehr für das Nachrichtenargument.

    Dies wurde für Python 2 unterstützt, wo es verlockend war, "message" anstelle von u"message" zu verwenden.

    Python 3-Code übergibt unwahrscheinlich bytes an diese Funktionen. Falls doch, dekodieren Sie diese bitte vorher in einen str.

Features

  • #5564: Neues Attribut Config.invocation_args, das die unveränderten Argumente enthält, die an pytest.main() übergeben wurden.

  • #5576: Neue Option NUMBER für Doctests, um irrelevante Unterschiede bei Gleitkommazahlen zu ignorieren. Inspiriert von Sébastien Boisgéraults numtest-Erweiterung für Doctest.

Verbesserungen

  • #5471: JUnit XML enthält nun einen Zeitstempel und Hostnamen im `testsuite`-Tag.

  • #5707: Die Laufzeit der Testsuite enthält nun eine lesbare Darstellung, wenn sie über 60 Sekunden dauert, zum Beispiel

    ===== 2 failed in 102.70s (0:01:42) =====
    

Fehlerbehebungen

  • #4344: Korrektur von `RuntimeError`/`StopIteration` beim Versuch, ein Paket mit nur einer `__init__.py` zu sammeln.

  • #5115: Warnungen, die während `pytest_configure` ausgegeben werden, werden explizit nicht als Fehler behandelt, auch wenn sie als solche konfiguriert sind, da dies pytest sonst vollständig kaputt macht.

  • #5477: Die von `--junitxml` erzeugte XML-Datei enthält nun korrekt ein `<testsuites>`-Root-Element.

  • #5524: Korrektur eines Problems, bei dem `tmp_path` und `tmpdir` keine Verzeichnisse mit schreibgeschützten Dateien löschten, was dazu führen konnte, dass pytest beim zweiten Ausführen mit der Option `--basetemp` abstürzte.

  • #5537: Ersetzen von `importlib_metadata`-Backports durch `importlib.metadata` aus der Standardbibliothek unter Python 3.8+.

  • #5578: Verbesserung der Typprüfung für einige Ausnahmen auslösende Funktionen (`pytest.xfail`, `pytest.skip` usw.), damit diese bessere Fehlermeldungen liefern, wenn Benutzer Marks verwenden wollten (z. B. `@pytest.xfail` anstelle von `@pytest.mark.xfail`).

  • #5606: Interne Fehler behoben, wenn Testfunktionen mit Objekten gepatcht wurden, die nicht auf Wahrheitswerte mit anderen verglichen werden konnten, wie z. B. NumPy-Arrays.

  • #5634: `pytest.exit` wird nun in `unittest`-Fällen korrekt behandelt. Dies ermöglicht es `unittest`-Fällen, `quit` aus dem pytest pdb korrekt zu verarbeiten.

  • #5650: Verbesserte Ausgabe, wenn das Parsen einer ini-Konfigurationsdatei fehlschlägt.

  • #5701: Korrektur der Sammlung von `staticmethod`-Objekten, die mit `functools.partial` definiert wurden.

  • #5734: Async-Generator-Testfunktionen werden übersprungen und die Warnmeldung wird aktualisiert, um sich auf `async def`-Funktionen zu beziehen.

Verbesserte Dokumentation

  • #5669: Docstring für `Testdir.copy_example` hinzugefügt.

Triviale/interne Änderungen

  • #5095: XML-Dateien der `xunit2`-Familie werden nun gegen das Schema von Pytests eigener Testsuite validiert, um zukünftige Regressionen zu vermeiden.

  • #5516: Cache für die Node-Splitting-Funktion, was die Sammlung in sehr großen Testsuiten verbessern kann.

  • #5603: Vereinfachte interne Klasse `SafeRepr` und Entfernung von totem Code.

  • #5664: Beim Aufrufen der eigenen Testsuite von pytest mit `PYTHONDONTWRITEBYTECODE=1` schlägt der Test `test_xfail_handling` nicht mehr fehl.

  • #5684: Manuelle Handhabung von `OSError.errno` im Code durch neue `OSError`-Unterklassen (`PermissionError`, `FileNotFoundError` usw.) ersetzt.

pytest 5.0.1 (04.07.2019)

Fehlerbehebungen

  • #5479: Verbesserung der Anführungszeichen in der Fehlermeldung bei `raises`-Übereinstimmungsfehlern.

  • #5523: Korrektur der Verwendung mehrerer kurzer Optionen zusammen in der Befehlszeile (z. B. `-vs`) unter Python 3.8+.

  • #5547: `--step-wise` behandelt nun `xfail(strict=True)`-Markierungen korrekt.

Verbesserte Dokumentation

  • #5517: Verbesserung des Abschnitts „Neue Hooks deklarieren“ im Kapitel „Plugins schreiben“

pytest 5.0.0 (28.06.2019)

Wichtig

Diese Version ist eine reine Python3.5+-Version.

Weitere Details finden Sie in unserem Plan zur Unterstützung von Python 2.7 und 3.4.

Entfernungen

  • #1149: Pytest akzeptiert keine Präfixe von Befehlszeilenargumenten mehr, zum Beispiel die Eingabe von pytest --doctest-mod anstelle von --doctest-modules. Dies war zuvor erlaubt, wo `ArgumentParser` es für eindeutig hielt, dies konnte aber aufgrund der verzögerten Verarbeitung von Optionen für Plugins falsch sein. Siehe zum Beispiel die Issues #1149, #3413 und #4009.

  • #5402: **PytestDeprecationWarning sind jetzt standardmäßig Fehler.**

    Gemäß unserem Plan, veraltete Funktionen mit so geringen Störungen wie möglich zu entfernen, lösen nun alle Warnungen vom Typ PytestDeprecationWarning statt Warnmeldungen Fehler aus.

    **Die betroffenen Funktionen werden in pytest 5.1 effektiv entfernt**, konsultieren Sie daher bitte den Abschnitt Veraltete Funktionen und Entfernungen in der Dokumentation, um Anleitungen zur Aktualisierung bestehender Codes zu erhalten.

    In der pytest-Serie 5.0.X ist es möglich, Fehler als Übergangsmaßnahme wieder in Warnungen umzuwandeln, indem Sie Folgendes zu Ihrer pytest.ini-Datei hinzufügen:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    Dies funktioniert jedoch nicht mehr, wenn pytest 5.1 veröffentlicht wird.

    **Wenn Sie Bedenken** bezüglich der Entfernung einer bestimmten Funktion haben, hinterlassen Sie bitte einen Kommentar unter #5402.

  • #5412: ExceptionInfo Objekte (zurückgegeben von pytest.raises) haben nun dieselbe str-Darstellung wie repr, was einige Verwirrung vermeidet, wenn Benutzer print(e) verwenden, um das Objekt zu inspizieren.

    Das bedeutet, Code wie

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e)
    

    Muss geändert werden zu

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e.value)
    

Veraltete Funktionen

  • #4488: Die Entfernung der Option und des Moduls --result-log wurde auf (vorläufig) pytest 6.0 verschoben, da das Team noch keine gute Alternative dafür implementiert hat.

  • #466: Das Attribut funcargnames ist seit pytest 2.3 ein Alias für fixturenames und ist nun auch im Code veraltet.

Funktionen

  • #3457: Neuer Hook pytest_assertion_pass, der mit Kontextinformationen aufgerufen wird, wenn eine Assertion *erfolgreich* ist.

    Dieser Hook ist noch experimentell, verwenden Sie ihn daher mit Vorsicht.

  • #5440: Das Standardmodul faulthandler ist jetzt standardmäßig aktiviert, um Benutzern bei der Diagnose von Abstürzen in C-Modulen zu helfen.

    Diese Funktionalität wurde durch die Integration des externen Plugins pytest-faulthandler in den Kern bereitgestellt. Benutzer sollten dieses Plugin daher aus ihren Anforderungen entfernen, falls es verwendet wurde.

    Weitere Informationen finden Sie in der Dokumentation: Fehlerbehandlungsmodul.

  • #5452: Wenn Warnungen als Fehler konfiguriert sind, erscheinen pytest-Warnungen nun als stammend von pytest. anstatt vom internen Modul _pytest.warning_types..

  • #5125: Die Werte von Session.exitcode werden nun in pytest.ExitCode, einem IntEnum, kodiert. Dies macht den Exit-Code für Konsumentencode verfügbar und ist expliziter als nur die Dokumentation. Benutzerdefinierte Exit-Codes sind weiterhin gültig, sollten aber mit Vorsicht verwendet werden.

    Das Team erwartet nicht, dass diese Änderung Test-Suiten oder Plugins im Allgemeinen beeinträchtigt, außer in esoterischen/spezifischen Szenarien.

    pytest-xdist-Benutzer sollten auf 1.29.0 oder neuer aktualisieren, da pytest-xdist aufgrund dieser Änderung eine Kompatibilitätskorrektur benötigte.

Fehlerbehebungen

  • #1403: Wechsel von imp zu importlib.

  • #1671: Der Name der von der Assertions-Writer-Funktion zwischengespeicherten .pyc-Dateien enthält nun die pytest-Version, um veraltete Caches zu vermeiden.

  • #2761: Berücksichtigt PEP 235 auf nicht-Groß-/Kleinschreibung-sensitiven Dateisystemen.

  • #5078: Testmodule werden bei Verwendung von --pyargs nicht mehr doppelt importiert.

  • #5260: Verbesserter Vergleich von Byte-Strings.

    Beim Vergleichen von Bytes zeigte die Assertions-Nachricht früher den numerischen Byte-Wert an, wenn die Unterschiede angezeigt wurden.

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: 115 != 101
    E         Use -v to get the full diff
    

    Sie zeigt nun stattdessen die tatsächliche ASCII-Darstellung an, was oft nützlicher ist.

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: b's' != b'e'
    E         Use -v to get the full diff
    
  • #5335: Färbt Levelnamen, wenn das Level im Logging-Format mit '%(levelname).Xs' (beschnittene feste Ausrichtung) formatiert wird, wobei X eine ganze Zahl ist.

  • #5354: Behebt pytest.mark.parametrize, wenn argvalues ein Iterator ist.

  • #5370: Rückgängigmachen der Entrollung von all() zur Behebung von NameError bei verschachtelten Comprehensions.

  • #5371: Rückgängigmachen der Entrollung von all() zur Behebung der falschen Behandlung von Generatoren mit if.

  • #5372: Rückgängigmachen der Entrollung von all() zur Behebung der falschen Assertion bei Verwendung von all() in einem Ausdruck.

  • #5383: -q hat wieder einen Einfluss auf den Stil der gesammelten Elemente (--collect-only), wenn --log-cli-level verwendet wird.

  • #5389: Behebt Regressionen von #5063 für importlib_metadata.PathDistribution, deren Attribut files None ist.

  • #5390: Behebt Regression, bei der das Attribut obj von TestCase-Elementen nicht mehr an Methoden gebunden war.

  • #5404: Gibt eine Warnung aus, wenn beim Versuch, ein fehlerhaftes Objekt zu entpacken, eine Ausnahme ausgelöst wird, zur leichteren Fehlersuche (#5080).

  • #5432: Verhindert "bereits importierte" Warnungen vom Assertions-Rewriter beim mehrmaligen Aufruf von pytest prozessintern.

  • #5433: Behebt Assertions-Rewriting in Paketen (__init__.py).

  • #5444: Behebt den --stepwise-Modus, wenn die erste auf der Kommandozeile übergebene Datei nicht gesammelt werden kann.

  • #5482: Behebt einen Fehler, der in 4.6.0 eingeführt wurde und zu Sammlungsfehlern führte, wenn mehr als 2 Positionsargumente an pytest.mark.parametrize übergeben wurden.

  • #5505: Behebt Absturz bei fehlgeschlagener Suche, wenn -p no:terminal verwendet wird.

Verbesserte Dokumentation

  • #5315: Erweitert die Dokumentation zum Mocking von Klassen und Dictionaries mit monkeypatch.

  • #5416: Behebt PytestUnknownMarkWarning im Beispiel für run/skip.

pytest 4.6.11 (2020-06-04)

Fehlerbehebungen

  • #6334: Doppelte Zusammenfassungszeilen, die bei gleichzeitiger Verwendung von f/F und s/S Berichtzeichen in der -r Kommandozeilenoption (z.B. -rFf) aufgetreten sind, wurden korrigiert.

    Die Großbuchstabenvarianten waren nie dokumentiert und die bevorzugte Form sollte die Kleinbuchstabenform sein.

  • #7310: Behebt UnboundLocalError: local variable 'letter' referenced before assignment in _pytest.terminal.pytest_report_teststatus(), wenn Plugins Berichts-Objekte in einem unkonventionellen Zustand zurückgeben.

    Dies führte dazu, dass pytest_report_teststatus() das Betreten von If-Block-Zweigen, die die Variable letter deklarieren, übersprang.

    Die Korrektur bestand darin, den Anfangswert von letter vor der If-Block-Kaskade zu setzen, damit er immer einen Wert hat.

pytest 4.6.10 (2020-05-08)

Funktionen

  • #6870: Neues Attribut Config.invocation_args, das die unveränderten Argumente enthält, die an pytest.main() übergeben wurden.

    Anmerkung: Obwohl dies technisch gesehen eine neue Funktion ist und gemäß unserer Richtlinie nicht als Backport hätte aufgenommen werden sollen, haben wir in diesem speziellen Fall eine Ausnahme gemacht, da sie eine schwerwiegende Interaktion mit pytest-xdist behebt. Daher kann sie auch als Fehlerbehebung betrachtet werden.

Trivial/Interne Änderungen

  • #6404: Verwendung des parser Moduls entfernt, das in Python 3.9 als veraltet markiert wurde.

pytest 4.6.9 (2020-01-04)

Fehlerbehebungen

  • #6301: Korrigierte Assertion-Rewriting für egg-basierte Distributionen und editable Installationen (pip install --editable).

pytest 4.6.8 (2019-12-19)

Funktionen

  • #5471: JUnit XML enthält nun einen Zeitstempel und Hostnamen im `testsuite`-Tag.

Fehlerbehebungen

  • #5430: junitxml: Protokolle für fehlgeschlagene Tests werden nun an den junit-Bericht übergeben, falls der Test während der Aufrufphase fehlschlägt.

Trivial/Interne Änderungen

  • #6345: colorama auf 0.4.1 nur für Python 3.4 fixiert, damit neuere Python-Versionen weiterhin Colorama-Updates erhalten können.

pytest 4.6.7 (2019-12-05)

Fehlerbehebungen

  • #5477: Die von `--junitxml` erzeugte XML-Datei enthält nun korrekt ein `<testsuites>`-Root-Element.

  • #6044: FileNotFoundError (OSError.errno == NOENT in Python 2) Ausnahmen beim Versuch, alte temporäre Verzeichnisse zu entfernen, ordnungsgemäß ignorieren, z. B. wenn mehrere Prozesse versuchen, dasselbe Verzeichnis zu entfernen (häufig bei pytest-xdist).

pytest 4.6.6 (2019-10-11)

Fehlerbehebungen

  • #5523: Korrektur der Verwendung mehrerer kurzer Optionen zusammen in der Befehlszeile (z. B. `-vs`) unter Python 3.8+.

  • #5537: Ersetzen von `importlib_metadata`-Backports durch `importlib.metadata` aus der Standardbibliothek unter Python 3.8+.

  • #5806: Behebt die Verwendung von „lexer“ beim Hochladen nach bpaste.net aus --pastebin in „text“.

  • #5902: Behebt Warnungen zu veralteten `cmp`-Attributen in attrs>=19.2.

Trivial/Interne Änderungen

  • #5801: Korrigiert Python-Versionsprüfungen (erkannt von flake8-2020) für den Fall, dass Python4 eine Sache wird.

pytest 4.6.5 (2019-08-05)

Fehlerbehebungen

  • #4344: Korrektur von `RuntimeError`/`StopIteration` beim Versuch, ein Paket mit nur einer `__init__.py` zu sammeln.

  • #5478: Behebt Codierungsfehler bei der Verwendung von Unicode-Strings in Ausnahmen mit pytest.raises.

  • #5524: Korrektur eines Problems, bei dem `tmp_path` und `tmpdir` keine Verzeichnisse mit schreibgeschützten Dateien löschten, was dazu führen konnte, dass pytest beim zweiten Ausführen mit der Option `--basetemp` abstürzte.

  • #5547: `--step-wise` behandelt nun `xfail(strict=True)`-Markierungen korrekt.

  • #5650: Verbesserte Ausgabe, wenn das Parsen einer ini-Konfigurationsdatei fehlschlägt.

pytest 4.6.4 (2019-06-28)

Fehlerbehebungen

  • #5404: Gibt eine Warnung aus, wenn beim Versuch, ein fehlerhaftes Objekt zu entpacken, eine Ausnahme ausgelöst wird, zur leichteren Fehlersuche (#5080).

  • #5444: Behebt den --stepwise-Modus, wenn die erste auf der Kommandozeile übergebene Datei nicht gesammelt werden kann.

  • #5482: Behebt einen Fehler, der in 4.6.0 eingeführt wurde und zu Sammlungsfehlern führte, wenn mehr als 2 Positionsargumente an pytest.mark.parametrize übergeben wurden.

  • #5505: Behebt Absturz bei fehlgeschlagener Suche, wenn -p no:terminal verwendet wird.

pytest 4.6.3 (2019-06-11)

Fehlerbehebungen

  • #5383: -q hat wieder einen Einfluss auf den Stil der gesammelten Elemente (--collect-only), wenn --log-cli-level verwendet wird.

  • #5389: Behebt Regressionen von #5063 für importlib_metadata.PathDistribution, deren Attribut files None ist.

  • #5390: Behebt Regression, bei der das Attribut obj von TestCase-Elementen nicht mehr an Methoden gebunden war.

pytest 4.6.2 (2019-06-03)

Fehlerbehebungen

  • #5370: Rückgängigmachen der Entrollung von all() zur Behebung von NameError bei verschachtelten Comprehensions.

  • #5371: Rückgängigmachen der Entrollung von all() zur Behebung der falschen Behandlung von Generatoren mit if.

  • #5372: Rückgängigmachen der Entrollung von all() zur Behebung der falschen Assertion bei Verwendung von all() in einem Ausdruck.

pytest 4.6.1 (2019-06-02)

Fehlerbehebungen

  • #5354: Behebt pytest.mark.parametrize, wenn argvalues ein Iterator ist.

  • #5358: Korrigiert das Assertions-Rewriting von all()-Aufrufen, um Nicht-Generatoren zu behandeln.

pytest 4.6.0 (2019-05-31)

Wichtig

Die Serie 4.6.X wird die letzte Serie sein, die Python 2 und Python 3.4 unterstützt.

Weitere Details finden Sie in unserem Plan zur Unterstützung von Python 2.7 und 3.4.

Funktionen

  • #4559: Der Wert junit_log_passing_tests wurde hinzugefügt, der verwendet werden kann, um die Protokollierung der erfolgreichen Testergebnisse in der JUnit-XML-Datei zu aktivieren oder zu deaktivieren.

  • #4956: pytester`s testdir.spawn verwendet tmpdir als HOME/USERPROFILE-Verzeichnis.

  • #5062: Entrollt Aufrufe von all zu vollständigen For-Schleifen mit Assertions-Rewriting für bessere Fehlermeldungen, insbesondere bei der Verwendung von Generator Expressions.

  • #5063: Wechsel von pkg_resources zu importlib-metadata für die Erkennung von Entrypoints zur Verbesserung von Leistung und Importzeit.

  • #5091: Die Ausgabe für INI-Optionen in --help wurde verbessert.

  • #5269: pytest.importorskip schließt nun die ImportError in der Standard-reason ein.

  • #5311: Erfasste Logs, die für jeden fehlerhaften Test ausgegeben werden, werden mit dem ColoredLevelFormatter formatiert.

  • #5312: Verbesserte Formatierung von mehrzeiligen Log-Nachrichten in Python 3.

Fehlerbehebungen

  • #2064: Das Debugging-Plugin importiert die gewrappte Pdb-Klasse (--pdbcls) jetzt bei Bedarf.

  • #4908: Der pytest_enter_pdb Hook wird jetzt mit Post-Mortem (--pdb) aufgerufen.

  • #5036: Problem behoben, bei dem Fixtures, die von anderen parametrisierten Fixtures abhängen, fälschlicherweise parametrisiert wurden.

  • #5256: Behandelt internen Fehler, der durch ein einzelnes Ersatz-Unicode-Zeichen verursacht wurde, das in Jython nicht darstellbar ist.

  • #5257: Stellt sicher, dass sys.stdout.mode kein 'b' enthält, da es sich um einen Textstream handelt.

  • #5278: Pytests internes Python-Plugin kann wieder mit -p no:python deaktiviert werden.

  • #5286: Problem behoben, bei dem die Option disable_test_id_escaping_and_forfeit_all_rights_to_community_support nicht funktionierte, wenn eine Liste von Test-IDs in parametrisierten Tests verwendet wurde.

  • #5330: Zeigt das beim Sammeln befindliche Testmodul an, wenn PytestCollectionWarning-Nachrichten für Testklassen mit __init__ und __new__ Methoden ausgegeben werden, um das Problem leichter zu lokalisieren.

  • #5333: Behebt Regression in 4.5.0, bei der --lf alle Tests mit bekannten Fehlern von nicht ausgewählten Tests nicht erneut ausgeführt hat.

Verbesserte Dokumentation

  • #5250: Erweitert die Dokumentation zur Verwendung von setenv und delenv mit monkeypatch.

pytest 4.5.0 (2019-05-11)

Features

  • #4826: Eine Warnung wird jetzt ausgegeben, wenn unbekannte Markierungen als Dekorator verwendet werden. Dies geschieht oft aufgrund eines Tippfehlers, der zu stillschweigend fehlerhaften Tests führen kann.

  • #4907: Zeigt den XFail-Grund als Teil des JUnitXML-Nachrichtenfeldes an.

  • #5013: Meldungen von Absturzberichten werden jetzt in Testzusammenfassungen angezeigt, gekürzt auf die Breite des Terminals.

  • #5023: Neue Flagge --strict-markers, die einen Fehler auslöst, wenn unbekannte Markierungen (z. B. solche, die nicht über die markers-Option in der Konfigurationsdatei registriert wurden) in der Testsuite verwendet werden.

    Die bestehende Option --strict hat derzeit das gleiche Verhalten, kann aber zukünftig für zusätzliche Prüfungen erweitert werden.

  • #5026: Assertionsfehler-Meldungen für Sequenzen und Dictionaries enthalten jetzt die Anzahl der unterschiedlichen Elemente.

  • #5034: Verbessert die Berichterstattung mit --lf und --ff (Run-Last-Failure).

  • #5035: Die Option/Aktion --cache-show akzeptiert einen optionalen Glob, um nur passende Cache-Einträge anzuzeigen.

  • #5059: Standard-Input (stdin) kann an Testdir.run() und Testdir.popen() von pytester übergeben werden.

  • #5068: Die Option -r hat A gelernt, um alle Berichte (einschließlich bestandener Tests) in der kurzen Testzusammenfassung anzuzeigen.

  • #5108: Die kurze Testzusammenfassung wird nach bestandenen Tests mit Ausgabe (-rP) angezeigt.

  • #5172: Die Option --last-failed (--lf) ist intelligenter geworden und überspringt nun ganze Dateien, wenn alle Tests dieser Testdatei in früheren Durchläufen bestanden wurden, was die Sammlung erheblich beschleunigt.

  • #5177: Einführung neuer spezifischer Warnungsklassen PytestWarning, um das Filtern von Warnungen nach Klasse anstatt nach Nachricht zu erleichtern. Die neuen Unterklassen sind:

    • PytestAssertRewriteWarning

    • PytestCacheWarning

    • PytestCollectionWarning

    • PytestConfigWarning

    • PytestUnhandledCoroutineWarning

    • PytestUnknownMarkWarning

  • #5202: Das neue Fixture mit Sitzungsgültigkeit record_testsuite_property ermöglicht es Benutzern, <property>-Tags auf testsuite-Ebene mit dem junitxml-Plugin zu protokollieren.

    Das generierte XML ist mit dem neuesten xunit-Standard kompatibel, im Gegensatz zu den Eigenschaften, die von record_property und record_xml_attribute aufgezeichnet werden.

  • #5214: Das Standard-Logging-Format wurde geändert, um die Lesbarkeit zu verbessern. Hier ist ein Beispiel einer vorherigen Logging-Nachricht:

    test_log_cli_enabled_disabled.py    3 CRITICAL critical message logged by test
    

    Dies ist nun geworden:

    CRITICAL root:test_log_cli_enabled_disabled.py:3 critical message logged by test
    

    Die Formatierung kann über die Konfigurationsoption log_format geändert werden.

  • #5220: --fixtures zeigt nun auch die Fixture-Gültigkeit für andere Gültigkeiten als "function" an.

Fehlerbehebungen

  • #5113: Ausgewählte Elemente von Plugins, die pytest_collect_modifyitems als Hookwrapper verwenden, werden jetzt korrekt gemeldet.

  • #5144: Bei Nutzungsfehlern wird exitstatus nun wie erwartet in der pytest_sessionfinish Hook auf EXIT_USAGEERROR gesetzt.

  • #5235: outcome.exit wird im Pdb-Wrapper nicht mehr mit EOF verwendet, sondern nur noch mit quit.

Verbesserte Dokumentation

  • #4935: Erweitert die Dokumentation zur Registrierung von Markierungen und zur Auswirkung von --strict.

Triviale/Interne Änderungen

  • #4942: logging.raiseExceptions wird nicht mehr auf False gesetzt.

  • #5013: Pytest hängt jetzt von wcwidth ab, um Unicode-Zeichengrößen für eine präzisere Terminalausgabe korrekt zu verfolgen.

  • #5059: pytesters Testdir.popen() verwendet jetzt stdout und stderr über Schlüsselwortargumente mit Standardwerten (subprocess.PIPE).

  • #5069: Der Code für die kurze Testzusammenfassung im Terminal wurde in das Terminal-Plugin verschoben.

  • #5082: Verbessert die Validierung von kwargs für verschiedene Methoden im pytester-Plugin.

  • #5202: record_property gibt nun eine PytestWarning aus, wenn es mit junit_family=xunit2 verwendet wird: Das Fixture generiert property-Tags als Kinder von testcase, was gemäß dem neuesten Schema nicht zulässig ist.

  • #5239: pluggy wird auf < 1.0 pinned, damit es bei der Veröffentlichung von 1.0 nicht automatisch aktualisiert wird: Es gibt geplante Breaking Changes, und wir möchten sicherstellen, dass pytest pluggy 1.0 ordnungsgemäß unterstützt.

pytest 4.4.2 (2019-05-08)

Fehlerbehebungen

  • #5089: Behebt Absturz, der durch einen Fehler in der __repr__-Funktion bei aktivierten Optionen showlocals und ausführlicher Ausgabe verursacht wurde.

  • #5139: Beseitigt die Kernabhängigkeit vom 'terminal'-Plugin.

  • #5229: Erfordert pluggy>=0.11.0, was eine Abhängigkeit zu importlib-metadata aus 0.10.0 zurücksetzt. Das Paket importlib-metadata kann nicht importiert werden, wenn es als Egg installiert ist, und verursacht Probleme bei der Abhängigkeit von setup.py zur Installation von Testabhängigkeiten.

Verbesserte Dokumentation

  • #5171: Dok.: Der 'path'-Parameter der Hooks pytest_ignore_collect, pytest_collect_directory, pytest_collect_file und pytest_pycollect_makemodule ist jetzt vom Typ py.path.local.

  • #5188: Verbessert die Hilfe für die Flagge --runxfail.

Triviale/Interne Änderungen

  • #5182: Internes und ungenutztes _pytest.deprecated.MARK_INFO_ATTRIBUTE wurde entfernt.

pytest 4.4.1 (2019-04-15)

Fehlerbehebungen

  • #5031: Umgebungsvariablen werden bei Verwendung des testdir-Fixtures von pytester ordnungsgemäß wiederhergestellt.

  • #5039: Behebt Regression mit --pdbcls, die ab Version 4.0.0 mit lokalen Modulen nicht mehr funktionierte.

  • #5092: Gibt eine Warnung aus, wenn unbekannte Schlüsselwörter an pytest.param(...) übergeben werden.

  • #5098: Invalidiert Import-Caches mit monkeypatch.syspath_prepend, was für Namespace-Pakete erforderlich ist.

pytest 4.4.0 (2019-03-29)

Features

  • #2224: async Testfunktionen werden übersprungen und eine Warnung ausgegeben, wenn kein geeignetes Async-Plugin installiert ist (wie z. B. pytest-asyncio oder pytest-trio).

    Zuvor wurden async Funktionen überhaupt nicht ausgeführt, aber trotzdem als "bestanden" markiert.

  • #2482: Enthält die neue Option disable_test_id_escaping_and_forfeit_all_rights_to_community_support, um ASCII-Escaping in parametrisierten Werten zu deaktivieren. Dies kann zu einer Reihe von Problemen führen und sollte, wie der Name schon sagt, auf eigene Gefahr verwendet werden.

  • #4718: Die Option -p kann jetzt auch verwendet werden, um Plugins über ihren Entry-Point-Namen zu laden, anstatt nur nach Modulnamen. Dies ermöglicht das frühe Laden externer Plugins wie pytest-cov in der Kommandozeile.

    Dies macht es möglich, externe Plugins wie pytest-cov über die Kommandozeile zu laden.

    pytest -p pytest_cov
    
  • #4855: Die Option --pdbcls behandelt Klassen jetzt über Modulattribute (z. B. pdb:pdb.Pdb mit pdbpp) und ihre Validierung wurde verbessert.

  • #4875: Die Konfigurationsoption testpaths wird jetzt neben den Zeilen rootdir und inifile in der Pytest-Header-Ausgabe angezeigt, wenn die Option wirksam ist, d. h. wenn keine Verzeichnisse oder Dateinamen explizit in der Kommandozeile übergeben wurden.

    Außerdem wird inifile nur angezeigt, wenn eine Konfigurationsdatei vorhanden ist, anstatt eines leeren inifile:-Strings.

  • #4911: Doctests können jetzt dynamisch mit pytest.skip() übersprungen werden.

  • #4920: Interne Refactorings wurden vorgenommen, um die Implementierung des pytest-subtests Plugins zu ermöglichen, das unittest-Subtest-Unterstützung und eine neue subtests Fixture hinzufügt, wie in #1367 diskutiert.

    Details zu den internen Refactorings finden Sie in den Details des zugehörigen PR.

  • #4931: pytesters LineMatcher stellt sicher, dass die übergebenen Zeilen eine Sequenz sind.

  • #4936: Behandelt -p plug nach -p no:plug.

    Dies kann verwendet werden, um ein blockiertes Plugin (z. B. in "addopts") von der Kommandozeile usw. zu überschreiben.

  • #4951: Die Ausgabenerfassung wird korrekt behandelt, wenn nur über Fixtures (capsys, capfs) mit pdb.set_trace() erfasst wird.

  • #4956: pytester setzt während der Testausführung $HOME und $USERprofile auf das temporäre Verzeichnis.

    Dies stellt sicher, dass keine Konfigurationsdateien aus dem Home-Verzeichnis des echten Benutzers geladen werden.

  • #4980: Namespace-Pakete werden mit monkeypatch.syspath_prepend und testdir.syspathinsert (über pkg_resources.fixup_namespace_packages) besser gehandhabt.

  • #4993: Das stepwise-Plugin meldet jetzt Statusinformationen.

  • #5008: Wenn eine setup.cfg-Datei sowohl [tool:pytest] als auch den nicht mehr unterstützten Abschnitt [pytest] enthält, verwendet Pytest [tool:pytest] und ignoriert [pytest]. Zuvor wurde dies bedingungslos mit einem Fehler beendet.

    Dies erleichtert Plugins die Unterstützung älterer Pytest-Versionen.

Fehlerbehebungen

  • #1895: Behebt einen Fehler, bei dem Fixtures, die dynamisch über request.getfixturevalue() angefordert wurden, vor der anfordernden Fixture abgebaut werden konnten.

  • #4851: pytester setzt jetzt PYTEST_ADDOPTS zurück, um nicht die äußeren Optionen mit testdir.runpytest() zu verwenden.

  • #4903: Verwendet die korrekte Änderungszeit für Jahre nach 2038 in neu geschriebenen .pyc-Dateien.

  • #4928: Korrigiert Zeilenverschiebungen bei ScopeMismatch-Fehlern.

  • #4957: -p no:plugin wird jetzt korrekt für Standard- (interne) Plugins behandelt, z. B. mit -p no:capture.

    Zuvor wurden sie immer geladen (importiert), wodurch z. B. die capfd-Fixture verfügbar war.

  • #4968: Der pdb quit-Befehl wird ordnungsgemäß behandelt, wenn er nach dem debug-Befehl mit pdbpp verwendet wird.

  • #4975: Korrigiert die Interpretation der Option -qq, die fälschlicherweise als -v behandelt wurde.

  • #4978: outcomes.Exit wird in assertrepr_compare nicht mehr verschluckt.

  • #4988: Schließt den Dateihandler von Logging explizit, wenn die Sitzung beendet wird.

  • #5003: Korrigiert die Zeilenverschiebung bei Markierungs-Sammlungsfehlern (um eins falsch).

Verbesserte Dokumentation

  • #4974: Aktualisiert die Dokumentation für den pytest_cmdline_parse Hook, um auf Verfügbarkeitseinschränkungen hinzuweisen.

Triviale/interne Änderungen

  • #4718: pluggy>=0.9 wird jetzt benötigt.

  • #4815: funcsigs>=1.0 wird jetzt für Python 2.7 benötigt.

  • #4829: Einige übrig gebliebene interne Codefragmente im Zusammenhang mit yield-Tests wurden entfernt.

  • #4890: Entfernt die intern ungenutzte anypython-Fixture aus dem pytester-Plugin.

  • #4912: Entfernt die veraltete Sphinx-Direktive add_description_unit(), pinnt sphinx-removed-in auf >= 0.2.0, um Sphinx 2.0 zu unterstützen.

  • #4913: Korrigiert die Pytest-Testaufrufe mit benutzerdefiniertem PYTHONPATH.

  • #4965: Neue **experimentelle** Hooks pytest_report_to_serializable und pytest_report_from_serializable.

    Diese Hooks werden von pytest-xdist, pytest-subtests und dem Ersatz für resultlog verwendet, um Berichte zu serialisieren und anzupassen.

    Sie sind experimentell, was bedeutet, dass ihre Details in zukünftigen Patch-Releases ohne Vorwarnung geändert oder sogar vollständig entfernt werden können.

    Feedback von Plugin-Autoren und Benutzern ist willkommen.

  • #4987: Collector.repr_failure berücksichtigt die Option --tb, aber standardmäßig nur noch short (mit auto).

pytest 4.3.1 (2019-03-11)

Fehlerbehebungen

  • #4810: Log-Nachrichten innerhalb von pytest_runtest_logreport() werden jetzt ordnungsgemäß erfasst und angezeigt.

  • #4861: Verbessert die Validierung von Inhalten, die in die erfasste Ausgabe geschrieben werden, sodass sie sich genauso verhalten wie bei deaktivierter Erfassung.

  • #4898: Behebt den Fehler AttributeError: FixtureRequest has no 'confg' attribute in testdir.copy_example.

Triviale/interne Änderungen

  • #4768: Vermeidet den Import von pkg_resources auf oberster Ebene.

pytest 4.3.0 (2019-02-16)

Veraltet

  • #4724: pytest.warns() gibt jetzt eine Warnung aus, wenn unbekannte Schlüsselwortargumente empfangen werden.

    Dies wird in Zukunft zu einem Fehler.

Funktionen

  • #2753: Verwendungsfehler von argparse werden auf Pytests UsageError abgebildet.

  • #3711: Fügt den Parameter --ignore-glob hinzu, um Testmodule mit Unix-Shell-Wildcards auszuschließen. Fügt die collect_ignore_glob für conftest.py hinzu, um Testmodule mit Unix-Shell-Wildcards auszuschließen.

  • #4698: Die Warnung, dass Python 2.7 und 3.4 in Pytest 5.0 nicht unterstützt werden, wurde entfernt.

    Letztendlich wurde dies als mehr Belästigung denn als tatsächlicher Nutzen betrachtet, und Benutzer dieser Python-Versionen sollten keine Probleme haben, da pip Pytest 5.0 auf diesen Interpretern nicht installieren wird.

  • #4707: Mithilfe der neuen Methode set_log_path() gibt es eine Möglichkeit, log_file-Pfade von Hooks aus festzulegen.

Fehlerbehebungen

  • #4651: --help und --version werden mit UsageError behandelt.

  • #4782: Behebt AssertionError beim Sammeln fehlerhafter Symlinks mit Paketen.

pytest 4.2.1 (2019-02-12)

Fehlerbehebungen

  • #2895: Der Hook pytest_report_collectionfinish wird jetzt auch mit --collect-only aufgerufen.

  • #3899: Löst keine UsageError aus, wenn ein importiertes Paket ein untergeordnetes Modul pytest_plugins.py hat.

  • #4347: Behebt die Ausgabenerfassung bei der Verwendung von pdb++ mit rekursivem Debugging.

  • #4592: Behebt die Handhabung von collect_ignore über ein übergeordnetes conftest.py.

  • #4700: Behebt eine Regression, bei der setUpClass immer in Unterklassen aufgerufen wurde, auch wenn alle Tests durch einen unittest.skip()-Decorator in der Unterklasse übersprungen wurden.

  • #4739: Korrigiert parametrize(... ids=<function>), wenn die Funktion Nicht-Strings zurückgibt.

  • #4745: Korrigiert/verbessert die Sammlung von Argumenten beim Übergeben in __init__.py und einer Testdatei.

  • #4770: more_itertools ist jetzt auf <6.0.0 beschränkt, wenn es für die Python 2.7-Kompatibilität erforderlich ist.

  • #526: Behebt Ausnahmen vom Typ „ValueError: Plugin already registered“, wenn in Build-Verzeichnissen ausgeführt wird, die auf tatsächliche Quellen verlinken.

Verbesserte Dokumentation

  • #3899: Fügt plugins.rst eine Notiz hinzu, dass pytest_plugins nicht als Name für ein Benutzermodul mit Plugins verwendet werden sollte.

  • #4324: Dokumentieren Sie die Verwendung von raises und does_not_raise zum Schreiben von parametrisierten Tests mit bedingten Ausnahmen.

  • #4709: Dokumentieren Sie, wie Testfehler-Nachrichten bei Verwendung von pytest.warns angepasst werden.

Triviale/Interne Änderungen

  • #4741: Einige auf die Ausführlichkeit bezogene Attribute des TerminalReporter-Plugins sind jetzt schreibgeschützte Eigenschaften.

pytest 4.2.0 (2019-01-30)

Funktionen

  • #3094: Klassische xunit-Style-Funktionen und -Methoden gehorchen nun dem Gültigkeitsbereich von autouse-Fixtures.

    Dies behebt eine Reihe von überraschenden Problemen, z. B. dass setup_method vor session-scoped autouse-Fixtures aufgerufen wird (siehe #517 für ein Beispiel).

  • #4627: Zeigen Sie eine Meldung am Ende der Testsitzung an, wenn Sie unter Python 2.7 und 3.4 laufen, dass pytest 5.0 diese Python-Versionen nicht mehr unterstützt.

  • #4660: Die Anzahl der *ausgewählten* Tests wird nun auch angezeigt, wenn die Flags -k oder -m verwendet werden.

  • #4688: Der Hook pytest_report_teststatus kann jetzt auch einen config-Parameter empfangen.

  • #4691: Der Hook pytest_terminal_summary kann jetzt auch einen config-Parameter empfangen.

Fehlerbehebungen

  • #3547: --junitxml kann mit Jenkins xUnit kompatibles XML ausgeben. Die INI-Option junit_family akzeptiert legacy|xunit1, was alte Ausgaben erzeugt, und xunit2, das strenger mit https://github.com/jenkinsci/xunit-plugin/blob/xunit-2.3.2/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd übereinstimmt.

  • #4280: Verbessertes Beenden von pdb, insbesondere mit --trace.

    Die Verwendung von q[quit] nach pdb.set_trace() beendet auch pytest.

  • #4402: Die Warnungszusammenfassung gruppiert Warnungen jetzt nach Nachricht anstatt nach Test-ID.

    Dies macht die Ausgabe kompakter und vermittelt besser die allgemeine Idee, wie viel Code tatsächlich Warnungen erzeugt, anstatt wie viele Tests diesen Code aufrufen.

  • #4536: monkeypatch.delattr behandelt Klassen-Deskriptoren wie staticmethod/classmethod.

  • #4649: Wiederherstellung der Berücksichtigung von Marks als Schlüsselwörter für Schlüsselworterklärungen.

  • #4653: Das Fixture tmp_path und andere verwandte Fixtures liefern den aufgelösten Pfad (auch bekannt als tatsächlicher Pfad).

  • #4667: pytest_terminal_summary verwendet das Ergebnis des Hooks pytest_report_teststatus anstelle von fest codierten Zeichenfolgen.

  • #4669: unittest.SkipTest-Ausnahmen mit Nicht-ASCII-Zeichen unter Python 2 korrekt behandeln.

  • #4680: Sicherstellen, dass die Fixtures tmpdir und tmp_path denselben Ordner darstellen.

  • #4681: Sicherstellen, dass tmp_path immer ein tatsächlicher Pfad ist.

Triviale/Interne Änderungen

  • #4643: a.item() anstelle des veralteten np.asscalar(a) in pytest.approx verwenden.

    np.asscalar wurde in numpy 1.16. veraltet erklärt.

  • #4657: Saferepr von pylib kopieren

  • #4668: Das ausführliche Wort für erwartete Fehler im Teststatusbericht ändert sich von xfail zu XFAIL, um mit anderen Testergebnissen konsistent zu sein.

pytest 4.1.1 (2019-01-12)

Fehlerbehebungen

  • #2256: Vollständige Repräsentation mit assert a==b und -vv anzeigen.

  • #3456: Doctest-Module erweitern, um Mock-Objekte zu ignorieren.

  • #4617: Behobener pytest.warns-Fehler, wenn der Kontextmanager wiederverwendet wird (z. B. mehrere Parametrisierungen).

  • #4631: Assertion nicht überschreiben, wenn __getattr__ fehlerhaft ist

Verbesserte Dokumentation

  • #3375: Dokumentieren Sie, dass die Verwendung von setup.cfg andere Tools zum Absturz bringen oder schwer zu verfolgende Probleme verursachen kann, da es einen anderen Parser als pytest.ini oder tox.ini verwendet.

Triviale/Interne Änderungen

  • #4602: hypothesis in regen tox env deinstallieren.

pytest 4.1.0 (2019-01-05)

Entfernungen

  • #2169: pytest.mark.parametrize: In früheren Versionen wurden Fehler, die von id-Funktionen ausgelöst wurden, unterdrückt und in Warnungen umgewandelt. Jetzt werden die Ausnahmen zusammen mit einer pytest-Meldung, die den Knoten, den Parameterwert und den Index angibt, an dem der Fehler aufgetreten ist, weitergegeben.

  • #3078: Entfernen des alten internen Warnungssystems: config.warn, Node.warn. Der Hook pytest_logwarning gibt nun eine Warnung aus, wenn er implementiert ist.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #3079: Unterstützung für Yield-Tests entfernt - sie sind grundsätzlich fehlerhaft, da sie Fixtures seit der Trennung von Sammlung und Testausführung nicht richtig unterstützen.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #3082: Unterstützung für die direkte Anwendung von Marks auf Werte in @pytest.mark.parametrize entfernt. Verwenden Sie stattdessen pytest.param.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #3083: Metafunc.addcall entfernt. Dies war der Vorgängermechanismus für @pytest.mark.parametrize.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #3085: Unterstützung für die Übergabe von Strings an pytest.main entfernt. Übergeben Sie stattdessen immer eine Liste von Strings.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #3086: Der Abschnitt [pytest] in **setup.cfg**-Dateien wird nicht mehr unterstützt. Verwenden Sie stattdessen [tool:pytest]. **setup.cfg**-Dateien sind für die Verwendung mit distutils gedacht, und ein Abschnitt mit dem Namen pytest war bekanntermaßen eine Quelle für Konflikte und Fehler.

    Beachten Sie, dass für **pytest.ini** und **tox.ini**-Dateien der Abschnitt weiterhin [pytest] lautet.

  • #3616: Veraltete Kompatibilitätseigenschaften für node.Class/Function/Module entfernt - verwenden Sie stattdessen pytest.Class/Function/Module.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #4421: Implementierung des Hooks pytest_namespace entfernt.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #4489: request.cached_setup entfernt. Dies war der Vorgängermechanismus für moderne Fixtures.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #4535: Die veraltete Methode PyCollector.makeitem wurde entfernt. Diese Methode wurde vor langer Zeit versehentlich öffentlich gemacht.

  • #4543: Unterstützung für die Definition von Fixtures mithilfe des Präfixes pytest_funcarg__ entfernt. Verwenden Sie stattdessen den Dekorator @pytest.fixture.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #4545: Das direkte Aufrufen von Fixtures führt jetzt immer zu einem Fehler anstelle einer Warnung.

    Siehe unsere Dokumentation für Informationen zur Aktualisierung Ihres Codes.

  • #4546: Entfernen der Attribute testfunction.markername - verwenden Sie stattdessen Node.iter_markers(name=None), um sie zu durchlaufen.

    Verwenden Sie als Ersatz Node.get_closest_marker(name).

  • #4547: Das veraltete Fixture record_xml_property wurde entfernt. Verwenden Sie stattdessen das allgemeinere record_property.

    Siehe unsere Dokumentation für weitere Informationen.

  • #4548: Es wird nun ein Fehler ausgelöst, wenn die Variable pytest_plugins in einer nicht auf der obersten Ebene befindlichen conftest.py-Datei definiert ist (d. h. nicht im rootdir).

    Siehe unsere Dokumentation für weitere Informationen.

  • #891: Entfernen der Attribute testfunction.markername - verwenden Sie stattdessen Node.iter_markers(name=None), um sie zu durchlaufen.

Veraltete Elemente

  • #3050: Das globale pytest.config wurde zur Veralterung markiert.

    Siehe pytest.config global für die Begründung.

  • #3974: Die Übergabe des Parameters message von pytest.raises löst nun eine DeprecationWarning aus.

    Es ist ein häufiger Fehler zu glauben, dass dieser Parameter die Fehlermeldung abgleicht, während er tatsächlich nur dazu dient, eine benutzerdefinierte Meldung bereitzustellen, falls die pytest.raises-Prüfung fehlschlägt. Um diesen Fehler zu vermeiden und da er als wenig genutzt gilt, wird er von pytest ohne vorübergehende Alternative als veraltet markiert.

    Wenn Sie Bedenken dazu haben, kommentieren Sie bitte unter #3974.

  • #4435: raises(..., 'code(as_a_string)') und warns(..., 'code(as_a_string)') als veraltet markiert.

    Siehe raises / warns mit einem String als zweites Argument für Begründungen und Beispiele.

Features

  • #3191: Es wird nun eine Warnung ausgegeben, wenn Überprüfungen für None durchgeführt werden.

    Dies ist eine häufige Fehlerquelle für neue Benutzer, die schreiben

    assert mocked_object.assert_called_with(3, 4, 5, key="value")
    

    Wenn sie schreiben sollten

    mocked_object.assert_called_with(3, 4, 5, key="value")
    

    Da die Methode assert_called_with von Mock-Objekten bereits eine Assertion ausführt.

    Diese Warnung wird nicht ausgegeben, wenn None explizit überprüft wird. Eine Assertion wie

    assert variable is None
    

    wird keine Warnung ausgeben.

  • #3632: Aussagekräftigere Gleichheitsvergleichs-Introspektion bei AssertionError für Objekte, die mit attrs oder dataclasses (Python 3.7+, zurückportiert nach 3.6) erstellt wurden.

  • #4278: CACHEDIR.TAG-Dateien werden nun innerhalb von Cache-Verzeichnissen erstellt.

    Diese Dateien sind Teil des Cache Directory Tagging Standard und können von Backup- oder Synchronisationsprogrammen verwendet werden, um das Cache-Verzeichnis von pytest als solches zu identifizieren.

  • #4292: pytest.outcomes.Exit leitet sich nun von SystemExit anstelle von KeyboardInterrupt ab. Dies ermöglicht uns, das Beenden von pdb besser zu handhaben.

  • #4371: Die Option --collect-only wurde aktualisiert, um Testbeschreibungen anzuzeigen, wenn sie mit --verbose ausgeführt wird.

  • #4386: Die Erstellung des ExceptionInfo-Objekts wurde neu strukturiert und stellt sicher, dass unvollständige Instanzen eine repr/str haben.

  • #4416: pdb: Unterstützung für Schlüsselwortargumente mit pdb.set_trace hinzugefügt.

    Es behandelt header ähnlich wie Python 3.7 und leitet alle anderen Schlüsselwortargumente an den Pdb-Konstruktor weiter.

    Dies ermöglicht __import__("pdb").set_trace(skip=["foo.*"]).

  • #4483: Ini-Parameter junit_duration_report hinzugefügt, um optional Testaufruf-Dauern zu melden, wobei Setup- und Teardown-Zeiten ausgeschlossen sind.

    Die JUnit XML-Spezifikation und das Standardverhalten von pytest schließen Setup- und Teardown-Zeiten in den Testdauerbericht ein. Sie können nur die Aufrufdauern einschließen (ohne Setup und Teardown), indem Sie dies zu Ihrer pytest.ini-Datei hinzufügen

    [pytest]
    junit_duration_report = call
    
  • #4532: -ra zeigt nun Fehler und Fehlschläge zuletzt an, anstatt als erste Elemente in der Zusammenfassung.

    Dies erleichtert das Abrufen einer Liste von Fehlern und Fehlschlägen, um Tests selektiv auszuführen.

  • #4599: pytest.importorskip unterstützt nun einen reason-Parameter, der angezeigt wird, wenn das angeforderte Modul nicht importiert werden kann.

Bug Fixes

  • #3532: -p akzeptiert nun sein Argument ohne Leerzeichen zwischen dem Wert, z.B. -pmyplugin.

  • #4327: approx funktioniert wieder mit allgemeineren Containern, genauer gesagt mit Instanzen von Iterable und Sized anstelle von restriktiveren Sequence.

  • #4397: Sicherstellen, dass Knoten-IDs druckbar sind.

  • #4435: Dateiname des Frames für raises(..., 'code(string)') behoben.

  • #4458: Tatsächliche Test-IDs in --collect-only anzeigen.

Verbesserte Dokumentation

  • #4557: Die Dokumentationsseite mit Beispielen für Marker wurde aktualisiert, um die neueste pytest-Version zu unterstützen.

  • #4558: Beispiel für Cache-Dokumentation aktualisiert, um Cache-Treffer und -Fehlschläge korrekt anzuzeigen.

  • #4580: Dokumentation für den detaillierten Zusammenfassungsbericht verbessert.

Trivial/Interne Änderungen

  • #4447: Der Deprecation-Typ von --result-log wurde in PytestDeprecationWarning geändert.

    Es wurde beschlossen, diese Funktion in der nächsten Hauptversion zu entfernen.

pytest 4.0.2 (2018-12-13)

Bug Fixes

  • #4265: Argumente aus der Umgebungsvariable PYTEST_ADDOPTS und der Ini-Option addopts werden nun separat validiert.

  • #4435: Dateiname des Frames für raises(..., 'code(string)') behoben.

  • #4500: Wenn ein Fixture yields und nach dem Testlauf ein Log-Aufruf erfolgt, und wenn der Test unterbrochen wird, sind die Capture-Attribute None.

  • #4538: Hebt TypeError für with raises(..., match=<non-None falsey value>).

Verbesserte Dokumentation

  • #1495: Dokumentiert gängige Fallstricke bei der Verzeichnisstruktur von Doctest-Fixtures

pytest 4.0.1 (2018-11-23)

Bug Fixes

  • #3952: Warnungen werden wieder vor der „kurzen Testzusammenfassung“ angezeigt, aber spätere Warnungen am Ende.

  • #4386: Uninitialisierte Exceptioninfo in repr/str behandeln.

  • #4393: Keine .gitignore/README.md-Dateien in bestehenden Cache-Verzeichnissen erstellen.

  • #4400: Warnungsbehandlung für Yield-Testfehler neu geordnet, damit die Deaktivierung in 4.0.x korrekt funktioniert.

  • #4405: Sammlung von Testpfaden mit --pyargs behoben.

  • #4412: Behandlung von Assertion-Rewriting mit Starred + Nebeneffekten behoben.

  • #4425: Sicherstellen, dass der absolute Pfad aufgelöst wird, wenn der angegebene --basetemp ein relativer Pfad ist.

Trivial/Interne Änderungen

  • #4315: pkg_resources.parse_version anstelle von LooseVersion im minversion-Check verwenden.

  • #4440: Stack-Level einiger interner pytest-Warnungen angepasst.

pytest 4.0.0 (2018-11-13)

Entfernungen

  • : RemovedInPytest4Warnings werden jetzt standardmäßig zu Fehlern.

    Gemäß unserem Plan, veraltete Funktionen mit möglichst geringer Störung zu entfernen, erzeugen nun alle Warnungen vom Typ RemovedInPytest4Warnings Fehler anstelle von Warnmeldungen.

    Die betroffenen Funktionen werden effektiv in pytest 4.1 entfernt. Bitte konsultieren Sie daher den Abschnitt Veraltete Funktionen und Entfernungen in der Dokumentation, um Anleitungen zur Aktualisierung bestehender Codes zu erhalten.

    In der pytest 4.0.X-Serie ist es möglich, die Fehler als Übergangsmaßnahme wieder in Warnungen umzuwandeln, indem Sie Folgendes zu Ihrer pytest.ini-Datei hinzufügen:

    [pytest]
    filterwarnings =
        ignore::pytest.RemovedInPytest4Warning
    

    Dies wird jedoch nicht mehr funktionieren, wenn pytest 4.1 veröffentlicht wird.

    Wenn Sie Bedenken bezüglich der Entfernung einer bestimmten Funktion haben, kommentieren Sie bitte unter #4348.

  • #4358: Die ::()-Notation zur Bezeichnung einer Testklasseninstanz in Knoten-IDs wurde entfernt.

    Zuvor verwendeten Knoten-IDs, die Testinstanzen enthielten, ::(), um die Instanz wie folgt zu bezeichnen:

    test_foo.py::Test::()::test_bar
    

    Das zusätzliche ::() war für die meisten Benutzer verwirrend und wurde entfernt, sodass die Test-ID nun wie folgt lautet:

    test_foo.py::Test::test_bar
    

    Diese Änderung konnte nicht, wie üblich bei Änderungen an der Benutzeroberfläche, von einer Deprecationsperiode begleitet werden, da es nicht wirklich möglich war zu erkennen, wann die Funktionalität explizit genutzt wurde.

    Das zusätzliche ::() wurde möglicherweise bereits intern an einigen Stellen entfernt, was dann zu Verwirrung an Stellen führte, an denen es erwartet wurde, z.B. bei --deselect (#4127).

    Testklasseninstanzen werden auch mit --collect-only nicht mehr aufgelistet.

Features

  • #4270: Die Option cache_dir verwendet $TOX_ENV_DIR als Präfix (falls in der Umgebung gesetzt).

    Dies verwendet standardmäßig einen anderen Cache pro Tox-Umgebung.

Bug Fixes

  • #3554: CallInfo.__repr__ behoben für den Fall, dass der Aufruf noch nicht abgeschlossen ist.

pytest 3.10.1 (2018-11-11)

Bug Fixes

  • #4287: Verschachtelte Verwendung des Debugging-Plugins (pdb), z.B. mit pytester’s testdir.runpytest behoben.

  • #4304: Blockiert das Plugin stepwise, wenn auch cacheprovider blockiert ist, da das eine vom anderen abhängt.

  • #4306: Parsiert minversion als tatsächliche Version und nicht als punktgetrennte Strings.

  • #4310: Behobene doppelte Sammlung aufgrund mehrerer Argumente, die auf dieselben Pakete zutreffen.

  • #4321: item.nodeid mit aufgelösten Symlinks behoben.

  • #4325: Korrigiert die Sammlung von direkten Symlink-Dateien, bei denen das Ziel nicht mit python_files übereinstimmt.

  • #4329: Korrigiert TypeError in report_collect mit _collect_report_last_write.

Triviale/Interne Änderungen

  • #4305: Ersetzt Byte/Unicode-Helfer in test_capture durch Python-Syntax.

pytest 3.10.0 (2018-11-03)

Funktionen

  • #2619: Setzt die Erfassung der Ausgabe nach continue mit __import__("pdb").set_trace() fort.

    Dies fügt auch einen neuen Hook pytest_leave_pdb hinzu und übergibt pdb an den bestehenden Hook pytest_enter_pdb.

  • #4147: Fügt --sw, --stepwise als Alternative zu --lf -x hinzu, um beim ersten Fehler anzuhalten, aber beim nächsten Testaufruf von diesem Test aus zu beginnen. Weitere Informationen finden Sie in der Dokumentation.

  • #4188: Sorgt dafür, dass --color bunte Punkte ausgibt, wenn nicht im ausführlichen Modus ausgeführt wird. Zuvor wurden nur die Test-für-Test-Ausgaben farblich hervorgehoben, wenn auch --verbose übergeben wurde.

  • #4225: Verbessert die Leistung bei der Erfassungsberichterstattung im Nicht-Quiet-Modus mit Terminals.

    Die Meldung "collecting …" wird nur alle 0,5 Sekunden gedruckt/aktualisiert.

Fehlerbehebungen

  • #2701: Korrigiert fälschlicherweise RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest Warnungen.

  • #4046: Korrigiert Probleme beim Ausführen von Tests in Paket-__init__.py-Dateien.

  • #4260: Unterdrückt Warnungen während der anonymen Kompilierung von Quellcode.

  • #4262: Korrigiert Zugriffsfehler beim Löschen von veralteten Verzeichnissen, die von tmpdir / tmp_path erstellt wurden.

  • #611: Die Benennung einer Fixture als request löst nun eine Warnung aus: Die Fixture request ist intern und sollte nicht überschrieben werden, da dies zu internen Fehlern führt.

  • #4266: Behandelt (ignoriert) Ausnahmen, die während der Sammlung auftreten, z. B. bei Djangos LazySettings-Proxyklasse.

Verbesserte Dokumentation

  • #4255: Hinzugefügt fehlende Dokumentation über die Tatsache, dass Modulnamen, die zum Filtern von Warnungen übergeben werden, nicht regex-escaped sind.

Triviale/Interne Änderungen

  • #4272: Zeigt cachedir auch im Nicht-Verbose-Modus an, wenn es nicht der Standardwert ist.

  • #4277: pdb: Verbessert die Meldung über die Erfassung der Ausgabe mit set_trace.

    Zeigt "IO-capturing turned off/on" nicht mehr an, wenn -s verwendet wird, um Verwirrung zu vermeiden.

  • #4279: Verbessert die Meldung und den Stack-Level von Warnungen, die von monkeypatch.setenv ausgegeben werden, wenn der Wert der Umgebungsvariable keine str ist.

pytest 3.9.3 (2018-10-27)

Fehlerbehebungen

  • #4174: Korrigiert "ValueError: Plugin already registered" bei conftest-Plugins über Symlinks.

  • #4181: Behandelt Race Conditions zwischen Erstellung und Löschung von temporären Ordnern.

  • #4221: Korrigiert einen Fehler, bei dem die Warnzusammenfassung am Ende der Test-Sitzung nicht den Test anzeigte, an dem die Warnung ausgelöst wurde.

  • #4243: Korrigiert Regression bei Übergabe von stacklevel für Warnungen als positionsabhängiges Argument unter Python 2.

Verbesserte Dokumentation

  • #3851: Hinzufügt Referenz zur empty_parameter_set_mark Ini-Option in der Dokumentation von @pytest.mark.parametrize.

Triviale/Interne Änderungen

  • #4028: Revert von Patching von sys.breakpointhook, da es scheinbar nichts bewirkt.

  • #4233: Wendet einen Import-Sorter (reorder-python-imports) auf die Codebasis an.

  • #4248: Entfernt Verwendung eines unnötigen Kompatibilitäts-Shims, six.binary_type.

pytest 3.9.2 (2018-10-22)

Fehlerbehebungen

  • #2909: Verbessert die Fehlermeldung, wenn eine rekursive Abhängigkeit zwischen Fixtures erkannt wird.

  • #3340: Korrigiert Protokollmeldungen, die in den Hooks pytest_sessionstart() und pytest_sessionfinish() nicht angezeigt wurden.

  • #3533: Korrigiert nicht-escaped XML-Rohobjekte im JUnit-Bericht für übersprungene Tests.

  • #3691: Python 2: Formatiert die Warnmeldung sicher, wenn Unicode-Strings an warnings.warn übergeben werden, was zu einer überraschenden MemoryError-Ausnahme führen kann, wenn warnings.warn selbst gemockt wird.

  • #4026: Verbessert die Fehlermeldung, wenn die Signatur einer Funktion nicht ermittelt werden kann.

  • #4177: Pinnt setuptools>=40.0, um py_modules in setup.cfg zu unterstützen.

  • #4179: Stellt das tmpdir-Verhalten von Symlinks für den aktuellen Testlauf wieder her.

  • #4192: Korrigiert den Dateinamen, der von warnings.warn gemeldet wird, wenn recwarn unter Python 2 verwendet wird.

pytest 3.9.1 (2018-10-16)

Funktionen

  • #4159: Bei Test-Suiten, die Testklassen enthalten, werden die Informationen über das untergeordnete Modul nur noch ausgegeben, wenn eine höhere Ausführlichkeitsstufe angegeben wird (mindestens "-vv").

pytest 3.9.0 (2018-10-15 - nicht veröffentlicht wegen eines Fehlers in der Release-Automatisierung)

Veralterungen

  • #3616: Die folgenden Zugriffe wurden seit Jahren als veraltet dokumentiert, geben aber nun tatsächlich Verwarnungen aus.

    • Zugriff auf Module, Function, Class, Instance, File und Item über Node-Instanzen. Nun erhält der Benutzer diese Warnung

      usage of Function.Module is deprecated, please use pytest.Module instead
      

      Benutzer sollten einfach import pytest und auf diese Objekte über das pytest-Modul zugreifen.

    • request.cached_setup, dies war der Vorläufer des Setup/Teardown-Mechanismus, der für Fixtures verfügbar ist. Sie können den Abschnitt funcarg comparison section in the docs konsultieren.

    • Die Verwendung von Objekten mit dem Namen "Class" zur Anpassung des Typs von Knoten, die in Collector-Unterklassen gesammelt werden, ist veraltet. Benutzer sollten stattdessen pytest_collect_make_item verwenden, um Knotentypen während der Sammlung anzupassen.

      Dieses Problem sollte nur fortgeschrittene Plugins betreffen, die neue Sammlungstypen erstellen. Wenn Sie diese Warnmeldung sehen, kontaktieren Sie bitte die Autoren, damit diese den Code ändern können.

    • Die Warnung, die die unten stehende Meldung erzeugt, wurde zu RemovedInPytest4Warning geändert.

      getfuncargvalue is deprecated, use getfixturevalue
      
  • #3988: Fügt eine Verwarnung für pytest.ensuretemp hinzu, da es schon länger veraltet ist.

Funktionen

  • #2293: Verbessert Fehlermeldungen, indem interne Details ausgeblendet werden, die ablenkend und unübersichtlich sein können.

    Dies hat zur Folge, dass einige Fehlerbedingungen, die zuvor generische Fehler (wie ValueError für nicht registrierte Marks) auslösten, nun Failed-Ausnahmen auslösen.

  • #3332: Verbessert den angezeigten Fehler, wenn eine conftest.py-Datei nicht importiert werden konnte.

    Um dies zu implementieren, wurde der neue Parameter chain zu ExceptionInfo.getrepr hinzugefügt, um verkettete Tracebacks in Python 3 anzuzeigen oder auszublenden (Standard ist True).

  • #3849: Fügt die Ini-Option empty_parameter_set_mark=fail_at_collect hinzu, um eine Ausnahme auszulösen, wenn parametrize eine leere Menge sammelt.

  • #3964: Während der Sammlungsphase generierte Protokollmeldungen werden angezeigt, wenn Live-Logging aktiviert ist und/oder wenn sie in eine Datei protokolliert werden.

  • #3985: Einführung von tmp_path als Fixture, die ein Pfadobjekt bereitstellt. Einführung von tmp_path_factory als Fixture mit Sitzungs-Scope, um beliebige temporäre Verzeichnisse aus anderen Fixtures oder Tests zu erstellen.

  • #4013: Verwarnungen werden nun auch angezeigt, wenn Sie die Warnfilter selbst anpassen. In der vorherigen Version überschrieb jede Anpassung die Pytest-Filter und Verwarnungen wurden standardmäßig wieder ausgeblendet.

  • #4073: Ermöglicht die Angabe eines Timeouts für Testdir.runpytest_subprocess() und Testdir.run().

  • #4098: Fügt das Argument returncode zu pytest.exit() hinzu, um pytest mit einem spezifischen Rückgabecode zu beenden.

  • #4102: Implementiert pytest.deprecated_call neu mit pytest.warns, sodass es das Schlüsselwortargument match='...' unterstützt.

    Dies hat zur Folge, dass pytest.deprecated_call nun pytest.fail.Exception anstelle von AssertionError auslöst.

  • #4149: Erfordert setuptools>=30.3 und verschiebt die meisten Metadaten nach setup.cfg.

Fehlerbehebungen

  • #2535: Verbessert die Fehlermeldung, wenn Testfunktionen von unittest.TestCase-Unterklassen parametrisierte Fixtures verwenden.

  • #3057: request.fixturenames gibt nun korrekt den Namen von Fixtures zurück, die von request.getfixturevalue() erstellt wurden.

  • #3946: Als Kommandozeilenoptionen über -W übergebene Warnungsfilter haben nun Vorrang vor Filtern, die in ini-Konfigurationsdateien definiert sind.

  • #4066: Korrigiert die erneute Einrückung von Quellcode durch direkte Verwendung von textwrap.dedent.

  • #4102: pytest.warn erfasst zuvor gewarnte Warnungen in Python 2. Zuvor wurden sie nie ausgelöst.

  • #4108: Löst symbolische Links für Argumente auf.

    Dies behebt die Ausführung von pytest tests/test_foo.py::test_bar, wobei tests ein Symlink zu project/app/tests ist: zuvor wurde project/app/conftest.py für Fixtures ignoriert.

  • #4132: Behebt doppeltes Drucken interner Fehler bei Verwendung von --pdb.

  • #4135: Die Bereinigung von `tmpdir` basierend auf `pathlib` behandelt nun korrekt Symlinks im Ordner.

  • #4152: Zeigt den Dateinamen an, wenn eine SyntaxWarning auftritt.

Verbesserte Dokumentation

  • #3713: Aktualisiert die Dokumentation zu `usefixtures`, um zu verdeutlichen, dass sie nicht mit Fixture-Funktionen verwendet werden kann.

  • #4058: Aktualisiert die Fixture-Dokumentation, um anzugeben, dass eine Fixture im Geltungsbereich, in dem sie definiert ist, zweimal aufgerufen werden kann.

  • #4064: Gemäß unittest.rst waren `setUpModule` und `tearDownModule` nicht implementiert, aber es stellte sich heraus, dass sie es sind. Daher wurde die Dokumentation für `unittest` aktualisiert.

  • #4151: Hinzufügen eines `tempdir`-Testbeispiels zur `CONTRIBUTING.rst`-Anleitung

Triviale/Interne Änderungen

  • #2293: Die interne Ausnahme MarkerError wurde entfernt.

  • #3988: Portierung der Implementierung von `tmpdir` auf `pathlib`.

  • #4063: Schließt 0,00-Sekunden-Einträge von der --duration-Ausgabe aus, es sei denn, -vv wird in der Befehlszeile übergeben.

  • #4093: Formatierung von String-Literalen in internen Tests behoben.

pytest 3.8.2 (2018-10-02)

Veralterungen und Entfernungen

  • #4036: Der Parameter `item` des Hooks `pytest_warning_captured` ist nun als veraltet dokumentiert. Wir haben erst nach der Veröffentlichung von `3.8` festgestellt, dass dieser Parameter mit `pytest-xdist` inkompatibel ist.

    Unsere Richtlinie ist es, Funktionen in Bugfix-Releases nicht als veraltet zu kennzeichnen, aber in diesem Fall halten wir es für sinnvoll, da wir ihn nur als veraltet dokumentieren, ohne Warnungen auszugeben, die potenziell Testsuiten beeinträchtigen könnten. Dies soll die Hook-Implementierer darauf aufmerksam machen, diesen Parameter überhaupt nicht zu verwenden.

    In einer zukünftigen Version wird `item` immer `None` sein und eine ordnungsgemäße Warnung ausgeben, wenn eine Hook-Implementierung ihn verwendet.

Fehlerbehebungen

  • #3539: Behebt das Neuladen bei Assertions-neu geschriebenen Modulen.

  • #4034: Das Attribut `.user_properties` von `TestReport`-Objekten ist eine Liste von (name, value)-Tupeln, konnte aber manchmal als Tupel von Tupeln instanziiert werden. Es ist nun immer eine Liste.

  • #4039: Gibt keine Warnungen mehr über die Verwendung von `pytest_plugins` in nicht-Top-Level-Verzeichnissen bei Verwendung von `--pyargs` aus: der aktuelle `--pyargs`-Mechanismus ist nicht zuverlässig und kann falsche Negativen liefern.

  • #4040: Schließt leere Berichte für bestandene Tests aus, wenn die Option `-rP` verwendet wird.

  • #4051: Verbessert die Fehlermeldung, wenn ein ungültiger Python-Ausdruck an die Option `-m` übergeben wird.

  • #4056: `MonkeyPatch.setenv` und `MonkeyPatch.delenv` geben eine Warnung aus, wenn der Name der Umgebungsvariable auf Python 2 keine `str` ist.

    Auf Python 2 verursacht das Hinzufügen von `unicode`-Schlüsseln zu `os.environ` Probleme mit `subprocess` (und möglicherweise anderen Modulen), was dies zu einem subtilen Fehler macht, der insbesondere bei Verwendung von `from __future__ import unicode_literals` anfällig ist.

Verbesserte Dokumentation

  • #3928: Fügt mögliche Werte für den Fixture-Geltungsbereich zur Dokumentation hinzu.

pytest 3.8.1 (2018-09-22)

Fehlerbehebungen

  • #3286: Das Verzeichnis `.pytest_cache` wird nun automatisch von Git ignoriert. Benutzer, die eine Lösung für andere SCMs beitragen möchten, können sich zu diesem Thema äußern/diskutieren.

  • #3749: Behebt den folgenden Fehler bei der Sammlung von Tests innerhalb von Paketen

    TypeError: object of type 'Package' has no len()
    
  • #3941: Behebt einen Fehler, bei dem die indirekte Parametrisierung den Geltungsbereich aller von der Testfunktion verwendeten Fixtures zur Bestimmung des Parametrisierungs-Geltungsbereichs berücksichtigte und nicht nur den Geltungsbereich der parametrierten Fixtures.

  • #3973: Behebt einen Absturz des Assertions-Rewriters, wenn ein Test das aktuelle Arbeitsverzeichnis geändert hat, ohne es danach wiederherzustellen.

  • #3998: Behebt ein Problem, das verhinderte, dass einige `caplog`-Eigenschaften (z. B. `record_tuples`) verfügbar waren, wenn der Debugger mit `--pdb` aufgerufen wurde.

  • #3999: Behebt `UnicodeDecodeError` in python2.x, wenn eine Klasse eine nicht-ASCII-binäre `__repr__` in einer Assertion zurückgibt, die auch nicht-ASCII-Text enthält.

Verbesserte Dokumentation

  • #3996: Die neue Seite Veralterungen und Entfernungen zeigt alle derzeit veralteten Funktionen, die Begründung dafür und Alternativen zur Aktualisierung Ihres Codes. Sie listet auch Funktionen auf, die in früheren Hauptversionen von pytest entfernt wurden, um Benutzern mit alten pytest-Versionen bei der Aktualisierung zu helfen.

Triviale/Interne Änderungen

  • #3955: Verbessert die Erkennung von Changelog-Dateien durch `pre-commit`

  • #3975: Entfernt Legacy-Code um `im_func`, da dieser nur für Python 2 galt

pytest 3.8.0 (2018-09-05)

Veralterungen und Entfernungen

  • #2452: `Config.warn` und `Node.warn` sind veraltet. Siehe Config.warn und Node.warn für Begründungen und Beispiele.

  • #3936: Der zweite Parameter von `@pytest.mark.filterwarnings` wird nicht mehr regulär ausgedrückt, was die tatsächliche Verwendung von regulären Ausdrücken zur Überprüfung der Warnmeldung ermöglicht.

    Hinweis: Das Regulieren der Musterzeichenkette war ein Implementierungsfehler, der Testsuiten, die vom alten Verhalten abhängen, brechen könnte.

Features

  • #2452: Interne pytest-Warnungen werden nun über das Standardmodul `warnings` ausgegeben, wodurch die Standard-Warnungsfilter zur Verwaltung dieser Warnungen verwendet werden können. Dies führt `PytestWarning`, `PytestDeprecationWarning` und `RemovedInPytest4Warning` als Teil der öffentlichen API ein.

    Weitere Informationen finden Sie in der Dokumentation.

  • #2908: `DeprecationWarning` und `PendingDeprecationWarning` werden nun standardmäßig angezeigt, wenn kein anderer Warnungsfilter konfiguriert ist. Dies macht pytest konformer mit PEP 506#recommended-filter-settings-for-test-runners. Weitere Informationen finden Sie in der Dokumentation.

  • #3251: Warnungen werden nun während der Testsammlung erfasst und angezeigt.

  • #3784: Die Umgebungsvariable `PYTEST_DISABLE_PLUGIN_AUTOLOAD` deaktiviert die automatische Plugin-Ladung, wenn sie gesetzt ist.

  • #3829: Die Option `count` wurde zu `console_output_style` hinzugefügt, um die Anzeige des Fortschritts als Zählung statt als Prozentsatz zu ermöglichen.

  • #3837: Unterstützung für die Ergebnisse 'xfailed' und 'xpassed' für die Signatur `pytester.RunResult.assert_outcomes` hinzugefügt.

Fehlerbehebungen

  • #3911: Der Terminal-Writer berücksichtigt nun die Breite von Unicode-Zeichen beim Schreiben des Fortschritts.

  • #3913: Pytest gibt nun mit dem korrekten Exit-Code (EXIT_USAGEERROR, 4) zurück, wenn es mit unbekannten Argumenten aufgerufen wird.

  • #3918: Verbessert die Leistung der Assertions-Neuschreibung.

Verbesserte Dokumentation

  • #3566: Ein kurzer Abschnitt wurde zu `usage.rst` hinzugefügt, der die Verwendung der Flagge `-r` beschreibt, die zur Anzeige zusätzlicher Testzusammenfassungsinformationen verwendet wird.

  • #3907: Korrigierter Typ der Exceptions-Sammlung, die an `xfail` übergeben wird: das Argument `raises` akzeptiert ein `tuple` anstelle einer `list`.

Triviale/Interne Änderungen

  • #3853: Entfernt die Meldung `"run all (no recorded failures)"`, die mit `--failed-first` und `--last-failed` ausgegeben wird, wenn keine fehlgeschlagenen Tests vorhanden sind.

pytest 3.7.4 (2018-08-29)

Fehlerbehebungen

  • #3506: Behebt mögliche Endlosschleifen beim Schreiben von `.pyc`-Dateien.

  • #3853: Das Cache-Plugin beachtet nun die Flagge `-q`, wenn die Flags `--last-failed` und `--failed-first` verwendet werden.

  • #3883: Behebt schlechte Konsolenausgabe bei Verwendung von `console_output_style=classic`.

  • #3888: Behebt macOS-spezifischen Code, der das `capturemanager`-Plugin in Doctests verwendet.

Verbesserte Dokumentation

  • #3902: Korrigiert pytest.org-Links

pytest 3.7.3 (2018-08-26)

Fehlerbehebungen

  • #3033: Fixtures während des Teardowns können nun wieder `capsys` und `capfd` verwenden, um die während der Tests erfasste Ausgabe zu inspizieren.

  • #3773: Behebt die Sammlung von Tests aus `__init__.py`-Dateien, wenn sie mit der Konfigurationsoption `python_files` übereinstimmen.

  • #3796: Problem behoben, bei dem die Aufräumarbeiten von Fixtures aufeinanderfolgender Unterpakete einmal am Ende des äußeren Pakets ausgeführt wurden.

  • #3816: Fehler behoben, bei dem die Option --show-capture=no immer noch Logs anzeigte, die während des Aufräumens von Fixtures gedruckt wurden.

  • #3819: Behoben, dass stdout/stderr nicht erfasst wurden, wenn die Echtzeit-CLI-Protokollierung aktiv war.

  • #3843: Fehler bei der Sammlung behoben, wenn Testfunktionen direkt auf der Befehlszeile mit der test.py::test-Syntax zusammen mit --doctest-modules angegeben wurden.

  • #3848: Fehler behoben, bei denen Unicode-Argumente unter Python 2 nicht an testdir.runpytest übergeben werden konnten.

  • #3854: Fehler behoben, bei denen Tests in Paketen doppelt gesammelt wurden, wenn der Dateiname mit einem Großbuchstaben begann.

Verbesserte Dokumentation

  • #3824: Beispiel für mehrere Glob-Musterübereinstimmungen in python_files hinzugefügt.

  • #3833: Fehlende Dokumentation für pytester.Testdir hinzugefügt.

  • #3870: Korrekte Dokumentation für die Integration von Setuptools.

Triviale/interne Änderungen

  • #3826: Kaputte Typ-Annotationen durch Typ-Kommentare ersetzt.

  • #3845: Verweis auf Issue #568 aus der Dokumentation entfernt, der inzwischen behoben wurde.

pytest 3.7.2 (2018-08-16)

Fehlerbehebungen

  • #3671: Behoben, dass filterwarnings nicht als integriertes Mark registriert wurde.

  • #3768, #3789: Behoben: Tests aus Paketen, die mit normalen Verzeichnissen vermischt sind, werden korrekt gesammelt.

  • #3771: Endlosschleife während der Sammlung behoben, wenn ein pytest_ignore_collect Hook False anstelle von None zurückgibt.

  • #3774: Fehler behoben, bei dem dekorierte Fixtures ihre Funktionalität verloren (z.B. @mock.patch).

  • #3775: Fehler behoben, bei dem das Importieren von Modulen oder anderen Objekten mit dem Präfix pytest_ einen PluginValidationError auslöste.

  • #3788: AttributeError beim Aufräumen von TestCase-Unterklassen behoben, die eine Ausnahme während der Initialisierung auslösen.

  • #3804: Traceback-Berichterstattung für Ausnahmen mit __cause__-Zyklen behoben.

Verbesserte Dokumentation

  • #3746: Dokumentation für metafunc.config hinzugefügt, die versehentlich ausgeblendet war.

pytest 3.7.1 (2018-08-02)

Fehlerbehebungen

  • #3473: Sofortige Ausnahme auslösen, wenn approx() ein erwarteter Wert eines nicht verstandenen Typs übergeben wird (z.B. Strings, verschachtelte Dictionaries usw.).

  • #3712: Dimensionen eines NumPy-Arrays korrekt darstellen, wenn repr() auf approx() angewendet wird.

  • #3742: Inkompatibilität mit Drittanbieter-Plugins während der Sammlung behoben, die den Fehler object has no attribute '_collectfile' verursachte.

  • #3745: Absoluten Pfad anzeigen, wenn cache_dir nicht relativ zu rootdir ist, anstatt einen Fehler auszugeben.

  • #3747: Kompatibilitätsproblem mit Plugins und dem Warncode behoben, der von Fixture-Funktionen ausgegeben wurde, wenn sie direkt aufgerufen wurden.

  • #3748: Endlosschleife in pytest.approx mit Arrays in numpy<1.13 behoben.

  • #3757: pathlib2 auf >=2.2.0 gesetzt, da __fspath__-Unterstützung erforderlich ist.

  • #3763: TypeError behoben, wenn die Assertionsnachricht unter Python 3 bytes ist.

pytest 3.7.0 (2018-07-30)

Veraltete Funktionen und Entfernungen

Neue Funktionen

  • #2283: Neuer Scope für die Fixture package: Fixtures werden finalisiert, wenn der letzte Test eines *Pakets* abgeschlossen ist. Diese Funktion gilt als experimentell, verwenden Sie sie daher sparsam.

  • #3576: Node.add_marker unterstützt nun einen Parameter append=True/False, um zu bestimmen, ob das Mark am Ende (Standard) oder am Anfang stehen soll.

  • #3579: Die Fixture caplog verfügt nun über eine Eigenschaft messages, die einen bequemen Zugriff auf die formatierten Protokollnachrichten ohne zusätzliche Daten des Formatierers/Handlers ermöglicht.

  • #3610: Neue Option --trace, um beim Start eines Tests in den Debugger zu gelangen.

  • #3623: pytester.copy_example als Hilfsmittel zur Durchführung von Akzeptanztests für Beispiele aus dem Projekt eingeführt.

Fehlerbehebungen

  • #2220: Fehler behoben, bei dem Fixtures, die durch direkte Parameter (z.B. Parametrisierung) überschrieben wurden, instanziiert wurden, auch wenn sie nicht von einem Test verwendet wurden.

  • #3695: Fehler bei der Initialisierung von ApproxNumpy behoben; abs und rel Toleranzen waren vertauscht, was zu seltsamen Vergleichsergebnissen führte. Tests hinzugefügt, um abs und rel Toleranzen für np.array zu prüfen und auf erwartete nan mit np.array() zu testen.

  • #980: Ausgabe von lokalen Variablen im Detailmodus behoben.

Verbesserte Dokumentation

  • #3295: Dokumentation zur Verwendung von --last-failed-no-failures korrigiert, indem das fehlende Argument --last-failed in den präsentierten Beispielen ergänzt wurde, da diese irreführend sind und den Eindruck erwecken, dass das fehlende Argument nicht benötigt wird.

Triviale/interne Änderungen

  • #3519: Eine README.md-Datei wird nun im Verzeichnis .pytest_cache erstellt, um klarzustellen, warum das Verzeichnis existiert.

pytest 3.6.4 (2018-07-28)

Fehlerbehebungen

  • Pytest wird mit -mpytest aufgerufen, damit sys.path nicht durch in site-packages installierte Pakete verunreinigt wird. (#742)

Verbesserte Dokumentation

  • Verwendung von smtp_connection anstelle von smtp in der Dokumentation der Fixtures, um mögliche Verwechslungen zu vermeiden. (#3592)

Triviale/interne Änderungen

  • Veraltete __future__-Importe entfernt. (#2319)

  • Hinzufügen einer CITATION, um Informationen zur formellen Zitierung von pytest bereitzustellen. (#3402)

  • Kaputte Typ-Annotationen durch Typ-Kommentare ersetzt. (#3635)

  • Pinning von pluggy auf <0.8. (#3727)

pytest 3.6.3 (2018-07-04)

Fehlerbehebungen

  • Behoben: ImportWarning, die durch explizite relative Importe in Assertion-Rewritten-Paketmodulen ausgelöst wurde. (#3061)

  • Fehler in pytest.approx beim Umgang mit 0-dimensionalen NumPy-Arrays behoben. (#3593)

  • Keine Auslösung von ValueError mehr bei der Verwendung der get_marker API. (#3605)

  • Problem behoben, bei dem Protokollnachrichten mit nicht-ASCII-Zeichen nicht in der Ausgabeprotokolldatei erschienen. (#3630)

  • Keine Auslösung von AttributeError mehr, wenn ältere Marks nicht in Funktionen gespeichert werden können. (#3631)

Verbesserte Dokumentation

  • Die Beschreibung über dem Beispiel für @pytest.mark.skipif passt nun besser zum Code. (#3611)

Triviale/interne Änderungen

  • Internes Refactoring: Nicht verwendetes Attribut CallSpec2tox ._globalid_args und metafunc-Parameter von CallSpec2.copy() entfernt. (#3598)

  • Unterdrückung der Warnung zur Verwendung von reduce in Python 2 (#3609)

  • Verwendung des veralteten Parameters convert von attr.ib korrigiert. (#3653)

pytest 3.6.2 (2018-06-20)

Fehlerbehebungen

  • Regression in Node.add_marker behoben, indem das Mark-Objekt eines MarkDecorator extrahiert wurde. (#3555)

  • Warnungen ohne location wurden als None gemeldet. Dies wurde korrigiert, sodass nun <undetermined location> gemeldet wird. (#3563)

  • Finalisierer im Stack werden weiterhin aufgerufen, wenn ein Finalisierer in einem früheren Scope eine Ausnahme auslöst. (#3569)

  • Fehler bei der Zeichenkodierung für print-Anweisungen in Doctests behoben (#3583)

Verbesserte Dokumentation

  • Dokumentation für das Flag --strict hinzugefügt. (#3549)

Triviale/interne Änderungen

  • Alter Anführungsstil in der Dokumentation von fixture.rst durch Klammern ersetzt. (#3525)

  • Verbesserte Anzeige des Hinweises zu --fulltrace bei KeyboardInterrupt. (#3545)

  • Die Testsuite von pytest ist nicht mehr über python setup.py test aufrufbar – stattdessen rufen Sie pytest oder tox direkt auf. (#3552)

  • Tippfehler in der Dokumentation behoben (#3567)

pytest 3.6.1 (05.06.2018)

Fehlerbehebungen

  • Ein Fehler behoben, bei dem stdout und stderr von junitxml doppelt protokolliert wurden, wenn ein Test als xfail markiert war. (#3491)

  • Behebt usefixtures Markierung, die auf unittest-Tests angewendet wurde, indem FixtureInfo korrekt instanziiert wird. (#3498)

  • Behebt die Kompatibilität des Assertion-Rewriters mit Bibliotheken, die file-Objekte per Monkey Patching ändern. (#3503)

Verbesserte Dokumentation

  • Ein Abschnitt darüber, wie Fixtures als Fabriken verwendet werden, zur Fixture-Dokumentation hinzugefügt. (#3461)

Triviale/Interne Änderungen

  • Caching für pip/pre-commit aktiviert, um die Build-Zeit auf travis/appveyor zu reduzieren. (#3502)

  • Umstellung von pytest auf das src/-Layout, wie wir es bereits als gute Praxis empfohlen haben – nun setzen wir es auch um. (#3513)

  • Behebt if in tests zur Unterstützung von 3.7.0b5, bei dem die Docstring-Verarbeitung in AST zurückgesetzt wurde. (#3530)

  • Entfernt einige Kompatibilitätscodes für python2.5. (#3529)

pytest 3.6.0 (23.05.2018)

Features

  • Überarbeitung des internen Implementierung von pytest.mark mit korrekter pro-Knoten-Handhabung, was eine Reihe langjähriger Fehler aufgrund des alten Designs behebt. Dies führt neue APIs Node.iter_markers(name) und Node.get_closest_marker(name) ein. Benutzer werden **dringend gebeten**, die Gründe für die Überarbeitung in der Dokumentation zu lesen oder direkt zu den Details über das Aktualisieren bestehenden Codes zur Verwendung der neuen APIs zu springen. (#3317)

  • Wenn @pytest.fixture nun mehr als einmal auf dieselbe Funktion angewendet wird, wird ein ValueError ausgelöst. Dieses fehlerhafte Verhalten würde zu überraschenden Problemen führen und wenn es für eine Testsuite funktionierte, dann meist zufällig. (#2334)

  • Unterstützung für Pythons 3.7 eingebauter breakpoint() Methode, siehe Verwendung der eingebauten Breakpoint-Funktion für Details. (#3180)

  • monkeypatch unterstützt nun eine context() Funktion, die als Kontextmanager fungiert und alle Patches innerhalb des with-Blocks rückgängig macht. (#3290)

  • Die Option --pdb bewirkt nun, dass KeyboardInterrupt den Debugger aufruft, anstatt die Testsitzung zu beenden. Auf python 2.7 beendet das erneute Drücken von CTRL+C den Debugger. Auf python 3.2 und höher verwenden Sie CTRL+D. (#3299)

  • pytest ändert nicht mehr die Protokollierungsstufe des Stammprotokollierers, wenn der Parameter log-level einen höheren numerischen Wert hat als die Stufe des Stammprotokollierers, was die Kompatibilität mit benutzerdefinierten Protokollierungskonfigurationen im Benutzercode verbessert. (#3307)

Fehlerbehebungen

  • Eine seltene Race-Condition, die zu beschädigten .pyc-Dateien unter Windows führen konnte, wurde hoffentlich behoben. (#3008)

  • Verwendet auch iter_marker zur Erkennung der Markierungen, die für Marker-Ausdrücke von der Kommandozeile gelten, um schlechte Daten aus dem Legacy-Markierungspeicher zu vermeiden. (#3441)

  • Beim Anzeigen von Diffs fehlgeschlagener Assertionen, deren Inhalte nur Leerzeichen enthalten, werden diese zuerst mit repr() escaped, um Unterschiede leicht erkennbar zu machen. (#3443)

Verbesserte Dokumentation

  • Ändert das Copyright-Jahr der Dokumentation in einen Bereich, der sich bei jeder Veröffentlichung automatisch aktualisiert. (#3303)

Triviale/Interne Änderungen

  • pytest hängt nun von der Bibliothek python-atomicwrites ab. (#3008)

  • Aktualisiert alle pypi.python.org-URLs auf pypi.org. (#3431)

  • Erkennt pytest_-präfixierte Hooks über den internen Plugin-Manager, da pluggy das Argument implprefix für PluginManager deprecating. (#3487)

  • Importiert Mapping und Sequence aus _pytest.compat anstelle direkt aus collections in python_api.py::approx. Fügt Mapping zu _pytest.compat hinzu, importiert es aus collections unter python 2, aber aus collections.abc unter Python 3, um eine DeprecationWarning unter Python 3.7 oder neuer zu vermeiden. (#3497)

pytest 3.5.1 (23.04.2018)

Fehlerbehebungen

  • Setzt sys.last_type, sys.last_value und sys.last_traceback vor der Ausführung jedes Tests zurück. Diese Attribute werden von pytest während der Testausführung zur Fehlerbehebung hinzugefügt, aber nie zurückgesetzt, sodass sie eine speicherlecks zu dem Frame des zuletzt fehlgeschlagenen Tests erstellen würden, der wiederum niemals vom Garbage Collector wiederhergestellt werden konnte. (#2798)

  • pytest.raises löst nun TypeError aus, wenn ein unbekanntes Schlüsselwortargument empfangen wird. (#3348)

  • pytest.raises funktioniert nun auch mit Ausnahme-Klassen, die wie Iterables aussehen. (#3372)

Verbesserte Dokumentation

  • Tippfehler in der caplog Fixture-Dokumentation behoben, die bestimmte Attribute fälschlicherweise als Methoden identifizierte. (#3406)

Triviale/Interne Änderungen

  • Eine aussagekräftigere Fehlermeldung hinzugefügt, wenn eine Funktion parametrisiert wird, deren Argument einen Standardwert hat. (#3221)

  • Entfernt die interne Funktion _pytest.terminal.flatten zugunsten von more_itertools.collapse. (#3330)

  • Importiert einige Module aus collections.abc anstelle von collections, da erstere Module eine DeprecationWarning in Python 3.7 auslösen. (#3339)

  • record_property ist nicht mehr experimentell, die Warnungen wurden vergessen zu entfernen. (#3360)

  • Hinweis in der Dokumentation und der CLI-Hilfe, dass Fixtures mit führendem _ nur dann von pytest --fixtures angezeigt werden, wenn die Option -v hinzugefügt wird. (#3398)

pytest 3.5.0 (21.03.2018)

Deprecations und Entfernungen

  • Die record_xml_property Fixture ist nun veraltet zugunsten der allgemeineren record_property. (#2770)

  • Die Definition von pytest_plugins ist nun in nicht-top-level conftest.py Dateien veraltet, da sie in den gesamten Verzeichnisbaum „auslaufen“. Siehe die Dokumentation für die Begründung dieser Entscheidung (#3084)

Features

  • Neue Kommandozeilenoption --show-capture, die es ermöglicht, die Anzeige von erfasstem Output bei fehlgeschlagenen Tests festzulegen: no, stdout, stderr, log oder all (Standard). (#1478)

  • Neue Kommandozeilenoption --rootdir, um die Regeln für die Erkennung des Stammverzeichnisses zu überschreiben. Details finden Sie im Anpassen in der Dokumentation. (#1642)

  • Fixtures werden nun basierend auf ihren Gültigkeitsbereichen instanziiert, wobei höherwertige Fixtures (wie session) zuerst instanziiert werden als niedrigerwertige Fixtures (wie function). Die relative Reihenfolge von Fixtures mit demselben Gültigkeitsbereich bleibt unverändert und basiert auf ihrer Deklarationsreihenfolge und ihren Abhängigkeiten. (#2405)

  • record_xml_property umbenannt in record_property und ist nun kompatibel mit xdist, Markern und jedem Reporter. Der Name record_xml_property ist nun veraltet. (#2770)

  • Neue Optionen --nf, --new-first: Führt zuerst neue Tests aus, gefolgt von den restlichen Tests, wobei in beiden Fällen die Tests auch nach der Änderungszeit der Datei sortiert werden, wobei neuere Dateien zuerst kommen. (#3034)

  • Neue Kommandozeilenoption --last-failed-no-failures, die das Verhalten der --last-failed Funktion des Cache-Plugins festlegt, wenn bei der letzten Ausführung keine Tests fehlgeschlagen sind (oder kein Cache gefunden wurde): none oder all (Standard). (#3139)

  • Neue Kommandozeilenoption --doctest-continue-on-failure, um Doctests anzuzeigen, die mehrere Fehler pro Snippet zeigen, anstatt beim ersten Fehler abzubrechen. (#3149)

  • Erfasste Protokollnachrichten werden zum <system-out>-Tag in der generierten junit xml-Datei hinzugefügt, wenn die Ini-Option junit_logging auf system-out gesetzt ist. Wenn der Wert dieser Ini-Option system-err ist, werden die Protokolle in <system-err> geschrieben. Der Standardwert für junit_logging ist no, was bedeutet, dass erfasste Protokolle nicht in die Ausgabedatei geschrieben werden. (#3156)

  • Ermöglicht dem Logging-Plugin die Behandlung der Hooks pytest_runtest_logstart und pytest_runtest_logfinish, wenn Live-Protokolle aktiviert sind. (#3189)

  • Das Übergeben von --log-cli-level auf der Kommandozeile aktiviert automatisch die Live-Protokollierung. (#3190)

  • Fügt die Kommandozeilenoption --deselect hinzu, um die Deselektion einzelner Tests zur Sammelzeit zu ermöglichen. (#3198)

  • Erfasste Protokolle werden vor dem Aufrufen von pdb ausgegeben. (#3204)

  • Die Anzahl der deselektierten Elemente wird nun vor der Ausführung der Tests angezeigt, z. B. collected X items / Y deselected. (#3213)

  • Das eingebaute Modul platform steht nun für die Verwendung in Ausdrücken in pytest.mark zur Verfügung. (#3236)

  • Der Abschnitt *kurze Zusammenfassung der Testergebnisse* wird nun nach Tracebacks und Warnungen im Terminal angezeigt. (#3255)

  • Neues Flag --verbosity, um die Ausführlichkeitsstufe explizit festzulegen. (#3296)

  • pytest.approx akzeptiert nun den Vergleich eines numpy-Arrays mit einem Skalar. (#3312)

Fehlerbehebungen

  • Unterdrücken von IOError beim Schließen der temporären Datei zum Erfassen von Streams in Python 2.7. (#2370)

  • Korrigierte clear() Methode auf dem caplog Fixture, die records, aber nicht die text Eigenschaft gelöscht hat. (#3297)

  • Während der Testsammlung, wenn stdin nicht gelesen werden darf, erlaubt das DontReadFromStdin Objekt sich selbst immer noch, iterierbar zu sein und zu einem Iterator aufgelöst zu werden, ohne abzustürzen. (#3314)

Verbesserte Dokumentation

Triviale/Interne Änderungen

  • Minimumanforderung für attrs auf 17.4.0 geändert. (#3228)

  • Beispielverzeichnisse umbenannt, damit alle Tests beim Ausführen vom Basisverzeichnis aus bestanden werden. (#3245)

  • Internes mark.py Modul wurde in ein Paket umgewandelt. (#3250)

  • pytest hängt nun vom Paket more-itertools ab. (#3265)

  • Warnung hinzugefügt, wenn der [pytest] Abschnitt in einer .cfg Datei verwendet wird, die mit -c übergeben wird (#3268)

  • nodeids können nun explizit an FSCollector und Node Konstruktoren übergeben werden. (#3291)

  • Interne Refaktorisierung von FormattedExcinfo zur Nutzung von attrs Funktionen und Entfernung von altem Support-Code für ältere Python-Versionen. (#3292)

  • Refaktorisierung zur Vereinheitlichung der internen Behandlung der Ausführlichkeit. (#3296)

  • Interne Refaktorisierung zur besseren Integration mit argparse. (#3304)

  • Korrigiert ein Python-Beispiel beim Aufruf eines Fixtures in doc/en/usage.rst (#3308)

pytest 3.4.2 (2018-03-04)

Fehlerbehebungen

  • Fortschrittsinformationen entfernt, wenn die Erfassungsoption auf no gesetzt ist. (#3203)

  • Überprüfung des Bindirs von exists zu isdir umformatiert. (#3241)

  • Korrigiert TypeError Problem bei Verwendung von approx mit einem Decimal Wert. (#3247)

  • Korrigiert Referenzzyklus, der bei Verwendung des request Fixtures erzeugt wurde. (#3249)

  • Abschnitte [tool:pytest] in *.cfg Dateien, die mit der -c Option übergeben werden, werden nun korrekt erkannt. (#3260)

Verbesserte Dokumentation

  • Logging-Plugin zur Plugin-Liste hinzugefügt. (#3209)

Triviale/Interne Änderungen

  • Korrektur eines kleinen Tippfehlers in fixture.rst (#3259)

pytest 3.4.1 (2018-02-20)

Fehlerbehebungen

  • Import von doctest.UnexpectedException auf die oberste Ebene verschoben, um mögliche Fehler bei der Verwendung von --pdb zu vermeiden. (#1810)

  • Hinzugefügt des Druckens von erfasstem stdout/stderr vor dem Eintritt in pdb und verbessert einen Test, der falsche negative Ergebnisse über die Ausgabeerfassung lieferte. (#3052)

  • Korrigiert die Reihenfolge von Tests, die parametrisierte Fixtures verwenden, was dazu führen kann, dass Fixtures mehr als nötig erstellt werden. (#3161)

  • Korrigiert einen Fehler, bei dem Logging, das in Hooks außerhalb von „Testlauf“-Hooks stattfindet, zu einem internen Fehler führte. (#3184)

  • Argumente, die vom unittest.mock.patch Decorator injiziert werden, werden nun korrekt erkannt, wenn das PyPI mock.patch installiert und importiert ist. (#3206)

  • Fehler, die angezeigt werden, wenn ein pytest.raises() mit match= fehlschlägt, sind nun klarer darüber, was passiert ist: Wenn keine Ausnahme ausgelöst wurde, wurde der Teil „matching ‘...’“ entfernt, da er fälschlicherweise implizierte, dass eine Ausnahme ausgelöst wurde, sie aber nicht übereinstimmte. Wenn eine falsche Ausnahme ausgelöst wurde, wird sie nun geworfen (wie pytest.raised() ohne match=), anstatt sich über den nicht übereinstimmenden Text zu beschweren. (#3222)

  • Korrigiert die Handhabung der Ausgabeerfassung in Doctests unter macOS. (#985)

Verbesserte Dokumentation

  • Hinzugefügt von Sphinx-Parameterdokumenten für die Argumente match und message zu pytest.raises. (#3202)

Triviale/Interne Änderungen

  • pytest hat das Publikationsverfahren geändert und wird nun direkt von Travis nach PyPI veröffentlicht. (#3060)

  • Umbenannt von ParameterSet._for_parameterize() zu _for_parametrize(), um die Namenskonventionen einzuhalten. (#3166)

  • Überspringt fehlgeschlagene pdb/doctest Tests auf Mac. (#985)

pytest 3.4.0 (2018-01-30)

Veralterungen und Entfernungen

  • Alle pytest-Klassen erben nun von object für bessere Python 2/3-Kompatibilität. Dies sollte keinen Einfluss auf den Benutzercode haben, außer in sehr seltenen Grenzfällen. (#2147)

Funktionen

  • Einführung der empty_parameter_set_mark Ini-Option zur Auswahl, welche Markierung angewendet wird, wenn @pytest.mark.parametrize ein leeres Parameterset erhält. Gültige Optionen sind skip (Standard) und xfail. Beachten Sie, dass geplant ist, den Standard in zukünftigen Versionen auf xfail zu ändern, da dies als weniger fehleranfällig angesehen wird. (#2527)

  • Inkompatible Änderung: Nach Feedback aus der Community wurde die Funktionalität für Logging geändert. Bitte konsultieren Sie die Logging-Dokumentation für Details. (#3013)

  • Konsolenausgabe fällt auf den „klassischen“ Modus zurück, wenn das Erfassen deaktiviert ist (-s), andernfalls wird die Ausgabe so stark verfälscht, dass sie unbrauchbar wird. (#3038)

  • Neuer pytest_runtest_logfinish Hook, der aufgerufen wird, wenn ein Testelement die Ausführung beendet hat, analog zu pytest_runtest_logstart. (#3101)

  • Verbesserung der Leistung beim Sammeln von Tests mit vielen Fixtures. (#3107)

  • Neue Methode caplog.get_records(when), die Zugriff auf die erfassten Datensätze für die Testphasen "setup", "call" und "teardown" bietet. (#3117)

  • Neues Fixture record_xml_attribute, das die Modifikation und Einfügung von Attributen in den <testcase> XML-Knoten in JUnit-Berichten ermöglicht. (#3130)

  • Das Standard-Cache-Verzeichnis wurde von .cache in .pytest_cache umbenannt, nachdem aus der Community das Feedback kam, dass der Name .cache nicht klar machte, dass er von pytest verwendet wird. (#3138)

  • Farbliche Hervorhebung der Spalte levelname in der Live-Log-Ausgabe. (#3142)

Fehlerbehebungen

  • Behebt das Hängenbleiben von pexpect-Tests unter macOS durch die Verwendung von flush() anstelle von wait(). (#2022)

  • Korrigiert die Wiederherstellung des Python-Zustands nach In-Prozess-pytest-Läufen mit dem pytester Plugin; dies kann Tests brechen, die mehrere In-Prozess-pytest-Läufe verwenden, wenn spätere Läufe von früheren globalen Interpreteränderungen abhängen. (#3016)

  • Korrigiert das Überspringen des Plugin-Reporting-Hooks, wenn ein Test vor dem Plugin-Setup-Hook abgebrochen wurde. (#3074)

  • Korrigiert den Fortschrittsprozentsatz, der gemeldet wird, wenn Tests während des Teardowns fehlschlagen. (#3088)

  • Inkompatible Änderung: Die Option -o/--override frisst nicht mehr alle verbleibenden Optionen, was zu überraschendem Verhalten führen kann: z. B. schlägt pytest -o foo=1 /path/to/test.py fehl, da /path/to/test.py als Teil des -o Arguments auf der Kommandozeile betrachtet wurde. Eine Folge davon ist, dass nun mehrere Konfigurationsüberschreibungen mehrere -o Flags benötigen: pytest -o foo=1 -o bar=2. (#3103)

Verbesserte Dokumentation

  • Dokumentiert Hooks (definiert mit historic=True), die nicht mit hookwrapper=True verwendet werden können. (#2423)

  • Klarstellung, dass die Warnungserfassung standardmäßig den Warnungsfilter nicht ändert. (#2457)

  • Klarstellung einer möglichen Verwirrung bei der Verwendung von pytest_fixture_setup mit Fixture-Funktionen, die None zurückgeben. (#2698)

  • Korrigiert die Formulierung eines Satzes über Doctest-Flags, die in pytest verwendet werden. (#3076)

  • Bevorzugt https://*.readthedocs.io gegenüber http://*.rtfd.org für Links in der Dokumentation. (#3092)

  • Verbessert die Lesbarkeit (Wording, Grammatik) des Getting Started Guides (#3131)

  • Hinzugefügt einer Notiz, dass das mehrmalige Aufrufen von pytest.main aus demselben Prozess wegen des Import-Cachings nicht empfohlen wird. (#3143)

Triviale/Interne Änderungen

  • Zeigt eine einfache und verständliche Fehlermeldung an, wenn Schlüsselwortausdrücke einen Syntaxfehler auslösen (zum Beispiel zeigt "-k foo and import" einen Fehler an, dass das Schlüsselwort import nicht in Ausdrücken verwendet werden kann). (#2953)

  • Parametrisierte automatische Test-ID-Generierung ändern, um das Attribut __name__ von Funktionen anstelle des Fallback-Argumentnamens plus Zähler zu verwenden. (#2976)

  • Ersetzen Sie py.std durch stdlib-Imports. (#3067)

  • Korrigiert „you“ zu „your“ in der Logging-Dokumentation. (#3129)

pytest 3.3.2 (2017-12-25)

Fehlerbehebungen

  • pytester: Ignoriert Dateien, die zur Ermittlung von Metadaten des aktuellen Benutzers im FD-Leak-Detektor verwendet werden. (#2784)

  • Behob **Speicherleck**, bei dem von Fixtures zurückgegebene Objekte nie vom Garbage Collector zerstört wurden. (#2981)

  • Korrigiert die Konvertierung von pyargs in Dateinamen, um unter Python 2 keine Symlinks zu konvertieren. (#2985)

  • PYTEST_DONT_REWRITE wird nun auch für Plugins geprüft und nicht nur für Testmodule. (#2995)

Verbesserte Dokumentation

  • Fügt eine erläuternde Notiz über das Verhalten mehrerer parametrisierter Argumente hinzu (#3001)

Triviale/Interne Änderungen

  • Code-Bereinigung. (#3015, #3021)

  • Code bereinigt, indem Imports und Referenzen von _ast durch ast ersetzt werden. (#3018)

pytest 3.3.1 (2017-12-05)

Fehlerbehebungen

  • Behebt ein Problem mit -p no:<plugin>, das keine Auswirkung hatte. (#2920)

  • Behebt Regression mit Warnungen, die nicht-String-Argumente in Python 2 enthielten. (#2956)

  • Null-Bytes immer escapen, wenn PYTEST_CURRENT_TEST gesetzt wird. (#2957)

  • Behebt ZeroDivisionError bei der Verwendung des testmon-Plugins, wenn keine Tests gesammelt wurden. (#2971)

  • Bringt TerminalReporter.writer als Alias für TerminalReporter._tw zurück. Dieser Alias wurde versehentlich in der Version 3.3.0 entfernt. (#2984)

  • Das Plugin pytest-capturelog wird nun ebenfalls auf die Blacklist gesetzt, um Fehler zu vermeiden, wenn pytest mit noch installiertem Plugin ausgeführt wird. (#3004)

Verbesserte Dokumentation

  • Behebt defekten Link zum Plugin pytest-localserver. (#2963)

Triviale/Interne Änderungen

  • Aktualisiert den Github „bugs“-Link in CONTRIBUTING.rst (#2949)

pytest 3.3.0 (2017-11-23)

Deprecations und Entfernungen

  • pytest unterstützt nicht mehr Python **2.6** und **3.3**. Diese Python-Versionen sind seit einiger Zeit EOL und verursachen Wartungs- und Kompatibilitätskosten für das pytest-Kernteam. Nach Rücksprache mit der restlichen Community wurde beschlossen, dass sie ab dieser Version nicht mehr unterstützt werden. Benutzer, die diese Versionen weiterhin benötigen, sollten pytest auf <3.3 pinnen. (#2812)

  • Entfernt die interne Funktion _preloadplugins(). Diese Entfernung ist Teil der Deprecation des pytest_namespace() Hooks. (#2636)

  • Intern: CallSpec2 wird nun intern so geändert, dass es eine Liste von Marks anstelle einer fehlerhaften Abbildung von Schlüsselwörtern hat. Dies entfernt das `keywords`-Attribut der internen CallSpec2-Klasse. (#2672)

  • Entfernt ParameterSet.deprecated_arg_dict – es ist keine öffentliche API und das Fehlen des Unterstrichs war ein Namensfehler. (#2675)

  • Entfernt das interne, mehrtypige Attribut Node._evalskip und ersetzt es durch das boolesche Node._skipped_by_mark. (#2767)

  • Die an pytest.fixture übergebene Liste params wird nun für alle Zwecke als unveränderlich und zum Zeitpunkt des Aufrufs von pytest.fixture eingefroren betrachtet. Zuvor konnte die Liste vor der ersten Ausführung des Fixtures geändert werden, was eine Form der dynamischen Parametrisierung ermöglichte (z. B. Aktualisierung von Befehlszeilenoptionen). Dies war jedoch ein unerwünschtes Implementierungsdetail, das die Interna verkomplizierte und einige interne Bereinigungen verhinderte. Siehe Issue #2959 für Details und einen empfohlenen Workaround.

Funktionen

  • Der Hook pytest_fixture_post_finalizer kann nun ein request-Argument erhalten. (#2124)

  • Ersetzt den alten Introspektionscode in compat.py, der die verfügbaren Argumente von Fixtures bestimmt, durch `inspect.signature` unter Python 3 und `funcsigs.signature` unter Python 2. Dies sollte __signature__-Deklarationen in Funktionen berücksichtigen. (#2267)

  • Tests mit der globalen Variable pytestmark nur einmal melden. (#2549)

  • Jetzt zeigt pytest den gesamten Fortschritt in Prozent während der Ausführung von Tests an. Der vorherige Ausgabestil kann durch Konfiguration der Einstellung console_output_style auf classic eingestellt werden. (#2657)

  • Signatur von warns an raises angleichen, indem das Schlüsselwort match hinzugefügt wird. (#2708)

  • pytest erfasst und zeigt nun Ausgaben des Standardmoduls logging an. Der Benutzer kann die zu erfassende Protokollierungsstufe steuern, indem er Optionen in pytest.ini, der Befehlszeile und auch bei einzelnen Tests mit Markierungen angibt. Außerdem steht ein caplog-Fixture zur Verfügung, mit dem Benutzer die erfassten Protokolle während spezifischer Tests testen können (ähnlich wie z. B. capsys). Weitere Informationen finden Sie in der Logging-Dokumentation. Dieses Feature wurde durch die Zusammenführung des beliebten Plugins pytest-catchlog eingeführt, dank @thisch. Beachten Sie, dass während der Zusammenführung die Abwärtskompatibilitäts-Schnittstelle mit dem nicht mehr existierenden pytest-capturelog gestrichen wurde. (#2794)

  • Fügt das `allow_module_level`-Keyword-Argument zu pytest.skip() hinzu, um das Überspringen des gesamten Moduls zu ermöglichen. (#2808)

  • Erlaubt das Setzen von file_or_dir, -c und -o in PYTEST_ADDOPTS. (#2824)

  • Gibt die Ergebnisse der stdout/stderr-Erfassung als namedtuple zurück, sodass out und err über Attribute zugänglich sind. (#2879)

  • Fügt capfdbinary hinzu, eine Version von capfd, die Bytes von readouterr() zurückgibt. (#2923)

  • Fügt capsysbinary hinzu, eine Version von capsys, die Bytes von readouterr() zurückgibt. (#2934)

  • Implementiert die Funktion zum Überspringen von setup.py-Dateien bei Ausführung mit --doctest-modules. (#502)

Fehlerbehebungen

  • Setzt die Ausgabenerfassung nach dem Kontextmanager capsys/capfd.disabled() fort. (#1993)

  • Die Hooks pytest_fixture_setup und pytest_fixture_post_finalizer werden nun für alle conftest.py-Dateien aufgerufen. (#2124)

  • Wenn während des Ladens eines Plugins ein Fehler auftritt, unterdrückt pytest nicht mehr den ursprünglichen Traceback. In Python 2 wird der ursprüngliche Traceback mit einer neuen Nachricht angezeigt, die das Plugin erklärt. In Python 3 werden 2 kanonisierte Ausnahmen angezeigt: die ursprüngliche Ausnahme beim Laden des Plugins und eine Ausnahme, die pytest beim Laden eines Plugins wirft. (#2491)

  • capsys und capfd können nun von anderen Fixtures verwendet werden. (#2709)

  • Das interne Plugin pytester kodiert bytes-Argumente korrekt mit utf-8. (#2738)

  • testdir verwendet nun die gleiche Methode wie tmpdir, um sein temporäres Verzeichnis zu erstellen. Dies ändert die endgültige Struktur des testdir-Verzeichnisses leicht, sollte aber die Nutzung in normalen Szenarien nicht beeinträchtigen und eine Reihe von potenziellen Problemen vermeiden. (#2751)

  • pytest beschwert sich nicht mehr über Warnungen mit Unicode-Nachrichten, die nicht ASCII-kompatibel sind, selbst bei ASCII-kompatiblen Nachrichten. Infolgedessen werden Warnungen mit Unicode-Nachrichten zur Sicherheit zuerst in eine ASCII-Darstellung umgewandelt. (#2809)

  • Ändert den Rückgabewert des pytest-Befehls, wenn --maxfail erreicht wird, von 2 (unterbrochen) auf 1 (fehlgeschlagen). (#2845)

  • Behebt ein Problem bei der Assertion-Rewriting, das dazu führen konnte, dass Module neu geschrieben wurden, die nicht hätten neu geschrieben werden sollen. (#2939)

  • Behandelt Marks ohne Beschreibung in pytest.ini. (#2942)

Triviale/Interne Änderungen

  • pytest hängt nun von attrs für interne Strukturen ab, um die Code-Wartbarkeit zu erleichtern. (#2641)

  • Refaktorisiert den internen Python 2/3-Kompatibilitätscode zur Verwendung von six. (#2642)

  • Entfernt das Vending von pluggy – wir verpassen seine neuesten Änderungen ohne großen Vorteil (#2719)

  • Interner Refactoring: Vereinfachtes Escaping von ASCII-Strings durch Verwendung des `backslashreplace`-Fehlerbehandlers in neueren Python 3-Versionen. (#2734)

  • Entfernt unnötigen Mark-Evaluator im Unittest-Plugin (#2767)

  • Aufrufe von Metafunc.addcall geben jetzt eine Deprecation-Warnung aus. Diese Funktion wird voraussichtlich in pytest-4.0 entfernt. (#2876)

  • Interner Umzug der Parameter-Set-Extraktion an einen besser wartbaren Ort. (#2877)

  • Interne Refaktorierung zur Vereinfachung der Suche nach Scope-Nodes. (#2910)

  • Konfigurieren Sie pytest so, dass pip pytest nicht in nicht unterstützten Python-Versionen installiert. (#2922)

pytest 3.2.5 (2017-11-15)

Fehlerbehebungen

  • Entfernen Sie die Einschränkung py<1.5 aus pytest, da dies in einigen Installationen zu Versionskonflikten führen kann. (#2926)

pytest 3.2.4 (2017-11-13)

Fehlerbehebungen

  • Beheben Sie den Fehler, bei dem die Ausführung mit --pyargs zu Elementen mit leerem parent.nodeid führt, wenn sie von einem anderen Stammverzeichnis aus ausgeführt werden. (#2775)

  • Beheben Sie ein Problem mit @pytest.parametrize, wenn argnames als Schlüsselwortargumente angegeben wurden. (#2819)

  • Entfernen Sie Leerzeichen aus Markernamen, wenn diese aus der INI-Konfiguration gelesen werden. (#2856)

  • Zeigen Sie den vollständigen Kontext des Doctest-Quellcodes in der pytest-Ausgabe an, wenn die Zeilennummer des fehlgeschlagenen Beispiels im Docstring < 9 ist. (#2882)

  • Gleichen Sie Fixture-Pfade mit tatsächlichen Pfadsegmenten ab, um das Abgleichen von Ordnern zu vermeiden, die ein Präfix gemeinsam haben. (#2836)

Verbesserte Dokumentation

  • Führen Sie einen speziellen Abschnitt zu conftest.py ein. (#1505)

  • Erwähnen Sie explizit xpass in der Dokumentation von xfail. (#1997)

  • Fügen Sie ein Beispiel für pytest.param in das Dokument/parametrize-Dokument ein. (#2658)

  • Klären Sie die Sprache des Vorschlags für Fixture-Parameter (#2893)

  • Listen Sie Python 3.6 in den dokumentierten unterstützten Versionen im Einstiegsdokument auf. (#2903)

  • Klären Sie die Dokumentation der verfügbaren Fixture-Scopes. (#538)

  • Fügen Sie Dokumentation über die python -m pytest-Aufrufe hinzu, die das aktuelle Verzeichnis zu sys.path hinzufügen. (#911)

pytest 3.2.3 (2017-10-03)

Fehlerbehebungen

  • Beheben Sie den Absturz bei der Tab-Vervollständigung, wenn kein Präfix angegeben ist. (#2748)

  • Die Gleichheitsprüfungsfunktion (__eq__) von MarkDecorator gibt False zurück, wenn ein Objekt keine Instanz von MarkDecorator ist. (#2758)

  • Beim Ausführen von pytest --fixtures-per-test: Absturz verhindern, wenn ein Element kein _fixtureinfo-Attribut hat (z.B. Doctests) (#2788)

Verbesserte Dokumentation

  • Fügen Sie im Hilfetext der Option -k ein Beispiel für die Verwendung von not hinzu, um bestimmte Tests, deren Namen dem bereitgestellten Ausdruck entsprechen, nicht auszuwählen. (#1442)

  • Fügen Sie in parametrize.rst eine Notiz über das mehrmalige Aufrufen von metafunc.parametrize hinzu. (#1548)

Triviale/interne Änderungen

  • Setzen Sie xfail_strict=True in der eigenen Testsuite von pytest, um erwartete Fehler aufzufangen, sobald sie erfolgreich sind. (#2722)

  • Beheben Sie einen Tippfehler im Beispiel für das Übergeben eines Callables an Marker (in example/markers.rst) (#2765)

pytest 3.2.2 (2017-09-06)

Fehlerbehebungen

  • Das Aufrufen des veralteten request.getfuncargvalue() zeigt jetzt die Quelle des Aufrufs an. (#2681)

  • Erlauben Sie Tests, die als @staticmethod deklariert sind, die Verwendung von Fixtures. (#2699)

  • Behob ein Randfall während der Sammlung: Attribute, bei deren Zugriff pytest.fail ausgelöst wurde, würden die gesamte Sammlung abbrechen. (#2707)

  • Beheben Sie ReprFuncArgs mit gemischten Unicode- und UTF-8-Argumenten. (#2731)

Verbesserte Dokumentation

  • Fügen Sie in den Beispielen zur Arbeit mit benutzerdefinierten Markern Beispiele hinzu, die die Verwendung von pytest.mark.MARKER_NAME.with_args im Vergleich zu pytest.mark.MARKER_NAME.__call__ demonstrieren (#2604)

  • Verwenden Sie in einem der einfachen Beispiele pytest_collection_modifyitems(), um Tests basierend auf einer Befehlszeilenoption zu überspringen, was deren gemeinsame Nutzung ermöglicht und gleichzeitig einen Benutzerfehler beim Zugriff auf pytest.config vor der Argumentenanalyse verhindert. (#2653)

Triviale/interne Änderungen

  • Behob einen kleineren Fehler im Code-Snippet „Good Practices/Manual Integration“. (#2691)

  • Behob einen Tippfehler in goodpractices.rst. (#2721)

  • Verbessern Sie die Benutzerführung bezüglich der Deprecation von --resultlog. (#2739)

pytest 3.2.1 (2017-08-08)

Fehlerbehebungen

  • Behob einen kleinen Anzeigefehler im Terminal beim Sammeln eines einzelnen Testelements. (#2579)

  • Betrachten Sie / korrekt als Dateitrennzeichen, um Plugin-Dateien unter Windows automatisch für das Rewriting zu markieren. (#2591)

  • Testnamen korrekt maskieren, wenn die Umgebungsvariable PYTEST_CURRENT_TEST gesetzt wird. (#2644)

  • Beheben Sie einen Fehler unter Windows und Python 3.6+, wenn sys.stdout durch ein Stream-ähnliches Objekt ersetzt wurde, das nicht das vollständige io-Modul-Pufferprotokoll implementiert. Dies betrifft insbesondere pytest-xdist-Benutzer auf der genannten Plattform. (#2666)

Verbesserte Dokumentation

  • Dokumentieren Sie explizit, welche pytest-Funktionen mit unittest funktionieren. (#2626)

pytest 3.2.0 (2017-07-30)

Deprecations und Entfernungen

  • pytest.approx unterstützt nicht mehr die Operatoren >, >=, < und <=, um überraschendes/inkonsistentes Verhalten zu vermeiden. Weitere Informationen finden Sie in der Dokumentation zu approx(). (#2003)

  • Alle alten spezifischen Verhaltensweisen in aktuellen Klassen der pytest-API gelten ab diesem Zeitpunkt als veraltet und werden in einer zukünftigen Version entfernt. Dies betrifft nur Python 2-Benutzer und seltene Situationen. (#2147)

  • Beim Verwenden von Markern für Parameter in pytest.mark.parametrize wird nun eine Deprecation-Warnung ausgegeben. Verwenden Sie stattdessen pytest.param, um Marker auf Parameter anzuwenden. (#2427)

Features

  • Fügen Sie Unterstützung für NumPy-Arrays (und Dictionaries) zu approx hinzu. (#1994)

  • Testfunktions-Objekte haben nun ein pytestmark-Attribut, das eine Liste von Markern enthält, die direkt auf die Testfunktion angewendet werden, im Gegensatz zu Markern, die von übergeordneten Klassen oder Modulen geerbt werden. (#2516)

  • Die Sammlung ignoriert standardmäßig lokale virtuelle Umgebungen; --collect-in-virtualenv überschreibt dieses Verhalten. (#2518)

  • Erlauben Sie Klassmethoden, die als @staticmethod dekoriert sind, Kandidaten für die Sammlung als Testfunktion zu sein. (Nur für Python 2.7 und höher. Python 2.6 wird weiterhin statische Methoden ignorieren.) (#2528)

  • Führen Sie mark.with_args ein, um das Übergeben von Funktionen/Klassen als einziges Argument an Marker zu ermöglichen. (#2540)

  • Neue cache_dir INI-Option: Legt das Verzeichnis fest, in dem die Inhalte des Cache-Plugins gespeichert werden. Das Verzeichnis kann ein relativer oder absoluter Pfad sein: bei einem relativen Pfad wird das Verzeichnis relativ zu rootdir erstellt, andernfalls wird es wie angegeben verwendet. Zusätzlich kann der Pfad Umgebungsvariablen enthalten, die zur Laufzeit erweitert werden. (#2543)

  • Führen Sie die Umgebungsvariable PYTEST_CURRENT_TEST ein, die mit dem nodeid und der Phase (setup, call und teardown) des gerade ausgeführten Tests gesetzt wird. Weitere Informationen finden Sie in der Dokumentation. (#2583)

  • Eingeführt wurde der @pytest.mark.filterwarnings-Marker, der das Überschreiben des Warnungsfilters auf Test-, Klassen- oder Modulebene ermöglicht. Weitere Informationen finden Sie in der Dokumentation. (#2598)

  • --last-failed merkt sich jetzt für immer, wann ein Test fehlgeschlagen ist, und vergisst ihn nur, wenn er wieder bestanden wird. Dies erleichtert die Behebung einer Testsuite durch selektives Ausführen von Dateien und inkrementelles Beheben von Tests. (#2621)

  • Neuer pytest_report_collectionfinish Hook, der es Plugins ermöglicht, nach erfolgreicher Sammlung Meldungen zur Terminalberichterstattung hinzuzufügen. (#2622)

  • Unterstützung für PEP 415's Exception.__suppress_context__ hinzugefügt. Wenn nun ein raise exception from None von pytest abgefangen wird, wird der Kontext im Testbericht nicht mehr verkettet. Das Verhalten entspricht nun dem von Python's Traceback-Verhalten. (#2631)

  • Von pytest.fail, pytest.skip und pytest.xfail ausgelöste Ausnahmen erben nun von BaseException, wodurch sie schwieriger unbeabsichtigt von normalem Code abgefangen werden können. (#580)

Fehlerbehebungen

  • Setzt stdin in pytester.py.Testdir.popen() auf eine geschlossene PIPE, um unerwünschte interaktive pdb-Sitzungen zu vermeiden (#2023)

  • Fehlendes encoding-Attribut zu sys.std*-Streams beim Verwenden des capsys-Capture-Modus hinzugefügt. (#2375)

  • Behebt ein Problem, bei dem sich die Terminalfarbe unter Windows zu Schwarz änderte, wenn colorama in einer conftest.py-Datei importiert wurde. (#2510)

  • Korrigiert die Zeilennummer bei der Zusammenfassung von übersprungenen Tests. (#2548)

  • capture: Stellt sicher, dass der Name von EncodedFile eine Zeichenkette ist. (#2555)

  • Die Optionen --fixtures und --fixtures-per-test behalten nun die Einrückung innerhalb von Docstrings bei. (#2574)

  • Doctest-Zeilennummern werden jetzt korrekt gemeldet, was pytest-sugar#122 behebt. (#2610)

  • Behebt Nicht-Determinismus in der Reihenfolge der Fixture-Sammlung. Fügt eine neue Abhängigkeit (ordereddict) für Python 2.6 hinzu. (#920)

Verbesserte Dokumentation

  • Klärt die Aufrufreihenfolge des pytest_configure-Hooks. (#2539)

  • Erweitert die Dokumentation für das Testen von Plugin-Code mit dem pytester-Plugin. (#971)

Trivial/Interne Änderungen

  • Aktualisiert die Hilfemeldung für --strict, um klarzustellen, dass sie sich nur auf nicht registrierte Marker und nicht auf Warnungen bezieht. (#2444)

  • Interner Codeumzug: Code für pytest.approx/pytest.raises in eigene Dateien verschoben, um die Größe von python.py zu reduzieren (#2489)

  • Die Hilfsfunktion _pytest.compat._escape_strings wurde in _ascii_escaped umbenannt, um den Zweck der Funktion besser zu kommunizieren. (#2533)

  • Verbessert die Fehlermeldung für CollectError mit skip/skipif. (#2546)

  • Gibt die Warnung bezüglich veralteter yield-Tests nur einmal pro Generator aus. (#2562)

  • Stellt sicher, dass die endgültig gesammelte Zeile keine Artefakte früherer Schreibvorgänge enthält. (#2571)

  • Alle flake8-Fehler und Warnungen behoben. (#2581)

  • Eine fix-lint Tox-Umgebung hinzugefügt, um automatische pep8-Korrekturen am Code durchzuführen. (#2582)

  • Warnungen werden in der eigenen Testsuite von pytest zu Fehlern gemacht, um Regressionen aufgrund von Deprecation-Hinweisen schneller zu erkennen. (#2588)

  • Zeigt mehrere Issue-Links in CHANGELOG-Einträgen an. (#2620)

pytest 3.1.3 (2017-07-03)

Fehlerbehebungen

  • Behebt Dekodierungsfehler unter Python 2 für Doctests in Docstrings. (#2434)

  • Ausnahmen, die während des Teardowns von Finalizern ausgelöst werden, werden nun unterdrückt, bis alle Finalizer aufgerufen wurden, wobei die ursprüngliche Ausnahme erneut ausgelöst wird. (#2440)

  • Behebt falsche Meldung "collected items", wenn Tests auf der Kommandozeile angegeben werden. (#2464)

  • deprecated_call im Kontextmanager-Format erfasst nun Deprecation-Warnungen, auch wenn dieselbe Warnung bereits ausgelöst wurde. Außerdem erzeugt deprecated_call immer dieselbe Fehlermeldung (zuvor wurden unterschiedliche Meldungen im Kontextmanager- vs. Funktionsaufrufmodus erzeugt). (#2469)

  • Behebt ein Problem, bei dem von pytest gesammelte Pfade dreifache führende /-Zeichen aufweisen konnten. (#2475)

  • Behebt einen internen Fehler bei dem Versuch, den Beginn eines rekursiven Tracebacks zu erkennen. (#2486)

Verbesserte Dokumentation

  • Gibt explizit an, für welche Hooks die Aufrufe nach dem ersten Nicht-None-Ergebnis stoppen. (#2493)

Trivial/Interne Änderungen

  • Erstellt invoke-Aufgaben zum Aktualisieren der gebündelten Pakete. (#2474)

  • Aktualisiert Urheberrechtsdaten in LICENSE, README.rst und in der Dokumentation. (#2499)

pytest 3.1.2 (2017-06-08)

Fehlerbehebungen

  • Erforderliche Optionen, die über pytest_addoption hinzugefügt wurden, verhindern nicht mehr die Verwendung von –help ohne deren Übergabe. (#1999)

  • Berücksichtigt python_files bei der Assertions-Umwandlung. (#2121)

  • Behebt die Erkennung von Rekursionsfehlern, wenn Frames im Traceback Objekte enthalten, die nicht verglichen werden können (z. B. numpy-Arrays). (#2459)

  • UnicodeWarning wird vom internen pytest-Warnungsmodul nur ausgegeben, wenn die Nachricht nicht-ASCII-Unicode enthält (nur Python 2). (#2463)

  • Fügt einen Workaround für Python 3.6 WindowsConsoleIO hinzu, das aufgrund von Pytests FDCapture fehlschlägt. Andere Code, der Konsolenhandles verwendet, kann immer noch von demselben Problem betroffen sein und weitere Workarounds/Korrekturen erfordern, z. B. colorama. (#2467)

Verbesserte Dokumentation

  • Behebt interne API-Links zu pluggy-Objekten. (#2331)

  • Macht klar, dass pytest.xfail die Testausführung am Aufrufpunkt stoppt und verbessert den allgemeinen Fluss der skipping-Dokumentation. (#810)

pytest 3.1.1 (2017-05-30)

Fehlerbehebungen

  • Die Warnungsaufnahme von pytest überschreibt nun nicht mehr bestehende Warnungsfilter. Das vorherige Verhalten würde alle Filter überschreiben und zu Regressionen in Testsuiten führen, die Warnungsfilter zur Anpassung ihrer Bedürfnisse konfigurieren. Beachten Sie, dass als Nebenwirkung DeprecationWarning und PendingDeprecationWarning standardmäßig nicht mehr angezeigt werden. (#2430)

  • Behebt Probleme mit Nicht-ASCII-Inhalten in Doctest-Textdateien. (#2434)

  • Behebt Kodierungsfehler für Unicode-Warnungen in Python 2. (#2436)

  • pytest.deprecated_call erfasst nun PendingDeprecationWarning im Kontextmanager-Format. (#2441)

Verbesserte Dokumentation

  • Hinzufügung von towncrier für das Changelog-Management. (#2390)

3.1.0 (2017-05-22)

Neue Funktionen

  • Das Plugin pytest-warnings wurde in den Kern integriert und nun erfasst und zeigt pytest Warnungen automatisch am Ende der Test-Sitzung an.

    Warnung

    Diese Funktion kann Testsuiten stören, die Warnungen selbst anwenden und behandeln, und kann in Ihrer pytest.ini deaktiviert werden.

    [pytest]
    addopts = -p no:warnings
    

    Weitere Informationen finden Sie auf der Dokumentationsseite für Warnungen.

    Danke @nicoddemus für den PR.

  • Hinzugefügte junit_suite_name Ini-Option, um den Stamm <testsuite>-Namen für JUnit XML-Berichte anzugeben (#533).

  • Eine Ini-Option doctest_encoding hinzugefügt, um die zu verwendende Kodierung für Doctest-Dateien anzugeben. Danke @wheerd für den PR (#2101).

  • pytest.warns prüft nun auf Unterklassen-Beziehung statt auf Klassen-Gleichheit. Danke @lesteve für den PR (#2166)

  • pytest.raises stellt nun mit dem Schlüsselwortargument match sicher, dass die Fehlermeldung mit einem Text oder Regex übereinstimmt. Danke @Kriechi für den PR.

  • pytest.param kann verwendet werden, um Testparameter-Sets mit Marks und Test-IDs zu deklarieren. Danke @RonnyPfannschmidt für den PR.

Änderungen

  • Entfernt alle internen Verwendungen von pytest_namespace-Hooks, um die Entfernung von preloadconfig in pytest 4.0 vorzubereiten. Dank an @RonnyPfannschmidt für den PR.

  • pytest warnt nun, wenn eine aufrufbare ID in einem parametrisierten Test fehlschlägt. Danke @fogo für den PR.

  • Es ist nun möglich, Testklassen von der Sammlung auszuschließen, indem ein __test__-Attribut auf False im Klassenkörper gesetzt wird (#2007). Dank an @syre für den Bericht und @lwm für den PR.

  • Ändert junitxml.py, um Berichte zu erstellen, die dem Junitxml-Schema entsprechen. Wenn derselbe Test mit einem Fehler im Aufruf und dann mit einem Fehler im Teardown fehlschlägt, wird das testcase-Element in zwei Teile aufgeteilt, eines enthält den Fehler und das andere den Ausfall. (#2228) Dank an @kkoukiou für den PR.

  • Testfallberichte mit einem url-Attribut schreiben dies nun ordnungsgemäß in junitxml. Danke @fushi für den PR (#1874).

  • Entfernt gemeinsame Elemente aus der Ausgabe von Dictionary-Vergleichen bei verbosity=1. Aktualisiert auch die Nachricht zur Kürzung, um klarzustellen, dass pytest alle Assertionsnachrichten kürzt, wenn die Ausführlichkeit kleiner als 2 ist (#1512). Dank an @mattduck für den PR

  • --pdbcls impliziert nicht mehr --pdb. Dies ermöglicht die Verwendung von addopts=--pdbcls=module.SomeClass in pytest.ini. Dank an @davidszotten für den PR (#1952).

  • fix #2013: RecordedWarning in namedtuple umwandeln, um eine verständliche Repräsentation zu erhalten und unbeabsichtigte Änderungen zu verhindern.

  • fix #2208: Iterationslimit für _pytest.compat.get_real_func sicherstellen. Danke @RonnyPfannschmidt für den Bericht und PR.

  • Hooks werden nun nach Abschluss der Sammlung verifiziert, anstatt direkt nach dem Laden installierter Plugins. Dies erleichtert das Schreiben von Hooks für Plugins, die während der Sammlung geladen werden, zum Beispiel unter Verwendung der speziellen Variable pytest_plugins (#1821). Danke @nicoddemus für den PR.

  • Die Hook pytest_make_parametrize_id() wurde so modifiziert, dass sie argname als zusätzlichen Parameter akzeptiert. Danke @unsignedint für den PR.

  • Fügt venv zur Standardeinstellung norecursedirs hinzu. Danke @The-Compiler für den PR.

  • PluginManager.import_plugin akzeptiert nun Unicode-Plugin-Namen in Python 2. Danke @reutsharabani für den PR.

  • fix #2308: Bei Verwendung von sowohl --lf als auch --ff werden nur die zuletzt fehlgeschlagenen Tests ausgeführt. Danke @ojii für den PR.

  • Ersetzt Versionsnummern auf Minor-/Patch-Ebene in der Dokumentation durch Platzhalter. Dies reduziert den Änderungsaufwand erheblich, da verschiedene Mitwirkende die Dokumentation auf unterschiedlichen Plattformen neu generieren. Danke @RonnyPfannschmidt für den PR.

  • fix #2391: Berücksichtigt pytest_plugins auf allen Plugin-Modulen. Danke @RonnyPfannschmidt für den PR.

Fehlerbehebungen

  • Fix AttributeError bei sys.stdout.buffer / sys.stderr.buffer während der Verwendung der capsys-Fixture in Python 3. (#1407). Danke an @asottile.

  • Ändert die Klasse DontReadFromInput in capture.py, sodass sie io.UnsupportedOperation-Fehler anstelle von ValueErrors in der Methode fileno auslöst (#2276). Danke @metasyn und @vlad-dragos für den PR.

  • Behebt die Ausnahmeformatierung beim Importieren von Modulen, wenn die Fehlermeldung nicht-ASCII-Zeichen enthält (#2336). Danke @fabioz für den Bericht und @nicoddemus für den PR.

  • Dokumentation zu Issue (#1937) hinzugefügt. Danke @skylarjhdownes für den PR.

  • Ermöglicht das Sammeln von Dateien mit beliebiger Dateiendung als Python-Module (#2369). Danke @Kodiologist für den PR.

  • Zeigt die korrekte Fehlermeldung an, wenn "parametrize" mit falschen Argumenten gesammelt wird (#2383). Danke @The-Compiler für den Bericht und @robin0371 für den PR.

3.0.7 (2017-03-14)

  • Behebt ein Problem, bei dem die Assertion-Rewriting durch Module, die andere Module beim Scheitern des Imports stillschweigend verwerfen, beeinträchtigt wurde. Insbesondere der Import des Moduls anydbm wurde behoben. (#2248). Danke @pfhayes für den PR.

  • junitxml: Behebt einen problematischen Fall, bei dem das system-out-Tag doppelt pro testcase-Element im XML-Bericht auftrat. Danke @kkoukiou für den PR.

  • Behebt Regression, pytest überspringt nun Unittest korrekt, wenn es mit --pdb ausgeführt wird (#2137). Danke an @gst für den Bericht und @mbyt für den PR.

  • Ignoriert Ausnahmen, die von Deskriptoren (z.B. Properties) während der Python-Testsammlung ausgelöst werden (#2234). Danke an @bluetech.

  • --override-ini überschreibt nun korrekt einige grundlegende Optionen wie python_files (#2238). Danke @sirex für den Bericht und @nicoddemus für den PR.

  • Ersetzt raise StopIteration-Verwendungen im Code durch einfache returns, um Generatoren abzuschließen, gemäß PEP 479 (#2160). Danke an @nicoddemus für den PR.

  • Behebt interne Fehler, wenn eine nicht druckbare AssertionError innerhalb eines Tests ausgelöst wird. Danke @omerhadari für den PR.

  • Das Überspringen von Plugins funktioniert nun auch mit Test-Items, die von benutzerdefinierten Sammlern generiert wurden (#2231). Danke an @vidartf.

  • Behebt nachgestellte Leerzeichen in der Konsolenausgabe, wenn keine .ini-Datei vorhanden ist (#2281). Danke @fbjorn für den PR.

  • Bedingungslose xfail-Marker verlassen sich nicht mehr darauf, dass das zugrundeliegende Test-Item eine Instanz von PyobjMixin ist, und können daher auf Tests angewendet werden, die nicht vom integrierten Python-Testsammler gesammelt werden. Danke @barneygale für den PR.

3.0.6 (2017-01-22)

  • pytest generiert nun keine PendingDeprecationWarning mehr aus seinen eigenen Operationen, die versehentlich in Version 3.0.5 eingeführt wurde (#2118). Danke an @nicoddemus für den Bericht und @RonnyPfannschmidt für den PR.

  • pytest erkennt nun keine Coroutine-Funktionen mehr als Yield-Tests (#2129). Danke an @malinoff für den PR.

  • Plugins, die über die Umgebungsvariable PYTEST_PLUGINS geladen werden, werden nun automatisch für das Assertion-Rewriting berücksichtigt (#2185). Danke @nicoddemus für den PR.

  • Verbessert die Fehlermeldung, wenn pytest.warns fehlschlägt (#2150). Die Typen der erwarteten Warnungen und die Liste der abgefangenen Warnungen werden der Fehlermeldung hinzugefügt. Danke @lesteve für den PR.

  • Behebt das interne Plugin pytester, damit es mit den neuesten Versionen von zope.interface korrekt funktioniert (#1989). Danke @nicoddemus für den PR.

  • Assert-Anweisungen des pytester-Plugins profitieren wieder vom Assertion-Rewriting (#1920). Danke @RonnyPfannschmidt für den Bericht und @nicoddemus für den PR.

  • Das Angeben von Tests mit Doppelpunkten, wie z.B. test_foo.py::test_bar, für Tests in Unterverzeichnissen mit ini-Konfigurationsdateien verwendet nun die korrekte ini-Datei (#2148). Danke @pelme.

  • Schlägt testdir.runpytest().assert_outcomes() explizit fehl, wenn die von ihm abhängige Pytest-Terminalausgabe fehlt. Danke an @eli-b für den PR.

3.0.5 (2016-12-05)

  • Fügt eine Warnung hinzu, wenn option=value nicht korrekt an -o/--override-ini übergeben wird (#2105). Auch die Hilfe-Dokumentation wurde verbessert. Danke an @mbukatov für den Bericht und @lwm für den PR.

  • --confcutdir und --junit-xml werden nun ordnungsgemäß validiert, ob es sich um Verzeichnisse bzw. Dateinamen handelt (#2089 und #2078). Danke an @lwm für den PR.

  • Fügt dem Fehlermeldung einen Hinweis auf ein möglicherweise fehlendes __init__.py hinzu (#478). Danke @DuncanBetts.

  • Beschreibt genauer, wann die Finalisierung von Fixtures erfolgt, in der Dokumentation (#687). Danke @DuncanBetts.

  • Stellt :ref:-Ziele für recwarn.rst bereit, damit wir Inter-Sphinx-Referenzen verwenden können. Danke an @dupuy für den Bericht und @lwm für den PR.

  • In Python 2 wird ein einfacher +- ASCII-String in der String-Repräsentation von pytest.approx verwendet (z.B. "4 +- 4.0e-06"), da es schwierig ist, dies in verschiedenen Kontexten und internen Darstellungen in pytest zu handhaben, was zu Fehlern wie #2111 führen kann. In Python 3 verwendet die Darstellung weiterhin ± (z.B. 4 ± 4.0e-06). Danke @kerrick-lyft für den Bericht und @nicoddemus für den PR.

  • Die Verwendung von item.Function, item.Module usw. löst nun Deprecation-Warnungen aus, stattdessen wird pytest.Function, pytest.Module usw. bevorzugt (#2034). Danke @nmundar für den PR.

  • Behebt die Fehlermeldung bei der Verwendung von approx mit komplexen Zahlen (#2082). Danke @adler-j für den Bericht und @nicoddemus für den PR.

  • Falsch positive Warnungen vom Assertion-Rewrite-Hook für Module, die mehrfach durch den pytest_plugins-Mechanismus importiert wurden, wurden behoben. Danke @nicoddemus für den PR.

  • Entfernt einen internen Cache, der dazu führen konnte, dass Hooks aus conftest.py-Dateien in Unterverzeichnissen fälschlicherweise in anderen Verzeichnissen aufgerufen wurden (#2016). Danke @d-b-w für den Bericht und @nicoddemus für den PR.

  • Entfernt internen Code zur Unterstützung früherer Python 3-Versionen, der den Nebeneffekt hatte, None in sys.modules zu hinterlassen, wenn Ausdrücke von pytest ausgewertet wurden (z.B. durch Übergabe einer Bedingung als String an pytest.mark.skipif)(#2103). Danke @jaraco für den Bericht und @nicoddemus für den PR.

  • Behandelt .pyc-Dateien ohne passende .py-Datei nun korrekt (#2038). Danke @nedbat.

3.0.4 (2016-11-09)

  • Importfehler beim Sammeln von Testmodulen zeigen nun den vollständigen Traceback an (#1976). Danke @cwitty für den Bericht und @nicoddemus für den PR.

  • Behebt eine verwirrende Befehlszeilen-Hilfemeldung für benutzerdefinierte Optionen mit zwei oder mehr metavar-Eigenschaften (#2004). Danke @okulynyak und @davehunt für den Bericht und @nicoddemus für den PR.

  • Beim Laden von Plugins werden Importfehler mit Nicht-ASCII-Nachrichten in Python 2 jetzt korrekt behandelt (#1998). Danke @nicoddemus für den PR.

  • Zyklische Referenz behoben, wenn pytest.raises im Kontextmanager-Formular verwendet wird (#1965). Als Ergebnis dieser Korrektur wird sys.exc_info() sowohl bei der Verwendung als Kontextmanager als auch bei der Funktionsaufrufverwendung leer gelassen. Zuvor enthielt sys.exc_info die vom Kontextmanager erfasste Ausnahme, auch wenn die erwartete Ausnahme auftrat. Danke @MSeifert04 für den Bericht und den PR.

  • Falsch-positive Warnungen vom Assertion-Rewrite-Hook für Module behoben, die umgeschrieben wurden, aber später explizit durch pytest.register_assert_rewrite oder implizit als Plugin markiert wurden (#2005). Danke @RonnyPfannschmidt für den Bericht und @nicoddemus für den PR.

  • Teardown-Ausgabe bei Testfehlern melden (#442). Danke @matclab für den PR.

  • Fehlermeldung beim Teardown in generiertem xUnit-XML korrigiert. Danke @gdyuldin für den PR.

  • Ausnahmen in multiprocessing-Aufgaben korrekt behandeln (#1984). Danke @adborden für den Bericht und @nicoddemus für den PR.

  • unittest TestCase-Objekte nach Abschluss der Tests bereinigen (#1649). Danke @d-b-w für den Bericht und PR.

3.0.3 (2016-09-28)

  • Das ids-Argument für parametrize akzeptiert in Python 2 wieder unicode-Strings (#1905). Danke @philpep für den Bericht und @nicoddemus für den PR.

  • Assertions werden jetzt für Plugins im Entwicklungsmodus neu geschrieben (pip install -e) (#1934). Danke @nicoddemus für den PR.

  • pkg_resources-Importfehler in Jython-Projekten behoben (#1853). Danke @raquelalegre für den PR.

  • AttributeError: 'Module' object has no attribute '_obj' in Python 3 beseitigt (#1944). Danke @axil für den PR.

  • Erklärung eines ungültigen Geltungsbereichs (scope) bei @fixture-Deklarationen oder einem MetaFunc.parametrize()-Aufruf.

  • Diese Version enthält pluggy-0.4.0, das VersionConflict-Fehler in Plugins korrekt behandelt (#704). Danke @nicoddemus für den PR.

3.0.2 (2016-09-01)

  • Fehlermeldung beim Übergang von Nicht-String-IDs zu pytest.mark.parametrize verbessert (#1857). Danke @okken für den Bericht und @nicoddemus für den PR.

  • Attribut buffer zur stdin-Stub-Klasse pytest.capture.DontReadFromInput hinzugefügt. Danke @joguSD für den PR.

  • UnicodeEncodeError behoben, wenn der Zeichenkettenvergleich mit Unicode fehlgeschlagen ist (#1864). Danke @AiOO für den PR.

  • pytest_plugins wird jetzt korrekt behandelt, wenn es als String (im Gegensatz zu einer Sequenz von Strings) definiert ist, wenn Module für die Assertion-Neuschreibung berücksichtigt werden. Aufgrund dieses Fehlers wurden viel mehr Module als nötig neu geschrieben, wenn eine Testsuite pytest_plugins zum Laden interner Plugins verwendet (#1888). Danke @jaraco für den Bericht und @nicoddemus für den PR (#1891).

  • Kein Aufruf von tearDown und Cleanup beim Ausführen von Tests aus unittest.TestCase-Unterklassen mit aktiviertem --pdb. Dies ermöglicht eine ordnungsgemäße Post-Mortem-Fehlersuche für alle Anwendungen, die signifikante Logik in ihrer tearDown-Maschinerie haben (#1890). Danke @mbyt für den PR.

  • Verwendung der veralteten Methode getfuncargvalue im internen doctest-Plugin behoben. Danke @ViviCoder für den Bericht (#1898).

3.0.1 (2016-08-23)

  • Regression behoben, wenn importorskip auf Modulebene verwendet wird (#1822). Danke @jaraco und @The-Compiler für den Bericht und @nicoddemus für den PR.

  • Parametrisierungsgeltungsbereich behoben, wenn Session-Fixtures zusammen mit normalen Parametern im selben Aufruf verwendet werden (#1832). Danke @The-Compiler für den Bericht, @Kingdread und @nicoddemus für den PR.

  • Internen Fehler behoben, wenn Tests oder Fixtures mit einem leeren ids-Argument parametrisiert werden (#1849). Danke @OPpuolitaival für den Bericht und @nicoddemus für den PR.

  • Loader-Fehler behoben, wenn pytest in eine Zip-Datei eingebettet ist. Danke @mbachry für den PR.

3.0.0 (2016-08-18)

Inkompatible Änderungen

In dieser Version wurden eine Reihe von inkompatiblen Änderungen vorgenommen, mit der Absicht, lange deprecierte Funktionen zu entfernen oder bestehende Verhaltensweisen zu ändern, um sie weniger überraschend/nützlicher zu machen.

  • Der Reinterpretationsmodus wurde entfernt. Nur der Plain- und Rewrite-Modus sind verfügbar, folglich ist die Option --assert=reinterp nicht mehr verfügbar. Dies bedeutet auch, dass Dateien, die von Plugins oder conftest.py importiert werden, standardmäßig nicht von verbesserten Assertions profitieren. Sie sollten pytest.register_assert_rewrite() verwenden, um die Assertion-Neuschreibung für diese Dateien explizit zu aktivieren. Danke @flub für den PR.

  • Die folgenden veralteten Kommandozeilenoptionen wurden entfernt

    • --genscript: nicht mehr unterstützt;

    • --no-assert: stattdessen --assert=plain verwenden;

    • --nomagic: stattdessen --assert=plain verwenden;

    • --report: stattdessen -r verwenden;

    Dank @RedBeardCode für den PR (#1664).

  • ImportErrors in Plugins sind jetzt ein schwerwiegender Fehler anstelle einer pytest-Warnung (#1479). Dank @The-Compiler für den PR.

  • Unterstützungscode für Python 3-Versionen < 3.3 entfernt (#1627).

  • Alle py.test-X* Entry Points entfernt. Die versionierten, mit Suffix versehenen Entry Points waren nie dokumentiert und ein Überbleibsel aus der Ära vor virtuellen Umgebungen. Diese Entry Points erzeugten auch fehlerhafte Entry Points in Wheels, sodass deren Entfernung auch eine Quelle der Verwirrung für Benutzer beseitigt (#1632). Danke @obestwalter für den PR.

  • pytest.skip() löst jetzt einen Fehler aus, wenn es zum Dekorieren einer Testfunktion verwendet wird, im Gegensatz zu seiner ursprünglichen Absicht (einen Test innerhalb einer Testfunktion imperativ zu überspringen). Zuvor führte diese Verwendung dazu, dass das gesamte Modul übersprungen wurde (#607). Danke @omarkohl für den vollständigen PR (#1519).

  • Tests beenden, wenn ein Fehler bei der Sammlung auftritt. Eine Umfrage ergab, dass die meisten Benutzer sowieso CTRL-C drücken würden, sobald sie Sammlungsfehler sehen. Daher könnte pytest das Standardverhalten entsprechend gestalten (#1421). Eine Option --continue-on-collection-errors wurde hinzugefügt, um das vorherige Verhalten wiederherzustellen. Danke @olegpidsadnyi und @omarkohl für den vollständigen PR (#1628).

  • Das pytest pdb-Modul (Plugin) wurde in debugging umbenannt, um Konflikte mit dem integrierten pdb-Modul zu vermeiden.

  • Hilfreiche Fehlermeldung auslösen, wenn eine parametrisierte Fixture zur Laufzeit angefordert wird, z. B. mit request.getfixturevalue. Zuvor waren diese Parameter einfach nie definiert, sodass eine Fixture, die wie folgt dekoriert wurde: @pytest.fixture(params=[0, 1, 2]) nur einmal ausgeführt wurde (#460). Dank @nikratio für den Bugreport, @RedBeardCode und @tomviner für den PR.

  • Die Klasse _pytest.monkeypatch.monkeypatch wurde in _pytest.monkeypatch.MonkeyPatch umbenannt, um Konflikte mit der monkeypatch-Fixture zu vermeiden.

  • --exitfirst / -x kann jetzt durch ein nachfolgendes --maxfail=N überschrieben werden und ist nur ein Synonym für --maxfail=1.

Neue Features

  • Unterstützung des nose-style __test__-Attributs für Methoden von Klassen, einschließlich unittest-style Klassen. Wenn auf False gesetzt, wird der Test nicht gesammelt.

  • Neue doctest_namespace-Fixture zum Injizieren von Namen in den Namespace, in dem Doctests ausgeführt werden. Danke @milliams für den vollständigen PR (#1428).

  • Neue Option --doctest-report verfügbar, um das Ausgabeformat von Diffs bei der Ausführung von (fehlerhaften) Doctests zu ändern (implementiert #1749). Danke @hartym für den PR.

  • Neues Argument name für den pytest.fixture-Dekorator, das einen benutzerdefinierten Namen für eine Fixture ermöglicht (um das Problem des Funktionsargument-Überschreibens von Fixtures zu lösen). Danke @novas0x2a für den vollständigen PR (#1444).

  • Neue Funktion approx() zum einfachen Vergleichen von Gleitkommazahlen in Tests. Danke @kalekundert für den vollständigen PR (#1441).

  • Möglichkeit, globale Eigenschaften in der endgültigen xunit-Ausgabedatei hinzuzufügen, indem auf das interne junitxml-Plugin zugegriffen wird (experimentell). Danke @tareqalayan für den vollständigen PR #1454).

  • Neue Methode ExceptionInfo.match() zum Abgleichen eines regulären Ausdrucks mit der String-Darstellung einer Ausnahme (#372). Danke @omarkohl für den vollständigen PR (#1502).

  • __tracebackhide__ kann nun auch auf einen Callable gesetzt werden, der dann entscheiden kann, ob der Traceback basierend auf dem übergebenen ExceptionInfo Objekt gefiltert werden soll. Danke @The-Compiler für den vollständigen PR (#1526).

  • Neuer pytest_make_parametrize_id(config, val) Hook, der von Plugins verwendet werden kann, um freundliche Strings für benutzerdefinierte Typen bereitzustellen. Danke @palaviv für den PR.

  • capsys und capfd verfügen nun über eine disabled() Kontextmanager-Methode, die verwendet werden kann, um die Erfassung innerhalb eines Tests vorübergehend zu deaktivieren. Danke @nicoddemus für den PR.

  • Neues CLI-Flag --fixtures-per-test: zeigt an, welche Fixtures für jedes ausgewählte Testelement verwendet werden. Zeigt standardmäßig Docstrings von Fixtures an. Kann auch anzeigen, wo Fixtures definiert sind, wenn mit -v kombiniert. Danke @hackebrot für den PR.

  • Einführung des pytest Befehls als empfohlener Einstiegspunkt. Beachten Sie, dass py.test weiterhin funktioniert und nicht zur Entfernung geplant ist. Schließt Vorschlag #1629 ab. Danke @obestwalter und @davehunt für den vollständigen PR (#1633).

  • Neue CLI-Flags

    • --setup-plan: führt normale Sammlung durch und berichtet über den potenziellen Setup- und Teardown-Vorgang, ohne Fixtures und Tests auszuführen;

    • --setup-only: führt normale Sammlung durch, führt Setup und Teardown von Fixtures aus und berichtet darüber;

    • --setup-show: führt normale Testausführung durch und zeigt zusätzlich Setup und Teardown von Fixtures an;

    • --keep-duplicates: py.test ignoriert nun doppelte Pfade, die in der Befehlszeile angegeben wurden. Um das frühere Verhalten beizubehalten, bei dem derselbe Test mehrmals durch Angabe in der Befehlszeile mehrmals ausgeführt werden konnte, übergeben Sie das Argument --keep-duplicates (#1609);

    Danke @d6e, @kvas-it, @sallner, @ioggstream und @omarkohl für die PRs.

  • Neues CLI-Flag --override-ini/-o: überschreibt Werte aus der Ini-Datei. Beispiel: "-o xfail_strict=True". Danke @blueyed und @fengxx für den PR.

  • Neue Hooks

    • pytest_fixture_setup(fixturedef, request): führt das Setup des Fixtures aus;

    • pytest_fixture_post_finalizer(fixturedef): wird nach dem Finalizer des Fixtures aufgerufen und hat Zugriff auf den Ergebnis-Cache des Fixtures.

    Danke @d6e, @sallner.

  • Ausgabe von Warnungen für Assertions, deren Test ein Tupel-Literal ist. Solche Assertions werden niemals fehlschlagen, da Tupel immer wahrheitsgemäß sind und normalerweise ein Fehler sind (siehe #1562). Danke @kvas-it für den PR.

  • Erlaubt die Übergabe einer benutzerdefinierten Debugger-Klasse (z.B. --pdbcls=IPython.core.debugger:Pdb). Danke an @anntzer für den PR.

Änderungen

  • Plugins profitieren nun von der Assertions-Neuschreibung. Danke @sober7, @nicoddemus und @flub für den PR.

  • Änderung von report.outcome für xpassed Tests auf "passed" im nicht-strengen Modus und "failed" im strengen Modus. Danke an @hackebrot für den PR (#1795) und @gprasad84 für den Bericht (#1546).

  • Tests, die mit xfail(strict=False) (dem Standard) markiert sind, erscheinen nun in JUnitXML-Berichten als bestandene Tests anstelle von übersprungenen. Danke an @hackebrot für den PR (#1795).

  • Hervorhebung des Pfades der Dateispeicherort im Fehlerbericht, um das Kopieren/Einfügen zu erleichtern. Danke @suzaku für den PR (#1778).

  • Mit @pytest.fixture markierte Fixtures können nun yield-Anweisungen genau wie die mit dem @pytest.yield_fixture Decorator markierten verwenden. Diese Änderung macht @pytest.yield_fixture veraltet und macht @pytest.fixture mit yield-Anweisungen zur bevorzugten Methode zum Schreiben von Teardown-Code (#1461). Danke @csaftoiu für die Aufmerksamkeit und @nicoddemus für den PR.

  • Explizit übergebene Parametrize-IDs werden nicht mehr in ASCII escaped (#1351). Danke @ceridwen für den PR.

  • Fixtures werden nun in der Fehlermeldung, die angezeigt wird, wenn ein unbekanntes Fixture in einer Testfunktion deklariert wird, sortiert. Danke @nicoddemus für den PR.

  • Der pytest_terminal_summary Hook erhält nun den exitstatus der Test-Session als Argument. Danke @blueyed für den PR (#1809).

  • Parametrize-IDs können None als spezifische Test-ID akzeptieren, in welchem Fall die automatisch generierte ID für dieses Argument verwendet wird. Danke @palaviv für den vollständigen PR (#1468).

  • Der Parameter für Setup-/Teardown-Methoden im xunit-Stil (setup_method, setup_module usw.) ist nun optional und kann weggelassen werden. Danke @okken für die Aufmerksamkeit und @nicoddemus für den PR.

  • Verbesserte automatische ID-Generierungsauswahl bei doppelten IDs in parametrize. Danke @palaviv für den vollständigen PR (#1474).

  • Die Zusammenfassung der pytest-Warnungen wird nun standardmäßig angezeigt. Ein neues Flag --disable-pytest-warnings wurde hinzugefügt, um die Warnungszusammenfassung explizit zu deaktivieren (#1668).

  • Macht ImportError während der Sammlung expliziter, indem der Benutzer daran erinnert wird, den Namen des Testmoduls/-pakets zu überprüfen (#1426). Danke @omarkohl für den vollständigen PR (#1520).

  • Fügt build/ und dist/ zur Standardliste --norecursedirs hinzu. Danke @mikofski für den Bericht und @tomviner für den PR (#1544).

  • pytest.raises in der Kontextmanager-Form akzeptiert eine benutzerdefinierte message, die ausgelöst werden soll, wenn keine Ausnahme aufgetreten ist. Danke @palaviv für den vollständigen PR (#1616).

  • conftest.py-Dateien profitieren nun von der Assertions-Neuschreibung; zuvor war dies nur für Testmodule verfügbar. Danke @flub, @sober7 und @nicoddemus für den PR (#1619).

  • Textdokumente ohne Doctests werden nicht mehr als "übersprungen" angezeigt. Danke @graingert für die Meldung und die Bereitstellung eines vollständigen PRs (#1580).

  • Stellt sicher, dass ein Modul innerhalb eines Namespace-Pakets gefunden werden kann, wenn es auf der Befehlszeile zusammen mit der Option --pyargs angegeben wird. Danke an @taschini für den PR (#1597).

  • Berücksichtigt immer die vollständige Assertions-Erklärung während der Assertions-Neuschreibung. Das frühere Verhalten verbarg Teil-Ausdrücke, die zufällig False waren, und ging davon aus, dass dies redundante Informationen waren. Danke @bagerard für die Meldung (#1503). Danke an @davehunt und @tomviner für den PR.

  • OptionGroup.addoption() prüft nun, ob Optionsnamen bereits hinzugefügt wurden, um die Nachverfolgung von Problemen wie #1618 zu erleichtern. Zuvor gab es nur Ausnahmen später von der argparse Bibliothek, die keinen Hinweis auf den tatsächlichen Grund für doppelt hinzugefügte Optionen gaben.

  • yield-basierte Tests gelten als veraltet und werden in pytest-4.0 entfernt. Danke @nicoddemus für den PR.

  • [pytest]-Abschnitte in setup.cfg-Dateien sollten nun [tool:pytest] heißen, um Konflikte mit anderen distutils-Befehlen zu vermeiden (siehe #567). [pytest]-Abschnitte in pytest.ini- oder tox.ini-Dateien werden unterstützt und bleiben unverändert. Danke @nicoddemus für den PR.

  • Die Verwendung des Präfixes pytest_funcarg__ zur Deklaration von Fixtures gilt als veraltet und wird in pytest-4.0 entfernt (#1684). Danke @nicoddemus für den PR.

  • Die Übergabe eines Befehlszeilenstrings an pytest.main() gilt als veraltet und ist zur Entfernung in pytest-4.0 geplant. Es wird empfohlen, stattdessen eine Liste von Argumenten zu übergeben (#1723).

  • Umbenennung von getfuncargvalue zu getfixturevalue. getfuncargvalue ist weiterhin vorhanden, gilt aber nun als veraltet. Danke an @RedBeardCode und @tomviner für den PR (#1626).

  • Die Verwendung von optparse-Typen löst nun DeprecationWarnings aus (#1740).

  • Die Rückwärtskompatibilität von optparse unterstützt Float/Complex-Typen (#457).

  • Verfeinerte Logik zur Bestimmung des rootdir, wobei nur gültige Pfade berücksichtigt werden, was eine Reihe von Problemen behebt: #1594, #1435 und #1471. Die Dokumentation wurde entsprechend dem aktuellen Verhalten aktualisiert. Danke an @blueyed, @davehunt und @matthiasha für den PR.

  • Schließt immer die vollständige Assertions-Erklärung ein. Das frühere Verhalten verbarg Teil-Ausdrücke, die zufällig False waren, und ging davon aus, dass dies redundante Informationen waren. Danke @bagerard für die Meldung (#1503). Danke an @davehunt und @tomviner für den PR.

  • Bessere Nachricht bei Nichtverwendung einer parametrisierten Variable (siehe #1539). Danke an @tramwaj29 für den PR.

  • Aktualisierte Docstrings mit einem einheitlicheren Stil.

  • Fügt stderr-Schreiben für pytest.exit(msg) während des Starts hinzu. Zuvor wurde die Nachricht nie angezeigt. Danke @BeyondEvil für die Meldung #1210. Danke an @jgsonesen und @tomviner für den PR.

  • Zeigt aus unkorrekte Test-Deselektionsgründe nicht mehr an (#1372). Danke @ronnypfannschmidt für den PR.

  • Die Befehlszeilenoption --resultlog wurde als veraltet markiert: Sie wird wenig genutzt und es gibt modernere und bessere Alternativen (siehe #830). Danke @nicoddemus für den PR.

  • Verbessern Sie die Fehlermeldung bei Fehlern bei der Fixture-Suche: Fügen Sie in der ersten Zeile ein 'E' und in den restlichen Zeilen ein '>' hinzu. Behebt #717. Danke @blueyed für die Meldung und einen PR, @eolo999 für den ursprünglichen PR und @tomviner für seine Anleitung während des EuroPython2016-Sprints.

Fehlerbehebungen

  • Parametrize behandelt doppelte Test-IDs jetzt korrekt.

  • Behebt einen internen Fehler, wenn das Argument method für teardown_method() fehlt (#1605).

  • Behebt die Ausnahmevisualisierung, falls das aktuelle Arbeitsverzeichnis (CWD) während des Tests gelöscht wird (#1235). Danke @bukzor für die Meldung. PR von @marscher.

  • Verbessert die Testausgabe für logische Ausdrücke mit Klammern (#925). Danke @DRMacIver für die Meldung und @RedBeardCode für den PR.

  • Erstellt korrekte Diff für Strings, die mit neuen Zeilen enden (#1553). Danke @Vogtinator für die Meldung und @RedBeardCode und @tomviner für den PR.

  • ConftestImportFailure zeigt jetzt den Traceback an, was die Identifizierung von Fehlern in conftest.py-Dateien erleichtert (#1516). Danke @txomon für den PR.

  • Textdokumente ohne Doctests werden nicht mehr als "übersprungen" angezeigt. Danke @graingert für die Meldung und die Bereitstellung eines vollständigen PRs (#1580).

  • Behebt das Sammeln von Klassen mit benutzerdefinierter __new__-Methode. Behebt #1579. Danke @Stranger6667 für den PR.

  • Behebt das Überschreiben von Scopes innerhalb von metafunc.parametrize (#634). Danke @Stranger6667 für den PR.

  • Behebt die Gesamtzahl der Tests in der JUnit-XML-Ausgabe (#1798). Danke @cboelsen für den PR.

  • Behebt einen Fehler um eins zu viel bei Zeilen von request.node.warn. Danke @blueyed für den PR.

2.9.2 (2016-05-31)

Fehlerbehebungen

  • Behebt #510: überspringt Tests, bei denen eine Parameterisierungsdimension leer war, danke Alex Stapleton für den Bericht und @RonnyPfannschmidt für den PR

  • Behebt, dass Xfail mit dem Bedingungs-Schlüsselwortargument nicht funktioniert. Danke @astraw38 für die Meldung des Problems (#1496) und @tomviner für den PR (#1524).

  • Behebt ein Problem mit Windows-Pfaden, wenn eine benutzerdefinierte Konfigurationsdatei mit absolutem Pfad in pytest.main("-c your_absolute_path") übergeben wird.

  • Behebt die Erkennung der maximalen Rekursionstiefe, wenn die ausgelöste Fehlerklasse nicht mit Unicode/kodierten Bytes umgehen kann. Danke @prusse-martin für den PR (#1506).

  • Behebt das pytest.mark.skip-Markierung, wenn es im strikten Modus verwendet wird. Danke @pquentin für den PR und @RonnyPfannschmidt dafür, wie der Fehler behoben werden kann.

  • Kleinere Verbesserungen und Korrekturen an der Dokumentation. Danke @omarkohl für den PR.

  • Behebt --fixtures, um alle Fixture-Definitionen anzuzeigen, anstatt nur eine pro Fixture-Name. Danke an @hackebrot für den PR.

2.9.1 (2016-03-17)

Fehlerbehebungen

  • Verbessert die Fehlermeldung, wenn ein Plugin beim Laden fehlschlägt. Danke @nicoddemus für den PR.

  • Behebt (#1178): pytest.fail mit Nicht-ASCII-Zeichen löst einen internen pytest-Fehler aus. Danke @nicoddemus für den PR.

  • Behebt (#469): junit analysiert report.nodeid falsch, wenn Parameter-IDs :: enthalten. Danke @tomviner für den PR (#1431).

  • Behebt (#578): Syntaxfehler, die Nicht-ASCII-Zeilen an der Fehlerstelle enthielten, erzeugten einen internen py.test-Fehler. Danke @asottile für die Meldung und @nicoddemus für den PR.

  • Behebt (#1437): Beim Übergeben eines Byte-String-Regex-Musters an parametrize wird versucht, es als UTF-8 zu dekodieren, wobei Fehler ignoriert werden.

  • Behebt (#649): parametrisierte Testknoten können nicht auf der Befehlszeile zum Ausführen angegeben werden.

  • Behebt (#138): bessere Berichterstattung für verkettete Ausnahmen unter Python 3.3+

2.9.0 (2016-02-29)

Neue Features

  • Neue Markierung pytest.mark.skip, die markierte Tests bedingungslos überspringt. Danke @MichaelAquilina für den vollständigen PR (#1040).

  • --doctest-glob kann jetzt mehrmals in der Befehlszeile übergeben werden. Danke @jab und @nicoddemus für den PR.

  • Neue Reporting-Optionen -rp und -rP geben die Zusammenfassung bzw. die vollständige Ausgabe der bestandenen Tests aus. Danke an @codewarrior0 für den PR.

  • pytest.mark.xfail hat jetzt eine Option strict, die XPASS-Tests dazu bringt, die Testsuite fehlschlagen zu lassen (Standard ist False). Es gibt auch eine xfail_strict-INI-Option, die zur projektspezifischen Konfiguration verwendet werden kann. Danke @rabbbit für die Anfrage und @nicoddemus für den PR (#1355).

  • Parser.addini unterstützt jetzt Optionen vom Typ bool. Danke @nicoddemus für den PR.

  • Neue ALLOW_BYTES-Doctest-Option. Diese entfernt b-Präfixe von Byte-Strings in der Doctest-Ausgabe (ähnlich wie ALLOW_UNICODE). Danke @jaraco für die Anfrage und @nicoddemus für den PR (#1287).

  • Hinweis zu KeyboardInterrupt, um die Option --fulltrace zur Anzeige der Fehler zu verwenden. Behebt #1366. Danke an @hpk42 für die Meldung und @RonnyPfannschmidt für den PR.

  • Fängt IndexError-Ausnahmen beim Abrufen des Ausnahmequellenorts ab. Behebt einen internen pytest-Fehler für dynamisch generierten Code (Fixtures und Tests), bei denen Quellzeilen absichtlich falsch sind.

Änderungen

  • Wichtig: py.code wurde in das pytest-Repository als pytest._code integriert. Diese Entscheidung wurde getroffen, da py.code außerhalb von pytest nur sehr wenige Verwendungszwecke hatte und die Tatsache, dass es sich in einem separaten Repository befand, die zeitnahe Behebung von Fehlern in seinem Code erschwerte. Das Team hofft, dadurch diesen Code besser refaktorisieren und verbessern zu können. Diese Änderung sollte sich nicht auf die Benutzer auswirken, aber es ist nützlich, die Benutzer darauf aufmerksam zu machen, wenn sie seltsames Verhalten feststellen.

    Beachten Sie, dass der Code für pytest._code **privat** und **experimentell** ist, daher sollten Sie ihn auf keinen Fall explizit importieren!

    Bitte beachten Sie, dass das ursprüngliche py.code weiterhin in pylib verfügbar ist.

  • pytest_enter_pdb erhält jetzt optional das pytest-Konfigurationsobjekt. Danke @nicoddemus für den PR.

  • Entfernt Code und Dokumentation für Python 2.5 oder niedrigere Versionen, einschließlich des obsoleten Moduls _pytest.assertion.oldinterpret. Danke @nicoddemus für den PR (#1226).

  • Vergleiche werden jetzt immer vollständig angezeigt, wenn CI oder BUILD_NUMBER in der Umgebung gefunden wird, auch wenn -vv nicht verwendet wird. Danke @The-Compiler für den PR.

  • --lf und --ff unterstützen jetzt lange Namen: --last-failed bzw. --failed-first. Danke @MichaelAquilina für den PR.

  • Erwartete Ausnahmen zur Fehlermeldung von pytest.raises hinzugefügt.

  • Die Sammlung zeigt den Fortschritt („Sammle X Elemente“) nur an, wenn sie in einem Terminal stattfindet. Dies vermeidet eine überladene Ausgabe, wenn --color=yes verwendet wird, um Farben in CI-Integrationssystemen zu erhalten (#1397).

Fehlerbehebungen

  • Die Optionen -s und -c sollten jetzt unter xdist funktionieren; Config.fromdictargs stellt seine Eingaben jetzt wesentlich genauer dar. Danke an @bukzor für den vollständigen PR (#680).

  • Behebt (#1290): unterstützt den @-Operator von Python 3.5 bei der Assertionsneuschreibung. Danke @Shinkenjoe für die Meldung mit Testfall und @tomviner für den PR.

  • Behebt die Formatierung von UTF-8-Erklärungsnachrichten (#1379). Danke @biern für den PR.

  • Behebt die Dokumentation zum Traceback-Stil, um alle verfügbaren Optionen zu beschreiben (auto/long/short/line/native/no), wobei auto seit Version 2.6 der Standard ist. Danke @hackebrot für den PR.

  • Behebt (#1422): record_xml_property erlaubt keine mehreren Einträge mit demselben Namen.

2.8.7 (2016-01-24)

  • behebt #1338: verwendet vorhersagbare Objektauflösung für monkeypatch

2.8.6 (2016-01-21)

  • behebt #1259: erlaubt doppelte Node-IDs in junitxml, dies war eine Regression, die Plugin-Kombinationen wie pytest-pep8 + pytest-flakes fehlschlagen ließ

  • Umgehung für eine Ausnahme, die in pyreadline auftritt, wenn --pdb mit aktiviertem Standard-I/O-Capture verwendet wird. Danke Erik M. Bray für den PR.

  • behebt #900: Bessere Fehlermeldung, wenn das Ziel eines monkeypatch-Aufrufs eine ImportError auslöst.

  • behebt #1292: monkeypatch-Aufrufe (setattr, setenv usw.) sind jetzt O(1). Danke David R. MacIver für die Meldung und Bruno Oliveira für den PR.

  • behebt #1223: Erfasste stdout und stderr werden jetzt vor dem Aufruf von pdb ordnungsgemäß angezeigt, wenn --pdb verwendet wird, anstatt verworfen zu werden. Danke Cal Leeming für den PR.

  • behebt #1305: pytest-Warnungen, die während pytest_terminal_summary ausgegeben werden, werden jetzt ordnungsgemäß angezeigt. Danke Ionel Maries Cristian für die Meldung und Bruno Oliveira für den PR.

  • behebt #628: interna UnicodeDecodeError behoben, wenn Doctests Unicode enthalten. Danke Jason R. Coombs für die Meldung und Bruno Oliveira für den PR.

  • behebt #1334: Erfassten stdout zum JUnit-XML-Bericht bei Setup-Fehlern hinzufügen. Danke Georgy Dyuldin für den PR.

2.8.5 (2015-12-11)

  • behebt #1243: Problem behoben, bei dem während der Sammlung eingefügte Klassenattribute pytest beschädigen könnten. PR von Alexei Kozlenok, danke Ronny Pfannschmidt und Bruno Oliveira für die Überprüfung und Hilfe.

  • fix #1074: junitxml-Chunks vorab berechnen statt den ganzen Baum in Objekten zu speichern. Danke an Bruno Oliveira für den Bericht und Ronny Pfannschmidt für den PR.

  • fix #1238: korrigiere das Empfangen mehrerer Argumente durch pytest.deprecated_call() (Regression eingeführt in 2.8.4). Danke an Alex Gaynor für den Bericht und Bruno Oliveira für den PR.

2.8.4 (2015-12-06)

  • fix #1190: deprecated_call() funktioniert jetzt auch, wenn die veraltete Funktion bereits von einem anderen Test im selben Modul aufgerufen wurde. Danke an Mikhail Chernykh für den Bericht und Bruno Oliveira für den PR.

  • fix #1198: Die Option --pastebin funktioniert jetzt unter Python 3. Danke an Mehdy Khoshnoody für den PR.

  • fix #1219: --pastebin funktioniert jetzt korrekt, wenn die erfasste Ausgabe Nicht-ASCII-Zeichen enthält. Danke an Bruno Oliveira für den PR.

  • fix #1204: Ein weiterer Fehler beim Sammeln mit einem seltsamen `__getattr__()`. Danke an Florian Bruhin für den PR.

  • korrigiere die Zusammenfassung, die gedruckt wird, wenn keine Tests ausgeführt wurden. Danke an Florian Bruhin für den PR.

  • fix #1185 - stelle sicher, dass MANIFEST.in exakt dem entspricht, was in eine sdist gehen soll.

  • eine Reihe von Dokumentationsmodernisierungen im Hinblick auf gute Praktiken. Danke an Bruno Oliveira für den PR.

2.8.3 (2015-11-18)

  • fix #1169: Füge das Attribut `__name__` zu Testfällen in `TestCaseFunction` hinzu, um den `@unittest.skip`-Decorator für Funktionen und Methoden zu unterstützen. Danke an Lee Kamentsky für den PR.

  • fix #1035: Sammeln von Tests, wenn ein Objekt auf Modulebene `__getattr__()` hat. Danke an Suor für den Bericht und Bruno Oliveira / Tom Viner für den PR.

  • fix #331: Sammle keine Tests, wenn ihr Fehler nicht korrekt gemeldet werden kann, z. B. wenn sie eine aufrufbare Instanz einer Klasse sind.

  • fix #1133: behobener interner Fehler beim Filtern von Tracebacks, bei denen ein Eintrag zu einer Datei gehört, die nicht mehr verfügbar ist. Danke an Bruno Oliveira für den PR.

  • Verbesserung zur Hervorhebung der Namen fehlerhafter Tests in Rot, damit sie in der Ausgabe hervorstechen. Danke an Gabriel Reis für den PR.

  • füge weitere Vorträge zur Dokumentation hinzu.

  • erweitere die Dokumentation zur `--ignore`-CLI-Option.

  • verwende pytest-runner für die Setuptools-Integration.

  • kleinere Korrekturen für die Interaktion mit dem System Integrity Protection von OS X El Capitan (danke an Florian).

2.8.2 (2015-10-07)

  • fix #1085: korrekte Handhabung von Kodierungsfehlern beim Übergeben von kodierten Byte-Strings an `pytest.parametrize` in Python 2. Danke an Themanwithoutaplan für den Bericht und Bruno Oliveira für den PR.

  • fix #1087: Handhabung von `SystemError` beim Übergeben leerer Byte-Strings an `pytest.parametrize` in Python 3. Danke an Paul Kehrer für den Bericht und Bruno Oliveira für den PR.

  • fix #995: behobener interner Fehler beim Filtern von Tracebacks, bei denen ein Eintrag von einer `exec()`-Anweisung generiert wurde. Danke an Daniel Hahler, Ashley C Straw, Philippe Gauthier und Pavel Savchenko für den Beitrag und Bruno Oliveira für den PR.

  • fix #1100 und #1057: Fehler bei der Verwendung von Autouse-Fixtures und Doctest-Modulen. Danke an Sergey B Kirpichev und Vital Kudzelka für den Beitrag und Bruno Oliveira für den PR.

2.8.1 (2015-09-29)

  • fix #1034: Füge fehlenden `nodeid` bei `pytest_logwarning`-Aufruf in `addhook` hinzu. Danke an Simon Gomizelj für den PR.

  • `deprecated_call` wird jetzt nur noch mit `DeprecationWarning` oder `PendingDeprecationWarning` erfüllt. Vor 2.8.0 akzeptierte es jede Warnung, und 2.8.0 akzeptierte es nur `DeprecationWarning` (aber nicht `PendingDeprecationWarning`). Danke an Alex Gaynor für das Problem und Eric Hunsberger für den PR.

  • fix #1073: Vermeide den Aufruf von `__getattr__` auf potenziellen Plugin-Objekten. Dies behebt eine Inkompatibilität mit pytest-django. Danke an Andreas Pelme, Bruno Oliveira und Ronny Pfannschmidt für den Beitrag und Holger Krekel für die Korrektur.

  • Fix #704: Behandele `versionconflict` beim Laden von Plugins gnädiger. Danke an Bruno Oliveira für den PR.

  • Fix #1064: Rückschritt bei `--junitxml`, wenn mit dem `pytest-xdist`-Plugin verwendet, wobei Testberichte falschen Tests zugeordnet wurden. Danke an Daniel Grunwald für den Bericht und Bruno Oliveira für den PR.

  • (experimentell) Anpassung weiterer SEMVER-Style-Versionierung und Änderung der Bedeutung des Master-Branches im Git-Repo: Der „master“-Branch enthält jetzt die Fehlerkorrekturen, Änderungen für Micro-Releases. Der „features“-Branch wird nur mit Minor- oder Major-Pytest-Releases veröffentlicht.

  • Fix #766 durch Entfernen von Dokumentationsverweisen auf `distutils`. Danke an Russel Winder.

  • Fix #1030: Byte-Strings werden jetzt escaped, um Item-Node-IDs zu erzeugen, damit sie immer serialisierbar sind. Danke an Andy Freeland für den Bericht und Bruno Oliveira für den PR.

  • Python 2: Wenn Unicode-parametrisierte Werte in ASCII konvertierbar sind, wird ihre ASCII-Darstellung für die Node-ID verwendet.

  • Fix #411: Füge die `__eq__`-Methode zum Beispiel für Assertionsvergleiche hinzu. Danke an Ben Webb.

  • Fix #653: `deprecated_call` kann als Kontextmanager verwendet werden.

  • fix #877: Behandle Assertionserklärungen mit nicht-ASCII-repr korrekt. Danke an Mathieu Agopian für den Bericht und Ronny Pfannschmidt für den PR.

  • fix #1029: Konvertiere Fehler beim Schreiben von Cache-Werten in `pytest-warnings`.

2.8.0 (2015-09-18)

  • Neue Optionen `--lf` und `-ff` zum Ausführen nur der zuletzt fehlgeschlagenen Tests oder „fehlgeschlagene Tests zuerst“ aus dem letzten Lauf. Diese Funktionalität wird durch das Portieren des ehemals externen pytest-cache-Plugins in den pytest-Kern bereitgestellt. RÜCKWÄRTSINKOMPATIBILITÄT: Wenn Sie die Funktionalität von pytest-cache verwendet haben, um Daten zwischen Testläufen zu speichern, beachten Sie, dass wir keine Sets mehr serialisieren. Danke an Ronny Pfannschmidt für die meiste Merge-Arbeit.

  • Die Option `-r` akzeptiert jetzt `a`, um alle möglichen Berichte einzuschließen, ähnlich dem expliziten Übergeben von `fEsxXw` (issue960). Danke an Abhijeet Kasurde für den PR.

  • Vermeide Python3.5-Deprecationswarnungen durch Einführung versionsspezifischer Inspektionshelfer, danke an Michael Droettboom.

  • fix issue562: `@nose.tools.istest` wird jetzt vollständig berücksichtigt.

  • fix issue934: Wenn ein Zeichenkettenvergleich fehlschlägt und ein Unterschied zu groß ist, um ohne `-vv` angezeigt zu werden, werden trotzdem einige Zeilen des Unterschieds angezeigt. Danke an Florian Bruhin für den Bericht und Bruno Oliveira für den PR.

  • fix issue736: Behebt einen Fehler, bei dem Fixture-Parameter bei Kombination mit Parametrisierungs-Markern verworfen würden. Danke an Markus Unterwaditzer für den PR.

  • fix issue710: Einführung der `ALLOW_UNICODE`-Doctest-Option: Wenn aktiviert, wird das `u`-Präfix von Unicode-Strings in der erwarteten Doctest-Ausgabe gestrippt. Dies ermöglicht, dass Doctests, die Unicode verwenden, unverändert unter Python 2 und 3 ausgeführt werden. Danke an Jason R. Coombs für den Bericht und Bruno Oliveira für den PR.

  • Parametrize generiert jetzt auch aussagekräftige Test-IDs für Enum-, Regex- und Klassenobjekte (im Gegensatz zu Klasseninstanzen). Danke an Florian Bruhin für den PR.

  • Füge `warns` hinzu, um zu überprüfen, ob Warnungen ausgelöst werden (ähnlich wie `raises`). Danke an Eric Hunsberger für den PR.

  • Fix issue683: Wende eine bereits angewendete Markierung nicht erneut an. Danke an ojake für den PR.

  • Bessere Handhabung von Erfassungsfehlern, damit weniger Ausnahmen in `/dev/null` verloren gehen. Danke an David Szotten für den PR.

  • fix issue730: Depreciere und warne vor der `--genscript`-Option. Danke an Ronny Pfannschmidt für den Bericht und Christian Pommranz für den PR.

  • fix issue751: Fehler bei mehreren `parametrize` mit IDs, wenn es eine Klasse mit zwei oder mehr Testmethoden parametrisiert. Danke an Sergey Chipiga für die Meldung und Jan Bednarik für den PR.

  • fix issue82: Lade standardmäßig keine `conftest`-Dateien aus `setup.cfg`/`pytest.ini`/`tox.ini`-Dateien und höher (–confcutdir kann immer noch gesetzt werden, um dies zu überschreiben). Danke an Bruno Oliveira für den PR.

  • fix issue768: Docstrings in Python-Modulen haben keine Session-Fixtures eingerichtet. Danke an Jason R. Coombs für die Meldung und Bruno Oliveira für den PR.

  • hinzugefügt `tmpdir_factory`, ein Session-bezogenes Fixture, das verwendet werden kann, um Verzeichnisse unter dem Basis-Temporärverzeichnis zu erstellen. Zuvor wurde dieses Objekt als `_tmpdirhandler`-Attribut des `config`-Objekts installiert, aber jetzt ist es Teil der offiziellen API und die Verwendung von `config._tmpdirhandler` ist veraltet. Danke an Bruno Oliveira für den PR.

  • fix issue808: Der interne Assertion-Rewrite-Hook von pytest implementiert nun die optionale PEP 302 `get_data`-API, sodass Tests auf Daten-Dateien neben ihnen zugreifen können. Danke an xmo-odoo für die Anfrage und das Beispiel und Bruno Oliveira für den PR.

  • `rootdir` und `inifile` werden nun bei Nutzungfehlern angezeigt, um Benutzern bei der Diagnose von Problemen zu helfen, wie z. B. unerwartete Ini-Dateien, die unbekannte Optionen hinzufügen und von pytest gelesen werden. Danke an Pavel Savchenko für die Aufmerksamkeit auf das Problem in #821 und Bruno Oliveira für den PR.

  • Die Zusammenfassungsleiste ist jetzt gelb gefärbt für Warnsituationen, wie z. B.: Alle Tests wurden entweder übersprungen oder waren xpass/xfailed, oder es wurden gar keine Tests ausgeführt (dies ist eine Teilkorrektur für issue500).

  • fix issue812: pytest wird nun mit dem Exit-Code 5 beendet, wenn keine Tests ausgeführt wurden, z. B. das im Befehlszeilenargument angegebene Verzeichnis keine Tests enthält oder alle Tests durch eine Befehlszeilenoption herausgefiltert wurden (z. B. -k). Danke an Eric Siegerman (issue812) und Bruno Oliveira für den PR.

  • Die Zusammenfassungsleiste ist jetzt gelb gefärbt für Warnsituationen, wie z. B.: Alle Tests wurden entweder übersprungen oder waren xpass/xfailed, oder es wurden gar keine Tests ausgeführt (bezogen auf issue500). Danke an Eric Siegerman.

  • Neue Option `testpaths` im INI-Format: Liste von Verzeichnissen, in denen nach Tests gesucht werden soll, wenn pytest vom Stammverzeichnis aus ausgeführt wird. Dies kann verwendet werden, um die Testerfassung zu beschleunigen, wenn ein Projekt gut definierte Verzeichnisse für Tests hat, und ist in der Regel praktischer als die Konfiguration von `norecursedirs` für alle Verzeichnisse, die keine Tests enthalten. Danke an Adrian für die Idee (#694) und Bruno Oliveira für den PR.

  • fix issue713: JUnit XML-Berichte für Doctest-Fehler. Danke an Punyashloka Biswal.

  • fix issue970: Interne pytest-Warnungen erscheinen nun als „pytest-warnings“ im Terminal anstelle von „warnings“, damit für Benutzer klar ist, dass diese Warnungen von pytest und nicht vom eingebauten „warnings“-Modul stammen. Danke an Bruno Oliveira.

  • Beziehe Setup und Teardown in die JUnit-XML-Testdauern ein. Danke an Janne Vanhala.

  • fix issue735: Assertionsfehler auf Debug-Versionen von Python 3.4+.

  • neue Option `--import-mode`, um das Verhalten beim Importieren von Testmodulen zu ändern: `sys.path` wird angehängt statt vorangestellt. Dies ermöglicht es besser, Testmodule gegen installierte Versionen eines Pakets auszuführen, auch wenn das zu testende Paket denselben Import-Root hat. In diesem Beispiel

    testing/__init__.py
    testing/test_pkg_under_test.py
    pkg_under_test/
    

    werden die Tests gegen die installierte Version von `pkg_under_test` ausgeführt, wenn `--import-mode=append` verwendet wird, während sie standardmäßig immer die lokale Version auswählen würden. Danke an Holger Krekel.

  • pytester: füge die Methode TmpTestdir.delete_loaded_modules() hinzu und rufe sie von inline_run() auf, damit temporäre Module neu geladen werden können. Danke an Eduardo Schettino.

  • internes Refactoring der Pluginmanager-API und des Codes, sodass eine klare Unterscheidung zwischen einem Pytest-agnostischen, eher einfachen Pluginmanager und dem `PytestPluginManager` besteht, der viel Verhalten hinzufügt, darunter die Handhabung lokaler `conftest`-Dateien. In Bezug auf dokumentierte Methoden ist dies eine abwärtskompatible Änderung, kann aber dennoch 3rd-Party-Plugins brechen, die auf Details wie insbesondere die `pluginmanager.add_shutdown()`-API angewiesen waren. Danke an Holger Krekel.

  • pluginmanagement: Einführung der Decorator `pytest.hookimpl` und `pytest.hookspec` zur Einstellung von impl/spec-spezifischen Parametern. Dies ersetzt die frühere, nun veraltete Verwendung von `pytest.mark`, das für Markierungen von Testfunktionen vorgesehen ist.

  • schreibe/verfeinere Dokumente für „Plugins schreiben“, die nun eine eigene Seite haben und von der Seite „Plugins verwenden/installieren“ getrennt sind.

  • fix issue732: Plugins korrekt von allen Hook-Aufrufstellen abmelden, was die Verwendung temporärer Plugins während der Testausführung ermöglicht.

  • depreziere und warne vor dem Argument `__multicall__` in Hook-Implementierungen. Verwende stattdessen den bereits mit pytest-2.7 eingeführten `hookwrapper`-Mechanismus.

  • Beschleunige die Testsuite von pytest erheblich durch standardmäßige Verwendung von In-Process-Tests (die Testausführung kann mit `--runpytest=subprocess` modifiziert werden, um stattdessen an vielen Stellen Unterprozesse zu erstellen). Die Haupt-APIs zum Ausführen von pytest in einem Test sind `runpytest()`, `runpytest_subprocess` oder `runpytest_inprocess`, wenn Sie eine bestimmte Ausführungsart benötigen. In allen Fällen erhalten Sie ein `RunResult`, aber die In-Process-Version hat auch ein `reprec`-Attribut mit den aufgezeichneten Ereignissen/Berichten.

  • fix monkeypatch.setattr("x.y", raising=False), um tatsächlich keinen Fehler auszulösen, wenn "y" kein vorhandenes Attribut ist. Danke an Florian Bruhin.

  • fix issue741: Ausgabe aus `testdir.run` kopier- und einfügbar machen. Danke an Bruno Oliveira.

  • füge ein neues Argument `--noconftest` hinzu, das alle `conftest.py`-Dateien ignoriert.

  • füge die Attribute `file` und `line` zur JUnit-XML-Ausgabe hinzu.

  • fix issue890: Änderung der Erweiterung aller Dokumentationsdateien von `txt` zu `rst`. Danke an Abhijeet für den PR.

  • fix issue714: Hinzufügen der Möglichkeit, den Parameter `indirect=True` auf bestimmte `argnames` anzuwenden. Danke an Elizaveta239.

  • fix issue890: Änderung der Erweiterung aller Dokumentationsdateien von `txt` zu `rst`. Danke an Abhijeet für den PR.

  • fix issue957: Die Option `# doctest: SKIP` registriert Doctests nun als übersprungen (`SKIPPED`) anstatt als bestanden (`PASSED`). Danke an Thomas Grainger für den Bericht und Bruno Oliveira für den PR.

  • issue951: Füge das neue `record_xml_property`-Fixture hinzu, das das Protokollieren zusätzlicher Informationen in der XML-Ausgabe unterstützt. Danke an David Diaz für den PR.

  • issue949: Pfade nach normalen Optionen (z. B. -s, -v, etc.) werden nun ordnungsgemäß zur Ermittlung von rootdir und ini-Dateien verwendet. Danke an Peter Lauri für den Bericht und Bruno Oliveira für den PR.

2.7.3 (15.09.2015)

  • Erlaubt 'dev', 'rc' oder andere Nicht-Integer-Versionsstrings in importorskip. Danke an Eric Hunsberger für den PR.

  • Behebt issue856: Berücksichtigt den Parameter –color in allen Ausgaben (z. B. –fixtures). Danke an Barney Gale für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue855: Die Übergabe von str-Objekten als plugins-Argument an pytest.main wird nun als Modulname zum Importieren und Registrieren als Plugin interpretiert, anstatt stillschweigend wirkungslos zu bleiben. Danke an xmo-odoo für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue744: Korrektur für ast.Call-Änderungen in Python 3.5+. Danke an Guido van Rossum, Matthias Bussonnier, Stefan Zimmermann und Thomas Kluyver.

  • Behebt issue842: Das Anwenden von Markern in Klassen propagiert diese Marker nicht mehr an Oberklassen, die ebenfalls Marker haben. Danke an xmo-odoo für den Bericht und Bruno Oliveira für den PR.

  • Behält Warnfunktionen nach Aufruf von pytest.deprecated_call bei. Danke an Pieter Mulder für den PR.

  • Behebt issue854: autouse yield_fixtures, die als Klassenmember von unittest.TestCase-Unterklassen definiert sind, funktionieren nun wie erwartet. Danke an xmo-odoo für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue833: –fixtures zeigt nun alle Fixtures von gesammelten Testdateien an, anstatt nur der auf der ersten deklarierten. Danke an Florian Bruhin für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue863: Übersprungene Tests melden nun den korrekten Grund, wenn eine Skip/Xfail-Bedingung bei Verwendung mehrerer Marker erfüllt ist. Danke an Raphael Pierzina für den Bericht und Bruno Oliveira für den PR.

  • Optimierte Initialisierung der tmpdir-Fixture, was Testsitzungen beschleunigen sollte (insbesondere bei Verwendung von pytest-xdist). Der einzige sichtbare Effekt ist, dass pytest nun ein Unterverzeichnis im $TEMP-Verzeichnis für alle von dieser Fixture erstellten Verzeichnisse verwendet (Standard ist $TEMP/pytest-$USER). Danke an Bruno Oliveira für den PR.

2.7.2 (23.06.2015)

  • Behebt issue767: Das value-Attribut von pytest.raises enthält keine Ausnahme-Instanz auf Python 2.6. Danke an Eric Siegerman für die Bereitstellung des Testfalls und Bruno Oliveira für den PR.

  • Erstellt automatisch Verzeichnisse für junitxml und Log-Dateien. Danke an Aron Curzon.

  • fix issue713: JUnit XML-Berichte für Doctest-Fehler. Danke an Punyashloka Biswal.

  • Behebt issue735: Assertionsfehler bei Debug-Versionen von Python 3.4+. Danke an Benjamin Peterson.

  • Behebt issue114: skipif-Marker wird an das interne skipping-Plugin gemeldet; Danke an Floris Bruynooghe für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue748: unittest.SkipTest wird an das interne pytest unittest-Plugin gemeldet. Danke an Thomas De Schampheleire für den Bericht und Bruno Oliveira für den PR.

  • Behebt issue718: Fehler bei der Erstellung der Darstellung von Mengen, die unsortierbare Elemente in Python 2 enthalten. Danke an Edison Gustavo Muenz.

  • Behebt issue756, issue752 (und ähnliche Probleme): Abhängigkeit von py-1.4.29, das einen verfeinerten Algorithmus zur Erzeugung von Tracebacks hat.

2.7.1 (19.05.2015)

  • Behebt issue731: Lässt sich nicht durch geschweifte Klammern verwirren, die in der Darstellung eines Objekts vorhanden und unausgeglichen sein können, wenn False-Erklärungen reduziert werden. Danke an Carl Meyer für den Bericht und den Testfall.

  • Behebt issue553: Korrekte Behandlung von inspect.getsourcelines-Fehlern in FixtureLookupError, die zu einem internen Fehler führen und das ursprüngliche Problem verschleiern würden. Danke an talljosh für die initiale Diagnose/den Patch und Bruno Oliveira für den finalen Patch.

  • Behebt issue660: Meldet Scope-Mismatch-Access-Fehler unabhängig von der Reihenfolge der Fixture-Argumente korrekt. Vermeidet auch den internen Traceback von pytest, der dem Benutzer keine Informationen liefert. Danke an Holger Krekel.

  • Gestraffter und dokumentierter Veröffentlichungsprozess. Alle Versionen (in setup.py und Dokumentationserstellung) werden nun aus _pytest/__init__.py gelesen. Danke an Holger Krekel.

  • Dokumentation korrigiert, um die Vorstellung zu entfernen, dass Yield-Fixtures experimentell sind. Sie bleiben bestehen :) Danke an Bruno Oliveira.

  • Unterstützt das Erstellen von Wheels durch die Verwendung von Umgebungsmarkern für die Anforderungen. Danke an Ionel Maries Cristian.

  • Korrigierte Regression zu 2.6.4, die z. B. bei verlorener stdout-Aufnahme beim Auslösen von SystemExit auftrat. Danke an Holger Krekel.

  • Wiedereinführung der _pytest-Fixture des pytester-Plugins, die mindestens von pytest-xdist verwendet wird.

2.7.0 (26.03.2015)

  • Behebt issue435: reload() funktioniert nun, wenn die Umwandlung von Assertions aktiv ist. Danke an Daniel Hahler.

  • Behebt issue616: conftest.py-Dateien und ihre enthaltenen Fixtures werden nun unabhängig vom aktuellen Arbeitsverzeichnis und den verwendeten Testargumenten korrekt für die Sichtbarkeit berücksichtigt. Vielen Dank an Eric Siegerman und seinen PR235, der systematische Tests für die Sichtbarkeit von conftest enthält und nun besteht. Diese Änderung führt auch das Konzept eines rootdir ein, das als neuer pytest-Header ausgegeben und auf der pytest-Customizing-Webseite dokumentiert wird.

  • Ändert die Berichterstattung von "umgeleiteten" Tests, d. h. Tests, die in einer Datei gesammelt werden, aber tatsächlich aus einer anderen stammen (z. B. wenn Tests in einer Testklasse aus einer Basisklasse in einer anderen Datei stammen). Wir zeigen nun die nodeid an und geben über einen Suffix die andere Datei an.

  • Fügt die Möglichkeit hinzu, Kommandozeilenoptionen über die Umgebungsvariable PYTEST_ADDOPTS festzulegen.

  • Fügt Dokumentation zu den neuen pytest-dev-Teams auf Bitbucket und GitHub hinzu. Siehe https://docs.pytest.de/en/stable/contributing.html . Danke an Anatoly für die Initiative und die Vorarbeit.

  • Behebt issue650: Neue Option --doctest-ignore-import-errors, die Importfehler in Doctests in Überspringungen umwandelt. Danke an Charles Cloud für den vollständigen PR.

  • Behebt issue655: Umgehung verschiedener Wege, die python2/3 dazu veranlassen, sys.exc_info in Fixtures/Tests zu lecken und Fehler in Drittanbieter-Code zu verursachen.

  • Behebt issue615: Die Umwandlung von Assertions hat %-Zeichen bei der Formatierung boolescher Operationen nicht korrekt maskiert, was bei der Mischung von Booleans mit Modulo-Operatoren zu Problemen führte. Danke an Tom Viner für den Bericht, die Triage und die Korrektur.

  • Implementiert issue351: Fügt die Möglichkeit hinzu, Parametrisierungs-IDs als aufrufbare Funktion zur Erzeugung benutzerdefinierter Test-IDs anzugeben. Danke an Brianna Laugher für die Idee und die Implementierung.

  • Führt und dokumentiert den neuen Hookwrapper-Mechanismus, der für Plugins nützlich ist, die die Ausführung bestimmter Hooks für ihre Zwecke wrappen möchten. Dies ersetzt das undokumentierte __multicall__-Protokoll, das pytest selbst und einige externe Plugins verwenden. Beachten Sie, dass pytest-2.8 die Unterstützung für das alte __multicall__ einstellen und nur noch das Hookwrapper-Protokoll unterstützen wird.

  • Deutliche Beschleunigung der Aufrufe von Plugin-Hooks.

  • Verwendet den Hookwrapper-Mechanismus in integrierten pytest-Plugins.

  • Fügt eine doctest-ini-Option für doctest-Flags hinzu, danke an Holger Peters.

  • Fügt der Dokumentation hinzu, dass, wenn Sie einen Parameter markieren möchten und der Parameter aufrufbar ist, Sie auch eine Begründung übergeben müssen, um ihn vom "Decorator"-Fall zu unterscheiden. Danke an Tom Viner.

  • Die Optionen "python_classes" und "python_functions" unterstützen nun Glob-Muster für die Testsuche, wie in issue600 besprochen. Danke an Ldiary Translations.

  • Erlaubt das Überschreiben von parametrisierten Fixtures mit nicht-parametrisierten und umgekehrt (bubenkoff).

  • Behebt issue463: Löst spezifischen Fehler für falsch geschriebenes 'parameterize' aus (pfctdayelise).

  • Bei einem Fehler werden sys.last_value, sys.last_type und sys.last_traceback gesetzt, sodass ein Benutzer den Fehler durch Post-Mortem-Debugging untersuchen kann (almarklein).

2.6.4 (24.10.2014)

  • Verbessert die Meldung von Assertionsfehlern bei Iterables durch die Verwendung von ndiff und pprint.

  • Entfernte veraltete japanische Dokumentation aus dem Quellcode.

  • Dokumentation für den Hook "pytest_addhooks". Danke an Bruno Oliveira.

  • Aktualisierte Dokumentation des Plugin-Index. Danke an Bruno Oliveira.

  • Behebt issue557: Mit "-k" erlauben wir nur noch den alten Stil "-" für Negation am Anfang von Zeichenketten, und selbst das ist veraltet. Verwenden Sie stattdessen "not". Dies sollte die Auswahl von parametrisierten Tests ermöglichen, bei denen "-" in den Parametern vorkam.

  • Behebt issue604: Maskiert das %-Zeichen in der Assertionsmeldung.

  • Behebt issue620: Fügt eine Erklärung im Ziel "--genscript" hinzu, was die Binärdaten bedeuten. Danke an Dinu Gherman.

  • Behebt issue614: Pastebin-Unterstützung korrigiert.

  • Behebt issue620: Fügt eine Erklärung im Ziel "--genscript" hinzu, was die Binärdaten bedeuten. Danke an Dinu Gherman.

  • Behebt issue614: Pastebin-Unterstützung korrigiert.

2.6.3 (24.09.2014)

  • Behebt issue575: xunit-xml meldete Sammelfehler als Fehler anstelle von Fehlern, danke an Oleg Sinyavskiy.

  • Behebt issue582: Beispiel für setuptools korrigiert, danke an Laszlo Papp und Ronny Pfannschmidt.

  • Behebt Endlosschleifenfehler beim Pickling von capture.EncodedFile, danke an Uwe Schmitt.

  • Behebt issue589: Behebt schlechte Interaktion mit numpy und anderen bei der Anzeige von Ausnahmen. Prüft auf exakte "maximum recursion depth exceed"-Ausnahme, anstatt anzunehmen, dass jede RuntimeError diese ist (implementiert in py-Abhängigkeit). Danke an Charles Cloud für die Analyse des Problems.

  • Behebt Problem mit der Sichtbarkeit von conftest-bezogenen Fixtures: Beim Ausführen mit einem CWD außerhalb eines Testpakets erhielt pytest die Fixture-Entdeckung falsch. Danke an Wolfgang Schnerring für die Ermittlung eines reproduzierbaren Beispiels.

  • Führt den Hook pytest_enter_pdb ein (wird z. B. von pytest_timeout benötigt, um den Timeout beim interaktiven Betreten von pdb abzubrechen). Danke an Wolfgang Schnerring.

  • Prüft xfail/skip auch bei Nicht-Python-Funktions-Testobjekten. Danke an Floris Bruynooghe.

2.6.2 (05.09.2014)

  • Fügt die Funktion pytest.freeze_includes() hinzu, die es einfach macht, pytest mit Tools wie cx_freeze in ausführbare Dateien einzubetten. Siehe Dokumentation für Beispiele und Begründung. Danke an Bruno Oliveira.

  • Verbessert die Präzision der Cache-Invalidierung der Assertionsumwandlung.

  • Behebt issue561: Passt das Beispiel für autouse-Fixtures an Python 3 an.

  • Behebt issue453: Problem bei der Assertionsumwandlung mit __repr__, die "n{", "n}" und "n~" enthält.

  • Behebt issue560: Zeigt Code korrekt an, wenn ein "else:" oder "finally:" gefolgt von Anweisungen in derselben Zeile steht.

  • Korrigiert Beispiel in der monkeypatch-Dokumentation, danke an t-8ch.

  • Behebt issue572: Korrigiert tmpdir-Dokumentationsbeispiel für Python 3.

  • Wird nicht als universelles Wheel markiert, da Python 2.6 aufgrund der zusätzlichen argparse-Abhängigkeit von anderen Builds abweicht. Behebt issue566. Danke an sontek.

  • Implementiert issue549: Vom Benutzer bereitgestellte Assertionsnachrichten ersetzen nun nicht mehr die py.test-Introspektionsnachricht, sondern werden zusätzlich zu ihr angezeigt.

2.6.1 (07.08.2014)

  • Zeilennummern werden in der –verbose-Ausgabe nicht mehr angezeigt, die Ausgabe ist nun rein die nodeid. Die Zeilennummer wird weiterhin in Fehlerberichten angezeigt. Danke an Floris Bruynooghe.

  • Behebt issue437, bei dem die Assertionsumwandlung dazu führen konnte, dass pytest-xdist-Worker-Knoten unterschiedliche Tests sammelten. Danke an Bruno Oliveira.

  • Behebt issue555: Fügt das Attribut "errors" zu capture-Streams hinzu, um einige distutils und möglicherweise anderen Code, der auf sys.stdout.errors zugreift, zufriedenzustellen.

  • Behebt issue547 capsys/capfd funktioniert auch dann, wenn die Ausgabeerfassung ("-s") deaktiviert ist.

  • Adressiert issue170: Erlaubt pytest.mark.xfail(…) die Angabe erwarteter Ausnahmen über ein optionales Argument "raises=EXC", wobei EXC eine einzelne Ausnahme oder ein Tupel von Ausnahme-Klassen sein kann. Danke an David Mohr für den vollständigen PR.

  • Behebt die Integration von pytest mit unittest.mock.patch-Decorator, wenn dieser das Argument "new" verwendet. Danke an Nicolas Delaby für den Test und den PR.

  • Behebt Problem beim Erkennen von conftest-Dateien, wenn die Argumente "::"-Knoten-ID-Spezifikationen enthalten (kopiert aus der Ausgabe von "-v").

  • Behebt issue544, indem "@NUM" nur am Ende von "::"-getrennten Teilen und nur wenn der Teil eine ".py"-Erweiterung hat, entfernt wird.

  • Verwendet nicht mehr den py.std-Import-Helfer, sondern importiert Dinge direkt. Danke an Bruno Oliveira.

2.6

  • Zwischenspeichert Ausnahmen von Fixtures entsprechend ihrem Scope (issue 467).

  • Behebt issue537: Vermeidet standardmäßig den Import von altem Assertions-Neuinterpretationscode.

  • Behebt issue364: Verkürzt und verbessert die Darstellung von Tracebacks standardmäßig. Die neue Option "--tb=auto" (Standard) zeigt nur für den ersten und letzten Eintrag lange Tracebacks an. Sie können das alte Verhalten, alle Einträge als lange Einträge zu drucken, mit "--tb=long" erhalten. Außerdem werden kurze Einträge standardmäßig sehr ähnlich zu denen von "--tb=native" gedruckt.

  • Behebt issue514: Bringt die Assertion-Neuinterpretation über private Klassenattribute bei.

  • Ändert die Ausgabe von -v, um vollständige Knoten-IDs von Tests einzuschließen. Benutzer können eine Knoten-ID aus einem Testlauf, einschließlich der Zeilennummer, kopieren und sie als positionsbezogenes Argument verwenden, um nur einen einzelnen Test auszuführen.

  • Behebt issue 475: Scheitert frühzeitig und verständlich, wenn pytest.raises mit einem falschen Ausnahmetyp aufgerufen wird.

  • Behebt issue516: Informiert in "Erste Schritte" über die aktuellen Abhängigkeiten.

  • Bereinigt setup.py etwas und gibt unterstützte Versionen an. Danke an Jurko Gospodnetic für den PR.

  • Ändert die XPASS-Farbe von Rot zu Gelb, wenn Tests mit -v ausgeführt werden.

  • Behebt issue473: Umgehung eines Problems, bei dem mock eine ungebundene Methode in ein Klassen-Dictionary einfügt, wenn doppelt gepatched wird.

  • Behebt issue498: Wenn ein Fixture-Finalizer fehlschlägt, wird sichergestellt, dass das Fixture trotzdem als ungültig markiert wird.

  • Behebt issue453: Das Ergebnis des pytest_assertrepr_compare-Hooks erhält nun Escape-Zeichen für neue Zeilen, damit format_exception nicht fehlschlägt.

  • Internes neues Warnsystem: pytest wird nun Warnungen ausgeben, wenn es Ungereimtheiten in Ihrer Testsammlung oder Ausführung erkennt. Warnungen werden letztendlich an einen neuen pytest_logwarning-Hook gesendet, der derzeit nur vom Terminal-Plugin implementiert ist, das Warnungen in der Zusammenfassungszeile anzeigt und mehr Details anzeigt, wenn -rw (Report on Warnings) angegeben wird.

  • Ändert Skips in Warnungen für Testklassen mit __init__ und aufrufbare Elemente in Testmodulen, die wie ein Test aussehen, aber keine Funktionen sind.

  • Behebt issue436: Verbessertes Auffinden von anfänglichen conftest-Dateien aus Kommandozeilenargumenten durch Verwendung des Ergebnisses von parse_known_args anstelle der früheren fehlerhaften Heuristiken. Danke an Marc Abramowitz für Tests und anfängliche Korrekturansätze in diesem Bereich.

  • Behebt issue #479: Korrekte Handhabung von nose/unittest(2) SkipTest-Ausnahmen während der Sammlung/des Ladens von Testmodulen. Danke an Marc Schlaich für den vollständigen PR.

  • Behebt issue490: Aufnahme von pytest_load_initial_conftests in die Dokumentation und Verbesserung der Docstrings.

  • Behebt issue472: Klarstellung, dass pytest.config.getvalue() nicht funktionieren kann, wenn es vor dem Parsen der Kommandozeile ausgelöst wird.

  • Merge PR123: Verbesserte Integration mit mock.patch-Decorator in Tests.

  • Behebt issue412: Manipulationen an stdout/stderr FD-Level-Streams werden nun ohne Abstürze erfasst.

  • Behebt issue483: trial/py33 funktioniert nun ordnungsgemäß. Danke an Daniel Grana für den PR.

  • Verbessert das Beispiel für die Integration von pytest mit "python setup.py test", das nun eine generische Option "-a" oder "--pytest-args" hat, über die zusätzliche Optionen als zitierte Zeichenkette übergeben werden können. Danke an Trevor Bekolay.

  • Vereinfachter interner Erfassungsmechanismus, robuster gegen Tests oder Setups, die FD1/FD2 ändern, und besser integriert mit pytest.pdb() in einzelnen Tests.

  • Verbesserungen an pytest's eigenem Test-Suite-Leckage-Erkennung, dank PRs von Marc Abramowitz.

  • Behebt issue492: Vermeidet Leck in test_writeorg. Danke an Marc Abramowitz.

  • Behebt issue493: Führt keine Tests im Doc-Verzeichnis mit python setup.py test aus (verwenden Sie dafür tox -e doctesting).

  • Behebt issue486: Bessere Berichterstattung und Handhabung von Fehlern beim frühen Laden von conftest.

  • Einige Bereinigung und Vereinfachung der internen conftest-Handhabung.

  • Arbeitet etwas härter daran, Referenzzyklen beim Erfassen von Ausnahmen zu brechen. Danke an Jurko Gospodnetic.

  • Behebt issue443: Korrigiert Skip-Beispiele zur Verwendung des richtigen Vergleichs. Danke an Alex Groenholm.

  • Unterstützt nose-style __test__-Attribut auf Modulen, Klassen und Funktionen, einschließlich unittest-style Klassen. Wenn auf False gesetzt, wird der Test nicht gesammelt.

  • Problem beheben issue512: Zeige "<nicht gesetzt>" für Argumente, die im Monkeypatch-Plugin möglicherweise nicht gesetzt sind. Verbessert die Ausgabe in der Dokumentation.

2.5.2 (29.01.2014)

  • Problem beheben issue409 – bessere Interoperabilität mit cx_freeze, indem nicht versucht wird, von collections.abc zu importieren, was Probleme für py27/cx_freeze verursacht. Danke Wolfgang L. für die Meldung und das Aufspüren.

  • Dokumentation und Code korrigiert, um fast überall "pytest" anstelle von "py.test" zu verwenden. Danke Jurko Gospodnetic für den vollständigen PR.

  • Problem beheben issue425: Am Ende von "py.test -h" erwähnen, dass –markers und –fixtures gemäß dem angegebenen Testpfad (oder dem aktuellen Verzeichnis) funktionieren

  • Problem beheben issue413: Ausnahmen mit Unicode-Attributen werden jetzt auch unter python2 und bei pytest-xdist-Läufen korrekt ausgegeben. (Die Korrektur erfordert py-1.4.20)

  • Kopieren, Bereinigen und Integrieren der py.io-Erfassung aus pylib 1.4.20.dev2 (Rev 13d9af95547e)

  • Problem beheben issue416: Dokumentation zur Semantik des Ladens von conftest.py klären

  • Problem beheben issue429: Vergleiche von Byte-Strings mit Nicht-ASCII-Zeichen in Assert-Ausdrücken funktionieren jetzt besser. Danke Floris Bruynooghe.

  • capfd/capsys.capture privat machen, es wird nicht verwendet und sollte nicht freigegeben werden

2.5.1 (17.12.2013)

  • Zusammenführen des neuen PR für Dokumentationsstyling von Tobias Bieniek.

  • Problem beheben issue403: Parametrisierung mehrerer Funktionen desselben Namens innerhalb eines Collection-Knotens zulassen. Danke Andreas Kloeckner und Alex Gaynor für die Meldung und Analyse.

  • Parametrisierte Fixtures ermöglichen die Angabe der ID der Parameter durch Hinzufügen eines ids-Arguments zu pytest.fixture() und pytest.yield_fixture(). Danke Floris Bruynooghe.

  • Problem beheben issue404 durch durchgängige Verwendung des binären XML-Escapes im junitxml-Plugin. Danke Ronny Pfannschmidt.

  • Problem beheben issue407: Docstring von addoption auf argparse statt optparse korrigieren. Danke Daniel D. Wright.

2.5.0 (12.12.2013)

  • Entfernen von Python2.5 aus dem automatisierten Release-Test von pytest selbst, was bedeutet, dass es wahrscheinlich bald fehlschlägt (aber mit dieser Version immer noch funktioniert, glauben wir).

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

  • PR90: Option –color=yes|no|auto hinzufügen, um den Terminal-Färbemodus zu erzwingen ("auto" ist Standard). Danke Marc Abramowitz.

  • Problem beheben issue319 – Unicode in Assertionsfehlern korrekt anzeigen. Vielen Dank an Floris Bruynooghe für den vollständigen PR. Bedeutet auch, dass wir nun py>=1.4.19 benötigen.

  • Problem beheben issue396 – sortieren und finalisieren von klassenbasierten parametrisierten Tests unabhängig von der Anzahl der Methoden in der Klasse.

  • Problem beheben issue323 auf bessere Weise – Parametrisierung sollte nun niemals zu Runtime-Rekursionsfehlern führen, da der zugrunde liegende Algorithmus zur Neuanordnung von Tests pro Scope/pro Fixture nicht mehr rekursiv ist (er war zuvor tail-call-rekursiv, was zu Problemen bei mehr als >966 nicht-funktionsbezogenen Parametern führen konnte).

  • Problem beheben issue290 – 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).

  • Schließen issue240 – präzise dokumentieren, wie pytest-Module importiert werden, die beiden gängigen Testverzeichnisstrukturen diskutieren und wie sie mit PEP 420-Namespace-Paketen interagieren.

  • Problem beheben issue246 – Reihenfolge der Finalisierer korrigieren, sodass sie LIFO für unabhängige Fixtures sind, die von einem parametrisierten Fixture mit höherem Scope als Funktion abhängen. (war eine ziemliche Anstrengung, also bitte die Komplexität dieses Satzes ertragen :) Danke Ralph Schmitt für das präzise Fehlermuster.

  • Problem beheben issue244 durch Implementierung eines speziellen Indexes für Parameter, um nur Indizes für parametrisierte Test-IDs zu verwenden

  • Problem beheben issue287 durch Ausführen aller Finalisierer, aber Speichern der Ausnahme vom ersten fehlschlagenden Finalisierer und erneutes Auslösen, damit das Teardown immer noch fehlgeschlagen ist. Wir lösen die erste fehlschlagende Ausnahme erneut aus, da sie die Ursache für das Fehlschlagen anderer Finalisierer sein könnte.

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

  • Problem beheben issue357 – spezielle Behandlung von "-k"-Ausdrücken, um die Filterung mit einfachen Zeichenketten zu ermöglichen, die keine gültigen Python-Ausdrücke sind. Beispiele: "-k 1.3" passt auf alle 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.

  • Problem beheben issue384 durch Entfernen des Trial-Support-Codes, da die Unittest-Kompatibilitätsverbesserungen es Trial ermöglichen, dies selbst zu handhaben

  • ImportError nicht verstecken, wenn das Importieren eines Plugins einen verursacht. Behebt issue375.

  • Problem beheben issue275 – usefixtures und autouse-Fixtures für die Ausführung von doctest-Textdateien zulassen.

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

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

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

  • Verschachtelte Parametrisierungs-Wert-Marker zulassen, danke James Lan für den PR.

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

  • Unicode-Handling mit junitxml beheben, behebt issue368.

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

  • –runxfail-Aufrufe von pytest.xfail in No-Ops umwandeln (hatte bereits pytest.mark.xfail-Marker neutralisiert)

  • pytest / pkg_resources-Interaktionen verfeinern: Der AssertionRewritingHook, PEP 302-konforme Loader registriert sich nun ordnungsgemäß bei setuptools/pkg_resources, damit die pkg_resources.resource_stream-Methode korrekt funktioniert. Behebt issue366. Danke für die Untersuchungen und den vollständigen PR an Jason R. Coombs.

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

  • Eine überraschende Fälle von Marker-Fehlfunktionen/Verwirrung vermeiden

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

    würde nicht korrekt funktionieren, da pytest davon ausgeht, dass @pytest.mark.some bereits eine zu dekorierende Funktion erhält. Wir erkennen nun zumindest, ob dieses Argument ein Lambda ist und somit das Beispiel funktioniert. Danke Alex Gaynor, dass er das Problem angesprochen hat.

  • Einen Test auf pypy xfailen, der falsche Kodierung/ASCII prüft (pypy gibt keinen Fehler aus). Behebt issue385.

  • intern die Verarbeitung von varnames() mit Klassen-__init__ verbessern, obwohl sie derzeit nicht von pytest selbst benötigt wird. Auch das Caching korrigieren. Behebt issue376.

  • Problem beheben issue221 – Import von Namespace-Paketen ohne __init__.py ordnungsgemäß behandeln.

  • Interne FixtureRequest-Verarbeitung refaktorisieren, um Monkeypatching zu vermeiden. Eine der positiven Auswirkungen auf den Benutzer ist, dass das "request"-Objekt jetzt in Closures verwendet werden kann.

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

  • Problem beheben issue377 durch Klarstellung in der nose-compat-Dokumentation, dass pytest die unittest-API nicht in den "plain"-Namespace dupliziert.

  • Verbose-Reporting für @mock’d Testfunktionen korrigieren

2.4.2 (04.10.2013)

  • Unter Windows wird colorama und eine neuere py-Bibliothek benötigt, damit py.io.TerminalWriter() jetzt colorama anstelle seiner eigenen ctypes-Hacks verwendet. (behebt issue365) danke Paul Moore, dass er das Problem angesprochen hat.

  • Problem beheben bei "-k"-Abgleich von Tests, bei denen "repr" und "attr" und andere Namen aufgrund einer internen Implementierungssonderheit zu falschen Übereinstimmungen führen würden (nicht fragen), die jetzt ordnungsgemäß implementiert ist. Behebt issue345.

  • Vermeiden, dass die tmpdir-Fixture zu lange Dateinamen erstellt, insbesondere bei Verwendung von Parametrisierung (issue354)

  • Problem beheben mit pytest-pep8 und pytest-flakes / pytest-Interaktionen (Sammlungsnamen im Mark-Plugin gingen davon aus, dass ein Element immer eine Funktion hat, was bei diesen Plugins nicht der Fall ist etc.) Danke Andi Zeidler.

  • Einführung der API node.get_marker/node.add_marker für Plugins wie pytest-pep8 und pytest-flakes, um die unübersichtlichen Details der Pseudo-Dicts von node.keywords zu vermeiden. Dokumentation angepasst.

  • Versuch, stdout beim Start zu "duplizieren", entfernt, da es unschön ist. Die normale Erfassung sollte genügend Möglichkeiten abdecken, dass Tests Standard-FDs verunreinigen.

  • pluginmanager.do_configure(config) als Link zu config.do_configure() für Plugin-Kompatibilität hinzufügen

2.4.1 (02.10.2013)

  • Bei Verwendung von parser.addoption() sollten Unicode-Argumente für das Schlüsselwort "type" ebenfalls in die entsprechenden Typen konvertiert werden. danke Floris Bruynooghe, @dnozay. (behebt issue360 und issue362)

  • Problem beheben bei der Vervollständigung von gepunkteten Dateinamen bei Verwendung von argcomplete, danke Anthon van der Neuth. (behebt issue361)

  • Problem beheben bei Rückschritt, wenn ein 1-Tupel ("arg",) zur Angabe der Parametrisierung verwendet wird (die Werte der Parametrisierung wurden verschachtelt in einem Tupel übergeben). Danke Donald Stufft.

  • Zusammenführen von Dokumentations-Tippfehlern, danke Andy Dirnberger

2.4

Bekannte Inkompatibilitäten

  • Wenn –genscript von python2.7 oder höher aufgerufen wird, erhalten Sie nur ein eigenständiges Skript, das auf python2.7 oder höher funktioniert. Verwenden Sie Python2.6, um auch eine python2.5-kompatible Version zu erhalten.

  • Alle xunit-Style-Teardown-Methoden (nose-style, pytest-style, unittest-style) werden nicht aufgerufen, wenn die entsprechende Setup-Methode fehlgeschlagen ist, siehe issue322 unten.

  • Der pytest_plugin_unregister-Hook wurde nie ordnungsgemäß aufgerufen und es gibt keine bekannte Implementierung des Hooks – daher wurde er entfernt.

  • Mit pytest.fixture dekorierte Funktionen können keine Generatoren mehr sein (d.h. use yield). Diese Änderung könnte in 2.4.1 rückgängig gemacht werden, falls sie zu unvorhergesehenen Problemen im realen Leben führt. Sie können jedoch immer eine innere Funktion/einen inneren Generator schreiben und zurückgeben und den Fixture-Konsumenten ändern, über den zurückgegebenen Generator zu iterieren. Diese Änderung wurde anstelle des neuen pytest.yield_fixture-Dekorators vorgenommen, siehe unten.

Neue Funktionen

  • Experimentelles Einführen eines neuen pytest.yield_fixture-Dekorators, der genau dieselben Parameter wie pytest.fixture akzeptiert, aber eine yield-Anweisung anstelle einer return statement von Fixture-Funktionen erzwingt. Dies ermöglicht die direkte Integration mit "with-style"-Kontextmanagern in Fixture-Funktionen und vermeidet im Allgemeinen die Registrierung von Finalisierungs-Callbacks zugunsten der Behandlung des "Nach-Yields" als Teardown-Code. Danke Andreas Pelme, Vladimir Keleshev, Floris Bruynooghe, Ronny Pfannschmidt und viele andere für Diskussionen.

  • Direkte boolesche Ausdrücke mit skipif/xfail zulassen, wenn auch ein "reason" angegeben ist. Dokumentation zum Überspringen überarbeiten, um "Bedingung als Booleans" zu empfehlen, da dies Überraschungen beim Importieren von Markern zwischen Modulen vermeidet. Die Angabe von Bedingungen als Zeichenketten bleibt vollständig unterstützt.

  • Reporting: Die letzte Zeile je nach Fehlschlägen/Fehlern oder bestandenen Tests rot oder grün färben. Danke Christian Theunert.

  • die Funktion "import pdb ; pdb.set_trace()" nativ in Bezug auf die Erfassung funktionsfähig machen (kein "-s" mehr erforderlich), wodurch pytest.set_trace() zu einer bloßen Verknüpfung wird.

  • Problem beheben issue181: –pdb funktioniert jetzt auch bei Sammelfehlern (und bei internen Fehlern). Dies wurde durch eine leichte interne Refaktorierung und die Einführung eines neuen Hooks pytest_exception_interact (siehe nächster Punkt) implementiert.

  • Problem beheben issue341: Neuen experimentellen Hook für IDEs/Terminals zur Abfangung des Debugging einführen: pytest_exception_interact(node, call, report).

  • Neue monkeypatch.setattr()-Variante, um eine kürzere Aufrufsignatur zum Patchen von Klassen/Funktionen aus Modulen bereitzustellen

    monkeypatch.setattr("requests.get", myfunc)

    ersetzt die "get"-Funktion des "requests"-Moduls durch myfunc.

  • Problem beheben issue322: tearDownClass wird nicht ausgeführt, wenn setUpClass fehlgeschlagen ist. Danke Mathieu Agopian für die anfängliche Korrektur. Außerdem werden alle pytest/nose Finalizer dazu gebracht, das gleiche generische Verhalten nachzuahmen: Wenn ein setupX existiert und fehlschlägt, wird teardownX nicht ausgeführt. Dies führt intern einen neuen Hilfsmethode "node.addfinalizer()" ein, die nur während der Setup-Phase eines Knotens aufgerufen werden kann.

  • Vereinfachung der Signatur von pytest.mark.parametrize(): Ermöglicht die Übergabe einer CSV-getrennten Zeichenkette zur Angabe von argnames. Zum Beispiel: pytest.mark.parametrize("input,expected",  [(1,2), (2,3)]) funktioniert genauso wie zuvor: pytest.mark.parametrize(("input", "expected"), ...).

  • Unterstützung für setUpModule/tearDownModule-Erkennung hinzufügen, danke Brian Okken.

  • Tab-Vervollständigung für Optionen durch Verwendung von "argcomplete" integrieren. Danke Anthon van der Neut für den PR.

  • Option-Namen in eine hyphen-getrennte lange Option ändern, aber die alte Schreibweise aus Kompatibilitätsgründen beibehalten. py.test -h zeigt nur die hyphenierte Version, z.B. "--collect-only", aber "--collectonly" bleibt ebenfalls gültig (aus Kompatibilitätsgründen). Vielen Dank an Anthon van der Neut für die Implementierung und an Hynek Schlawack für die Anregung.

  • Problem beheben issue 308 - Ermöglichen, einzelne Parametersätze beim Parametrisieren zu markieren/xfailen/überspringen. Danke Brianna Laugher.

  • neuen experimentellen pytest_load_initial_conftests Hook aufrufen, um Drittanbieter-Plugins die Möglichkeit zu geben, etwas zu tun, bevor ein conftest geladen wird.

Fehlerbehebungen

  • Problem beheben issue358 - Erfassungsoptionen werden jetzt ordnungsgemäßer durch Verwendung der neuen Methode parser.parse_known_args geparst.

  • pytest verwendet jetzt argparse anstelle von optparse (danke Anthon), was bedeutet, dass "argparse" als Abhängigkeit hinzugefügt wird, wenn in Python2.6-Umgebungen oder darunter installiert wird.

  • Problem beheben issue333: Ein Fall von schlechter Hook-Interaktion zwischen unittest und pytest.

  • PR27: nose.SkipTest während der Sammlung korrekt behandeln. Danke Antonio Cuni, Ronny Pfannschmidt.

  • Problem beheben issue355: junitxml fügt das Attribut name=”pytest” zum testsuite-Tag hinzu.

  • Problem beheben issue336: autouse-Fixture in Plugins sollten wieder funktionieren.

  • Problem beheben issue279: Objektvergleiche bei Assertionsfehlern für Standard-Datentypen verbessern und collections.abc erkennen. Danke an Brianna Laugher und Mathieu Agopian.

  • Problem beheben issue317: Assertion-Rewriter-Unterstützung für die is_package-Methode

  • Problem beheben issue335: Dokumentation des py.code.ExceptionInfo()-Objekts, das von pytest.raises() zurückgegeben wird, danke Mathieu Agopian.

  • implizite Unterstützung von distribute_setup aus setup.py entfernen.

  • Problem beheben issue305: Probleme beim Schreiben von pyc-Dateien ignorieren.

  • SO-17664702: Fixture-Finalisierer auch dann aufrufen, wenn die Fixture-Funktion teilweise fehlgeschlagen ist (Finalisierer wurden nicht immer zuvor aufgerufen)

  • Problem beheben issue320 - Klassen-Scope für Fixtures bei Mischung mit Modul-Funktionen korrigieren. Danke Anatoly Bubenkoff.

  • Sie können "-q" oder "-qq" angeben, um verschiedene Stufen der "leiseren" Berichterstattung zu erhalten (danke Katarzyna Jachim)

  • Problem beheben issue300 - Korrekte Reihenfolge des Ladens von conftest beim Starten von py.test in einem Unterverzeichnis.

  • Problem beheben issue323 - Sortierung vieler Modul-bezogener Arg-Parametrisierungen

  • sessionfinish-Hooks mit demselben cwd-Kontext wie beim Sitzungsstart ausführen (hilft bei Plugin-Verhalten, das Ausgabedateien mit relativen Pfaden schreibt, wie pytest-cov)

  • Problem beheben issue316 - Korrektes Referenzieren von Collection-Hooks in der Dokumentation

  • Problem beheben issue 306 - Bereinigung der Optionen -k/-m, um nur Marker/Testnamen/Schlüsselwörter entsprechend abzugleichen. Danke Wouter van Ackooy.

  • Verbesserte Doctest-Zählung für Doctests in Python-Modulen – Dateien ohne Doctest-Elemente werden nicht mehr angezeigt und Doctest-Beispiele werden als separate Testelemente gezählt. Danke Danilo Bellini.

  • Problem beheben issue245 durch Abhängigkeit von der veröffentlichten py-1.4.14, die py.io.dupfile behebt, damit sie mit Dateien ohne Modus funktioniert. Danke Jason R. Coombs.

  • Problem beheben bei der Generierung von junitxml, wenn die Testausgabe Steuerzeichen enthält, gemäß issue267, danke Jaap Broekhuizen

  • Problem beheben issue338: –tb-Stil auch für Setup-/Teardown-Fehler berücksichtigen. Danke Maho.

  • Problem beheben issue307 - yaml.safe_load im Beispiel verwenden, danke Mark Eichin.

  • bessere Fehlermeldungen für Parametrisierung, danke Brianna Laugher

  • pytest_terminal_summary(terminalreporter)-Hooks können nun die Methoden ".section(title)" und ".line(msg)" verwenden, um zusätzliche Informationen am Ende eines Testlaufs auszugeben.

2.3.5 (2013-04-30)

  • Behebung von Issue 169: Beachten von –tb=style auch bei Setup/Teardown-Fehlern.

  • Fixture-Funktionen niemals für die Sammlung von Testfunktionen berücksichtigen

  • Erneutes Ausführen von Testelementen ermöglichen / Hilft bei der Korrektur des pytest-reruntests-Plugins und hilft auch dabei, weniger Fixture/Ressourcenreferenzen am Leben zu halten

  • Aufgenommenes stdout/stderr auch bei bestandenen Tests in die junitxml-Ausgabe einfügen (danke Adam Goucher)

  • Issue 265 - Integration von Nose Setup/Teardown mit SetupState, damit es nicht versucht, ein Teardown durchzuführen, wenn kein Setup stattgefunden hat

  • Issue 271 - Keine junitxml auf Worker-Knoten schreiben

  • Issue 274 - Nicht versuchen, das vollständige Doctest-Beispiel anzuzeigen, wenn Doctest den Speicherort des Beispiels nicht kennt

  • Issue 280 - Deaktivieren der Assertion-Rewriting auf fehlerhaften CPython 2.6.0

  • Einfügen des Hilfsprogramms "getfixture()" zum Abrufen von Fixtures aus Doctests, danke Andreas Zeidler

  • Issue 259 - Beim Assertion-Rewriting konsistent mit der Standard-Quellkodierung ASCII auf Python 2 sein

  • Issue 251 - Statt Klassen mit init zu ignorieren, einen Skip melden

  • Issue 250 Unicode/Str-Mischungen in Parametrisierungsnamen und -werten funktionieren jetzt

  • Issue 257, Assertion-ausgelöste Kompilierung von Quellcode, der in einer Kommentarzeile endet, bläst sich unter Python 2.5 nicht auf (behoben durch py >= 1.4.13.dev6)

  • Korrektur der Option –genscript zum Generieren eigenständiger Skripte, die auch mit Python 3.3 funktionieren (Importer-Reihenfolge)

  • Issue 171 - Beim Assertion-Rewriting die repr von einigen globalen Variablen anzeigen

  • Korrektur der Hilfe für die Option "-k"

  • Lange Beschreibung der Distribution in README.rst verschieben

  • Verbesserung des Docstrings für metafunc.parametrize()

  • Korrektur eines Fehlers, bei dem die Verwendung von capsys mit pytest.set_trace() in einer Testfunktion beim Betrachten von capsys.readouterr() fehlschlägt

  • Zulassen der Angabe von Präfixen, die mit "_" beginnen, bei der Anpassung der Python-Funktions-Testerkennung. (danke Graham Horler)

  • Verbesserung der PYTEST_DEBUG-Tracing-Ausgabe durch Einfügen zusätzlicher Daten in neue Zeilen mit zusätzlicher Einrückung

  • Sicherstellen, dass OutcomeExceptions wie skip/fail initialisierte Ausnahmerattribute haben

  • Issue 260 - Keine spezielle Nose-Einrichtung auf reinen Unittest-Fällen verwenden

  • Korrektur von Issue 134 - Ausgabe der Sammelfehler, die die Ausführung angegebener Testelemente verhindern

  • Korrektur von Issue 266 - Unicode in MarkEvaluator-Ausdrücken akzeptieren

2.3.4 (2012-11-20)

  • Yield-Tests haben jetzt aktive Autouse-Fixtures, können aber keine Fixtures als Funcargs akzeptieren - es wird ohnehin empfohlen, stattdessen die Post-2.0-Parametrisierungsfunktionen zu verwenden, siehe: https://docs.pytest.de/en/stable/example/how-to/parametrize.html

  • Korrektur eines Autouse-Problems, bei dem Autouse-Fixtures nicht erkannt wurden, wenn sie in einer a/conftest.py-Datei definiert waren und Tests in a/tests/test_some.py

  • Korrektur von Issue 226 - LIFO-Reihenfolge für Fixture-Teardowns

  • Korrektur von Issue 224 - Aufrufe mit Argumenten über 256 Zeichen funktionieren jetzt

  • Korrektur von Issue 91 - Hinzufügen/Diskutieren von Paket-/Verzeichnisebene-Setups im Beispiel

  • Dynamisches Definieren von Markern über item.keywords[...] = Zuweisung ermöglichen und Integration mit der Option "-m"

  • Die Option "-k" soll Ausdrücke akzeptieren, wie auch "-m", sodass man schreiben kann: -k "name1 oder name2" etc. Dies ist eine leichte Inkompatibilität, wenn Sie spezielle Syntax wie "TestClass.test_method" verwendet haben, die Sie jetzt als -k "TestClass and test_method" schreiben müssen, um eine bestimmte Methode in einer bestimmten Testklasse abzugleichen.

2.3.3 (2012-11-06)

  • Korrektur von Issue 214 - Parsen von Modulen, die spezielle Objekte wie z. B. das Flask-Request-Objekt enthalten, was bei getattr-Zugriff fehlschlägt, wenn keine Anfrage aktiv ist. danke Thomas Waldmann.

  • Korrektur von Issue 213 - Parametrisierung mit Werten wie NumPy-Arrays ermöglichen, die keinen __eq__-Operator unterstützen

  • Korrektur von Issue 215 - test_python.org in mehrere Dateien aufteilen

  • Korrektur von Issue 148 - @unittest.skip auf Klassen wird jetzt erkannt und vermeidet den Aufruf von setUpClass/tearDownClass, danke Pavel Repin

  • Korrektur von Issue 209 - Python 2.4-Unterstützung wieder einführen, indem neuere pylib in Anspruch genommen wird, die die Anweisungssuche für Pre-AST-Interpreter wieder eingeführt hat

  • Nose-Unterstützung: setup nur aufrufen, wenn es aufrufbar ist, danke Andrew Taumoefolau

  • Korrektur von Issue 219 - Hinzufügen von py2.4-3.3-Klassifizierern zur TROVE-Liste

  • In Tracebacks werden nun _arg-Werte neben den normalen Argumenten angezeigt (danke Manuel Jacob)

  • Korrektur von Issue 217 - Unterstützung für mock.patch mit Pytest-Fixtures - beachten Sie, dass Sie entweder mock-1.0.1 oder das eingebaute unittest.mock von Python 3.3 benötigen.

  • Korrektur von Issue 127 - Verbesserung der Dokumentation für pytest_addoption() und Hinzufügen einer Hilfsfunktion config.getoption(name) zur Konsistenz.

2.3.2 (2012-10-25)

  • Korrektur von Issue 208 und Korrektur von Issue 29: Neue Py-Version verwenden, um lange Pausen beim Drucken von Tracebacks in langen Modulen zu vermeiden

  • Korrektur von Issue 205 - Conftests in Unterverzeichnissen, die pytest_pycollect_makemodule und pytest_pycollect_makeitem anpassen, funktionieren jetzt ordnungsgemäß

  • Korrektur der Teardown-Reihenfolge für parametrisierte Setups

  • Korrektur von Issue 127 - Bessere Dokumentation für pytest_addoption und verwandte Objekte.

  • Korrektur des Unittest-Verhaltens: TestCase.runtest wird nur aufgerufen, wenn Testmethoden definiert sind

  • Verbesserung der Trial-Unterstützung: die leere unittest.TestCase.runTest()-Methode nicht sammeln

  • „python setup.py test“ funktioniert jetzt auch mit Pytest selbst

  • Interne/paketbezogene Bits korrigieren/verbessern

    • Ausnahmemeldungsprüfung von test_nose.py besteht jetzt auch unter Python 33

    • Issue 206 - Korrektur von test_assertrewrite.py, damit es funktioniert, wenn ein globales PYTHONDONTWRITEBYTECODE=1 vorhanden ist

    • tox.ini zur Pytest-Distribution hinzufügen, damit ignore-dirs und andere Konfigurationsbits ordnungsgemäß verteilt werden für Wartende, die Pytest-eigene Tests ausführen

2.3.1 (2012-10-20)

  • Korrektur von Issue 202 - Korrektur der Regression: Die Verwendung von "self" aus Fixture-Funktionen funktioniert jetzt wie erwartet (es ist dieselbe "self"-Instanz, die eine Testmethode, die die Fixture verwendet, sieht)

  • Pexpect-Tests überspringen (hauptsächlich test_pdb.py) auf FreeBSD*-Systemen, da Pexpect sie nicht richtig unterstützt (hängt)

  • Links zu Webseiten aus der –markers-Ausgabe, die Hilfe für die Verwendung von pytest.mark.* bieten.

2.3.0 (2012-10-19)

  • Korrektur von Issue 202 - Bessere automatische Namen für parametrisierte Testfunktionen

  • Korrektur von Issue 139 - Einführung von @pytest.fixture, das direkte Bereichsdefinition und Parametrisierung von Funcarg-Fabriken ermöglicht.

  • Korrektur von Issue 198 - Conftest-Fixtures wurden unter Windows32 in einigen Fällen mit verschachtelten Verzeichnisstrukturen aufgrund von Pfadmanipulationsproblemen nicht gefunden

  • Korrektur von Issue 193 - Testfunktionen überspringen, die mit leeren Parametersätzen parametrisiert wurden

  • Korrektur der Python 3.3-Kompatibilität, hauptsächlich Berichterstattung von Teilen, die zuvor von der Dictionary-Reihenfolge abhingen

  • Einführung der Neuanordnung von Tests nach Ressourcen- und Parametrisierungs-Setup, was Vorrang vor der üblichen Dateireihenfolge hat

  • Korrektur von Issue 185 - Monkeypatching von time.time führt nicht dazu, dass Pytest fehlschlägt

  • Korrektur von Issue 172 - Doppelte Aufrufe von mit pytest.fixture dekorierten setup_module-Funktionen

  • Korrektur der junitxml=path-Konstruktion, sodass, wenn Tests das aktuelle Arbeitsverzeichnis ändern und der Pfad relativ ist, er korrekt vom ursprünglichen aktuellen Arbeitsverzeichnis konstruiert wird.

  • Korrektur des "python setup.py test"-Beispiels, um einen ordnungsgemäßen "errno"-Rückgabewert zu erzielen

  • Korrektur von Issue 165 - Korrektur defekter Doc-Links und Verweis auf Stackoverflow für FAQ

  • Unicode-Probleme beim Schreiben von Fehlerdarstellungen auf das Terminal abfangen, um Abstürze der gesamten Sitzung zu verhindern

  • Korrektur von xfail/skip-Verwechslung: 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

  • Installierte 3rd-Party-Plugins immer im Header eines Testlaufs melden

  • Korrektur von Issue 160: Ein fehlerhaftes Setup eines mit xfail markierten Tests sollte als xfail (nicht xpass) gemeldet werden

  • Korrektur von Issue 128: Erfasste Ausgabe anzeigen, wenn capsys/capfd verwendet werden

  • Korrektur von Issue 179: Die Abhängigkeitskette von Fabriken korrekt anzeigen

  • pluginmanager.register(...) löst jetzt ValueError aus, wenn das Plugin bereits registriert ist oder der Name belegt ist

  • Korrektur von Issue 159: Verbesserung von https://docs.pytest.de/en/6.0.1/faq.html insbesondere im Hinblick auf die "magische" Historie, Erwähnung von pytest-django, Trial und Unittest-Integration.

  • request.keywords und node.keywords schreibbar machen. Alle untergeordneten Sammlungsknoten sehen Schlüsselwortwerte. Schlüsselwörter sind Dictionaries, die Marker und andere Informationen enthalten.

  • Korrektur von Issue 178: XML-Binärcode-Escapes werden jetzt in py.xml.raw eingepackt

  • Korrektur von Issue 176: Die eingebaute AssertionError korrekt abfangen, auch wenn wir AssertionError auf Python-Ebene durch eine Unterklasse ersetzt haben

  • Fabrikentdeckung schlägt nicht mehr mit magischen globalen Aufrufbaren fehl, die kein sinnvolles __code__-Objekt bereitstellen (mock.call zum Beispiel)

  • Korrektur von Issue 182: testdir.inprocess_run berücksichtigt nun übergebene Plugins

  • Korrektur von Issue 188: Sicherstellen, dass sys.exc_info auf Python2 gelöscht wird

    Bevor in einen Test aufgerufen wird

  • Korrektur von Issue 191: Unterstützung für die unittest TestCase runTest-Methode hinzugefügt

  • Korrektur von Issue 156: monkeypatch behandelt Klassen-Deskriptoren korrekt

  • Berichterstattung Verfeinerungen

    • pytest_report_header erhält nun "startdir", sodass Sie startdir.bestrelpath(yourpath) verwenden können, um schöne relative Pfade anzuzeigen

    • Plugins die Implementierung von sowohl pytest_report_header als auch pytest_sessionstart ermöglichen (sessionstart wird zuerst aufgerufen).

    • Die Zeile mit dem Grund für die Nichtauswahl nicht anzeigen, wenn keine vorhanden ist

    • py.test -vv zeigt alle Assertion-Vergleiche an, anstatt sie abzuschneiden

2.2.4 (2012-05-22)

  • Fehlermeldung für umgeschriebene Assertionen mit dem %-Operator korrigiert

  • Korrektur von Issue 126: Alle ungültigen XML-Zeichen für junitxml-Binärcode-Escapes korrekt abgleichen

  • Problem mit Unittest behoben: Jetzt sollten @unittest.expectedFailure-Marker korrekt verarbeitet werden (Sie können auch @pytest.mark-Marker verwenden)

  • Integration mit den erweiterten distribute/setuptools Testbefehlen dokumentiert

  • Korrektur von Issue 140: Richtige Abholung der tatsächlichen Funktionen von gebundenen Klassenmethoden für setup/teardown_class

  • Korrektur von Issue #141: Wechsel von paste.pocoo.org (eingestellt) zu bpaste.net

  • Korrektur von Issue #143: unconfigure/sessionfinish immer aufrufen, wenn configure/sessionstart aufgerufen wurden

  • Korrektur von Issue #144: Bessere Verknüpfung von Test-IDs mit junitxml-Klassennamen

  • distribute_setup.py auf 0.6.27 aktualisiert

2.2.3 (2012-02-05)

  • Hochgeladenes Paket korrigiert, um nur notwendige Dateien einzuschließen

2.2.2 (2012-02-05)

  • Korrektur von Issue 101: Falsche Argumente für unittest.TestCase-Testfunktionen führen jetzt zu einer besseren Ausgabe

  • Korrektur von Issue 102: Nützlichere Fehler und Hinweise melden, wenn ein Testverzeichnis umbenannt wurde und einige pyc/__pycache__ übrig geblieben sind

  • Korrektur von Issue 106: Mehrfache Anwendung von parametrize erlauben, z. B. auf Modul-, Klassen- und Funktionsebene.

  • Korrektur von Issue 107: Finalisierung auf Sitzungsbasis tatsächlich durchführen

  • Nicht prüfen, ob indirekte Parameter von parametrize Namen von Funcargs sind

  • chdir-Methode zur Monkeypatch-Funcarg hinzufügen

  • Absturz behoben, der durch das zweite Aufrufen von monkeypatch undo verursacht wurde

  • Korrektur von Issue 115: –collectonly robuster gegen frühe Fehler (fehlende Dateien/Verzeichnisse) machen

  • „-qq –collectonly“ zeigt jetzt nur Dateien und die Anzahl der darin enthaltenen Tests an

  • „-q –collectonly“ zeigt jetzt Test-IDs an

  • Ermöglichen des Hinzufügens von Attributen zu Testberichten, sodass dies auch mit verteiltem Testen funktioniert (kein Upgrade von pytest-xdist erforderlich)

2.2.1 (2011-12-16)

  • Korrektur von Issue 99 (in pytest und py): Interne Fehler mit resultlog liefern jetzt eine bessere Ausgabe - behoben durch Normalisierung der Eingabeargumente von pytest_internalerror.

  • Korrektur von Issue 97 / Traceback-Probleme (in pytest und py): Verbesserung der Traceback-Ausgabe in Verbindung mit Jinja2 und Cython, die Tracebacks manipulieren

  • Korrektur von Issue 93 (in pytest und pytest-xdist): Vermeiden von "verzögerten Teardowns": Der letzte Test in einem Testknoten führt nun seinen Teardown direkt aus, anstatt auf das Ende der Sitzung zu warten. Danke Dave Hunt für die gute Berichterstattung und das Feedback. Die Hooks pytest_runtest_protocol sowie pytest_runtest_teardown haben nun "nextitem" verfügbar, was None bedeutet und das Ende des Testlaufs anzeigt.

  • Sammlungsabsturz aufgrund von unbekannten Quelle-gesammelten Elementen behoben, dank Ralf Schmitt (behoben durch Abhängigkeit von einer neueren pylib)

2.2.0 (2011-11-18)

  • Korrektur von Issue 90: Einführung eines frühzeitigen Teardowns von Testelementen, damit Teardown-Funktionen früher aufgerufen werden.

  • Einführung einer allmächtigen metafunc.parametrize-Funktion, die es ermöglicht, Testfunktionsargumente in mehreren Schritten und somit aus unabhängigen Plugins und Orten zu parametrisieren.

  • Einführung eines @pytest.mark.parametrize-Helferprogramms, das den einfachen Aufruf einer Testfunktion mit verschiedenen Argumentwerten ermöglicht

  • Hinzufügen von Beispielen zur Beispielseite "parametrize", einschließlich einer schnellen Portierung von Test-Szenarien und der neuen parametrize-Funktion und des Dekrators.

  • Einführung der Registrierung für "@pytest.mark.*"-Helfer über Ini-Dateien oder über Plugin-Hooks. Einführung einer "--strict"-Option, die nicht registrierte Marker als Fehler behandelt, was Tippfehler vermeidet und eine gut beschriebene Menge an Markern für Ihre Testsuite pflegt. Siehe Beispiele unter https://docs.pytest.de/en/stable/how-to/mark.html und dessen Links.

  • Issue 50: Einführung der Option "-m marker" zur Auswahl von Tests basierend auf Markern (dies ist eine strengere und vorhersagbarere Version von '-k', da "-m" nur vollständige Marker abgleicht und offensichtlichere Regeln für und/oder-Semantiken hat.

  • Neue Funktion zur Optimierung der Geschwindigkeit Ihrer Tests: --durations=N-Option zur Anzeige der N langsamsten Testaufrufe und Setup/Teardown-Methoden.

  • Korrektur von Issue 87: --pastebin funktioniert jetzt auch mit Python 3

  • Korrektur von Issue 89: --pdb bei unerwarteten Ausnahmen in doctest funktioniert sinnvoller

  • Bereinigung und Korrektur der Pytest-eigenen Testsuite, um keine FDs zu hinterlassen

  • Korrektur von Issue 83: Link zur generierten Funcarg-Liste

  • Korrektur von Issue 74: pyarg-Modulnamen werden nun gegen imp.find_module-Fehlalarme geprüft

  • Kompatibilität mit Twisted/Trial-11.1.0-Anwendungsfällen korrigiert

  • Node.listchain vereinfacht

  • JUnitXML-Ausgabecode vereinfacht, indem auf py.xml zurückgegriffen wird

  • Unterstützung für Skip-Eigenschaften auf Unittest-Klassen und -Funktionen hinzugefügt

2.1.3 (2011-10-18)

  • Korrektur von Issue 79: Assertion-Rewriting schlug bei einigen Vergleichen in Boolops fehl

  • Null-Längen-Argumente korrekt behandeln (wie bei pytest '')

  • Korrektur von Issue 67 / junitxml enthält jetzt korrekte Testdauern, danke Ronny

  • Korrektur von Issue 75 / Überspringen von Testfehlern auf Jython

  • Korrektur von Issue 77 / assertrepr_compare-Hook kann auf eine Teilmenge von Tests angewendet werden

2.1.2 (2011-09-24)

  • Behebung von Assertion-Rewriting-Fehlern bei Dateien mit Windows-Zeilenumbrüchen in einigen Python-Versionen

  • Verbesserung der Test-Erkennung nach Paket-/Modulnamen (–pyargs), dank Florian Mayer

  • Behebung von Issue 69 / Assertion-Rewriting wurde bei einigen booleschen Operationen behoben

  • Behebung von Issue 68 / Pakete funktionieren jetzt mit Assertion-Rewriting

  • Behebung von Issue 66: Verwendung unterschiedlicher Assertion-Rewriting-Caches, wenn die Option -O übergeben wird

  • Kein Assertion-Rewriting auf Jython versuchen, reinterp verwenden

2.1.1

  • Behebung von Issue 64 / pytest.set_trace funktioniert jetzt innerhalb von pytest_generate_tests Hooks

  • Behebung von Issue 60 / Fehlerbedingungen bei der Erstellung von __pycache__ behoben

  • Behebung von Issue 63 / Assertion-Rewriting bei Inserts mit Strings, die '%' enthalten

  • Behebung von Assertion-Rewriting bei Aufrufen mit einem ** Arg

  • Generierte Bytecode-Module nicht cachen, wenn die Bytecode-Generierung deaktiviert ist

  • Behebung von Assertion-Rewriting in schreibgeschützten Verzeichnissen

  • Behebung von Issue 59: Bereitstellung von system-out/err-Tags für junitxml-Ausgabe

  • Behebung von Issue 61: Assertion-Rewriting bei booleschen Operationen mit 3 oder mehr Operanden

  • Sie können jetzt eine Manpage mit "cd doc ; make man" erstellen

2.1.0 (2011-07-09)

  • Behebung von Issue 53: nosestyle-Setup-Funktionen mit korrekter Reihenfolge aufrufen

  • Behebung von Issue 58 und 59: Neue Assertion-Code-Korrekturen

  • Zusammenführung von Benjamins Assertionrewrite-Branch: Jetzt werden Assertionen für Testmodule unter Python 2.6 und höher durch das Umschreiben des AST und das Speichern der pyc-Datei vor dem Import des Testmoduls durchgeführt. Weitere Informationen finden Sie unter doc/assert.txt.

  • Behebung von Issue 43: Verbesserung von Doctests mit besserer Traceback-Meldung bei unerwarteten Ausnahmen

  • Behebung von Issue 47: Zeitmessung in junitxml für Testfälle ist jetzt korrekt

  • Behebung von Issue 48: Tippfehler in MarkInfo repr führt zu einer Ausnahme

  • Behebung von Issue 49: Vermeidung verwirrender Fehler bei teilweisem Initialisierungsfehler

  • Behebung von Issue 44: Umgebungsvariablen-/Benutzernamenserweiterung für junitxml-Dateipfade

  • Anzeige von Release-Level-Informationen bei Testläufen für PyPy

  • Überarbeitete Dokumentationsseiten für bessere Navigation und PDF-Generierung

  • Meldung von KeyboardInterrupt auch dann, wenn während des Sitzungsstarts unterbrochen wird

  • Behebung von Issue 35 - Bereitstellung einer PDF-Dokumentenversion und eines Download-Links von der Indexseite

2.0.3 (2011-05-11)

  • Behebung von Issue 38: Schönere Tracebacks bei Aufrufen von Hooks, insbesondere bei frühen Configure/Sessionstart-Aufrufen

  • Fehlende Skip-Grund-/Metainformationen in junitxml-Dateien behoben, gemeldet über http://lists.idyll.org/pipermail/testing-in-python/2011-March/003928.html

  • Behebung von Issue 34: Vermeidung von Sammlungsfehlern bei "test"-präfixierten Klassen, die von object abgeleitet sind.

  • Keine Anforderung von zlib (und anderen Bibliotheken) für das genscript-Plugin ohne die tatsächliche Verwendung von --genscript.

  • Beschleunigung von Skips (durch interne Reduzierung des vollständigen Traceback-Darstellungsaufwands)

  • Behebung von Issue 37: Vermeidung ungültiger Zeichen in der Ausgabe von junitxml

2.0.2 (2011-03-09)

  • Bearbeitung von Issue 32 - Beschleunigung von Testläufen sehr kurzer Testfunktionen durch Reduzierung des relativen Overheads

  • Behebung von Issue 30 - Erweiterte xfail/skipif-Behandlung und verbesserte Berichterstattung. Wenn Sie einen Syntaxfehler in Ihren Skip/Xfail-Ausdrücken haben, erhalten Sie jetzt schöne Fehlermeldungen.

    Außerdem können Sie jetzt auf Modul-Globals aus xfail/skipif-Ausdrücken zugreifen, sodass dies jetzt funktioniert

    import pytest
    import mymodule
    @pytest.mark.skipif("mymodule.__version__[0] == "1")
    def test_function():
        pass
    

    Diese Funktion wird nicht ausgeführt, wenn der Versionsstring des Moduls nicht mit "1" beginnt. Beachten Sie, dass die Angabe einer Zeichenkette anstelle eines booleschen Ausdrucks es py.test ermöglicht, aussagekräftige Informationen bei der Zusammenfassung eines Testlaufs darüber zu melden, welche Bedingungen zum Überspringen (oder xfail-en) von Tests geführt haben.

  • Behebung von Issue 28 - setup_method und pytest_generate_tests arbeiten zusammen. Die fixture-Methode setup_method wird jetzt auch für Testfunktionsaufrufe aufgerufen, die aus dem pytest_generate_tests Hook generiert wurden.

  • Behebung von Issue 27 - collectonly und Schlüsselwortauswahl (-k) arbeiten jetzt zusammen. Wenn Sie "py.test --collectonly -q" ausführen, erhalten Sie eine flache Liste von Test-IDs, die Sie an die py.test-Kommandozeile übergeben können, um einen bestimmten Test auszuführen.

  • Behebung von Issue 25 - Vermeidung gemeldeter Probleme mit --pdb und python3.2/encodings-Ausgabe

  • Behebung von Issue 23 - tmpdir-Argument funktioniert jetzt unter Python 3.2 und Windows XP. Seit Python 3.2 ist os.symlink möglicherweise unterstützt. Durch die Anforderung einer neueren py-Bibliotheksversion erkennt die py.path.local()-Implementierung dies.

  • Tippfehler in der Dokumentation behoben (danke Victor Garcia, Brianna Laugher) und besonderer Dank an Laura Creighton, die auch Teile der Dokumentation rezensiert hat.

  • Leicht falsche Ausgabe der ausführlichen Fortschrittsanzeige für Klassen behoben (danke Amaury)

  • Präzisere (Vermeidung von) Deprecation-Warnungen für Zugriffe auf node.Class|Function

  • Vermeidung von std unittest Assertion-Hilfscode in Tracebacks (danke Ronny)

2.0.1 (2011-02-07)

  • Verfeinerung und Vereinheitlichung der anfänglichen Erfassung, sodass sie auch dann gut funktioniert, wenn das logging-Modul in einer früh geladenen conftest.py-Datei oder einem Plugin verwendet wird.

  • Zulassen des Weglassens von "()" in Test-IDs, um uniforme Test-IDs zu ermöglichen, wie sie vom netten pytest.vim-Plugin von Alfredo erzeugt werden.

  • Behebung von Issue 12 - Anzeige von Plugin-Versionen mit "--version" und "--traceconfig" und Dokumentation, wie zusätzliche Informationen zum Berichtskopf hinzugefügt werden können

  • Behebung von Issue 17 (Import-* Reporting-Problem unter Python 3) durch Anforderung von py>1.4.0 (1.4.1 wird es enthalten)

  • Behebung von Issue 10 (Wahrheitsprüfung von Numpy-Arrays) durch Verfeinerung der Assertionsinterpretation in der py-Bibliothek

  • Behebung von Issue 15: Nose-Kompatibilitätstests mit Python 3 kompatibel machen (da nose-1.0 Python 3 unterstützt)

  • Entfernen der etwas überraschenden "same-conftest"-Erkennung, da sie conftest.py ignoriert, wenn sie in mehreren Unterverzeichnissen vorkommt.

  • Verbesserte Assertions ("not in"), dank Floris Bruynooghe

  • Verbessertes Verhalten/Warnungen bei Ausführung unter "python -OO" (Assertions und Docstrings werden deaktiviert, was zu potenziellen False Positives führt)

  • Einführung eines pytest_cmdline_processargs(args) Hooks, um die dynamische Berechnung von Kommandozeilenargumenten zu ermöglichen. Dies behebt eine Regression, da py.test vor 2.0 erlaubte, Kommandozeilenoptionen aus conftest.py-Dateien festzulegen, was bisher nur von pytest-2.0 aus ini-Dateien erlaubt war.

  • Behebung von Issue 7: Assert-Fehler in Doctest-Modulen. Unerwartete Fehler in Doctests werden im Allgemeinen nicht schöner dargestellt, d. h. innerhalb des fehlenden Doctest-Kontexts.

  • Behebung von Issue 9: Setup-/Teardown-Funktionen für einen xfail-markierten Test werden als xfail gemeldet, wenn sie fehlschlagen, aber als normal bestehend (nicht xpassing) gemeldet, wenn sie erfolgreich sind. Dies gilt nur für "direkte" Setup-/Teardown-Aufrufe, da teardown_class/teardown_module nicht eng mit einem einzelnen Test verknüpft werden können.

  • Behebung von Issue 14: Keine Logging-Fehler beim Prozessende

  • Verfeinerungen der "collecting"-Ausgabe auf Nicht-TTYS

  • Verfeinerung der internen Plugin-Registrierung und --traceconfig-Ausgabe

  • Einführung eines Mechanismus zur Verhinderung/Abmeldung von Plugins von der Kommandozeile, siehe https://docs.pytest.de/en/stable/how-to/plugins.html#cmdunregister

  • Resultlog-Plugin standardmäßig aktivieren

  • Behebung einer Regression bezüglich yield-getesteter Tests, die aufgrund der Semantik "collect before running" nicht wie bei pytest 1.3.4 eingerichtet wurden. Beachten Sie jedoch, dass der empfohlene und wesentlich sauberere Weg zur Testparametrisierung nach wie vor der Mechanismus "pytest_generate_tests" ist, siehe die Dokumentation.

2.0.0 (2010-11-25)

  • pytest-2.0 ist jetzt ein eigenes Paket und hängt von pylib-2.0 ab

  • Neue Funktion: python -m pytest / python -m pytest.main Fähigkeit

  • Neue Python-Aufrufe: pytest.main(args, plugins) zum frühen Laden einiger benutzerdefinierter Plugins.

  • Versuch, unittest-Testsuiten kompatibler auszuführen, indem Setup-/Teardown-Semantiken an das unittest-Paket delegiert werden. Es wird auch härter gearbeitet, um Twisted/Trial und Django-Tests auszuführen, die jetzt im Grunde standardmäßig funktionieren sollten.

  • Einführung einer neuen Methode zum Festlegen von Konfigurationsoptionen über ini-ähnliche Dateien. Standardmäßig werden setup.cfg und tox.ini durchsucht. Die alten Methoden (bestimmte Umgebungsvariablen, dynamisches Lesen von conftest.py wird entfernt).

  • Hinzufügen einer neuen Option "-q", die die Ausführlichkeit reduziert und eine nosestyle/unittest-ähnliche "Punkt"-Ausgabe druckt.

  • Behebung von Issue 135 - Marks funktionieren jetzt auch mit unittest-Testfällen

  • Behebung von Issue 126 - Einführung von py.test.set_trace() zum Verfolgen der Ausführung über PDB während der Testausführung, auch wenn die Erfassung läuft.

  • Behebung von Issue 123 - Neuer Aufruf "python -m py.test" für py.test (erfordert Python 2.5 oder höher)

  • Behebung von Issue 124 - Berichterstattung widerstandsfähiger gegen Tests, die Dateien auf Dateideskriptor 1 (stdout) öffnen.

  • Behebung von Issue 109 - Geschwister-conftest.py-Dateien werden nicht geladen. (und Directory-Kollektoren können nicht mehr aus dem conftest.py eines Verzeichnisses angepasst werden - dies muss mindestens eine Ebene höher erfolgen).

  • Einführung von (anpassbaren) Assertion-Fehler-Darstellungen und Verbesserung der Ausgabe bei Assertion-Fehlern für Vergleiche und andere Fälle (Floris Bruynooghe)

  • nose-Plugin: Weitergabe von Typ-Signatur-Fehlern in Setup-/Teardown-Funktionen anstelle des Nichtaufrufs (Ed Singleton)

  • Entfernen von py.test.collect.Directory (folgt aus einer größeren Refaktorierung und Vereinfachung des Sammlungs-/Kollektionsprozesses)

  • Hauptreduktion des Kerncodes von py.test, Verlagerung der Funktions-/Python-Tests in ein eigenes Plugin

  • Behebung von Issue 88 (Finden benutzerdefinierter Testknoten von der Kommandozeile)

  • Verfeinerung der Erstellung von 'tmpdir', wird jetzt besser zu den Testnamen passende Basenamen erstellen (danke Ronny)

  • "xpass" (unerwartete Bestehen) Tests verursachen keinen Exitcode != 0

  • Behebung von Issue 131 / Issue 60 - Importieren von Doctests in __init__-Dateien, die als Namespace-Pakete verwendet werden

  • Behebung von Issue 93: stdout/stderr wird beim Importieren von conftest.py erfasst

  • Behebung eines Fehlers: Von unittest gesammelte Funktionen können jetzt auch "pytestmark" auf Klassen-/Modulebene haben

  • Hinzufügen der Möglichkeit, die "Klassen"-Ebene für den cached_setup-Helfer zu verwenden

  • Behebung einer Merkwürdigkeit: mark.* Objekte sind jetzt unveränderlich, erstellen Sie neue Instanzen

1.3.4 (2010-09-14)

  • Behebung von Issue 111: Verbesserung der Installationsdokumentation für Windows

  • Behebung von Issue 119: Korrektur der benutzerdefinierten Sammelbarkeit von __init__.py als Modul

  • Behebung von Issue 116: --doctestmodules funktioniert auch mit __init__.py-Dateien

  • Behebung von Issue 115: Vereinheitlichung der internen Ausnahmebehandlung/Erfassung/GeneratorExit

  • Behebung von Issue 118: Neues --tb=native zur Darstellung von cpython-Standardausnahmen

1.3.3 (2010-07-30)

  • Behebung von Issue 113: Problem mit der Assertionsdarstellung bei dreifach-zitierten Zeichenketten (und möglicherweise anderen Fällen)

  • Die conftest-Ladung erkennt jetzt, dass eine conftest-Datei mit demselben Inhalt bereits geladen wurde, was Überraschungen in verschachtelten Verzeichnisstrukturen vermeidet, die z. B. von Hudson erzeugt werden können. Dies macht die Verwendung von --confcutdir in den meisten Fällen wahrscheinlich überflüssig.

  • Terminalfarben für win32 behoben (danke Michael Foord für die Meldung)

  • Seltsamkeit behoben: Die Erkennung der Terminalbreite funktioniert jetzt über stdout anstelle von stdin (danke Armin Ronacher für die Meldung)

  • Entfernen von nachgestellten Leerzeichen in allen py/text-Distributionsdateien

1.3.2 (2010-07-08)

Neue Funktionen

  • Behebung von Issue 103: Einführung von py.test.raises als Kontextmanager, Beispiele

    with py.test.raises(ZeroDivisionError):
        x = 0
        1 / x
    
    with py.test.raises(RuntimeError) as excinfo:
        call_something()
    
    # you may do extra checks on excinfo.value|type|traceback here
    

    (danke Ronny Pfannschmidt)

  • Funcarg-Fabriken können jetzt dynamisch einen Marker auf eine Testausführung anwenden. Dies ist zum Beispiel nützlich, wenn eine Factory Parameter für einen Test bereitstellt, der voraussichtlich fehlschlägt.

    def pytest_funcarg__arg(request):
        request.applymarker(py.test.mark.xfail(reason="flaky config"))
        ...
    
    def test_function(arg):
        ...
    
  • Verbesserte Fehlerberichterstattung bei Sammlungs- und Importfehlern. Dies nutzt einen allgemeineren Mechanismus, nämlich dass für benutzerdefinierte Testelement-/Sammlungsknoten node.repr_failure(excinfo) jetzt einheitlich aufgerufen wird, sodass Sie ihn überschreiben können, um eine String-Fehlermeldung Ihrer Wahl zurückzugeben, die als (rote) Zeichenkette gemeldet wird.

  • Einführung der Option "--junitprefix=STR", um allen Berichten in der junitxml-Datei ein Präfix voranzustellen.

Fehlerbehebungen

  • Tests und das Plugin pytest_recwarn machen wir insbesondere vollständig kompatibel mit Python 2.7 (wenn Sie den recwarn Funcarg verwenden, werden Warnungen aktiviert, sodass Sie sie auf eine Python-übergreifende Weise ordnungsgemäß auf ihre Existenz prüfen können).

  • Verfeinern von --pdb: Ignorieren von xfailed-Tests, Vereinheitlichen der TB-Berichterstattung und kein erneutes Anzeigen von Fehlern am Ende.

  • Behebung der Assertionsinterpretation mit dem ** Operator (danke Benjamin Peterson)

  • Behebung von Issue 105: Zuweisung in derselben Zeile wie eine fehlgeschlagene Assertion (danke Benjamin Peterson)

  • Behebung von Issue 104: Korrektes Escaping für Testnamen im junitxml-Plugin (danke anonymer Benutzer)

  • Behebung von Issue 57: -f|--looponfail funktioniert mit xpassing-Tests (danke Ronny)

  • Behebung von Issue 92: collectonly Reporter und --pastebin (danke Benjamin Peterson)

  • Behebung von py.code.compile(source), um eindeutige Dateinamen zu generieren

  • Behebung von Problemen mit der Assertion-Neuinterpretation auf PyPy, indem die Code-Kompilierung an die (überschreibbare) Frame.eval-Klasse delegiert wird. (danke Amaury Forgeot)

  • Behebung von py.path.local.pyimport(), damit es mit Verzeichnissen funktioniert

  • Optimierung der py.path.local.mkdtemp-Implementierung und -Verwendung

  • Keine leeren Zeilen beim Anzeigen des junitxml-Dateinamens ausgeben

  • Hinzufügen eines optionalen booleschen Parameters ignore_errors zu py.path.local.remove

  • Behebung von Terminal-Schreibvorgängen unter win32/python2.4

  • py.process.cmdexec() versucht jetzt, auf allen Python-Versionen ordnungsgemäß kodierte Unicode-Objekte zurückzugeben

  • Installieren einfacher py.test/py.which-Skripte auch für Jython, dies hilft, kanonische Skriptpfade in virtuellen Umgebungen zu erhalten

  • make path.bestrelpath(path) gibt "." zurück, beachten Sie, dass bei der Verwendung von X.bestrelpath davon ausgegangen wird, dass X ein Verzeichnis ist.

  • die anfängliche conftest-Entdeckung ignoriert "--"-präfixierte Argumente

  • Behebung des resultlog-Plugins bei Verwendung in einer Multicpu/Multihost-xdist-Situation (danke Jakub Gustak)

  • Ausführung verteilter Testberichte im xdist-Plugin, anstatt dist-bezogenen Code in der generischen py.test-Distribution zu haben

  • Behebung der Home-Verzeichniserkennung unter Windows

  • liefern distribute_setup.py Version 0.6.13

1.3.1 (2010-05-25)

Neue Funktionen

  • Issue 91: Einführung des neuen py.test.xfail(reason) Helfers, um einen Test imperativ als erwartungsgemäß fehlgeschlagen zu markieren. Kann innerhalb von Setup- und Testfunktionen verwendet werden. Dies ist besonders nützlich für parametrisierte Tests, wenn bestimmte Konfigurationen als fehlgeschlagen erwartet werden. In diesem Fall kann der deklarative Ansatz mit @py.test.mark.xfail nicht verwendet werden, da er alle Konfigurationen als xfail markieren würde.

  • Issue 102: Einführung der neuen Option --maxfail=NUM, um Testläufe nach NUM Fehlern zu stoppen. Dies ist eine Verallgemeinerung der Option '-x' oder '--exitfirst', die jetzt äquivalent zu '--maxfail=1' ist. Sowohl '-x' als auch '--maxfail' drucken jetzt auch eine Zeile am Ende, die die Unterbrechung anzeigt.

  • Issue 89: Zulassen der Verwendung von py.test.mark-Dekoratoren auf Klassen (Klassendekoratoren wurden mit Python 2.6 eingeführt) und Zulassen mehrerer Marker auf Klassen-/Modulebene durch Angabe einer Liste.

  • verbessern und verfeinern der Berichterstattung über Briefe in der Fortschrittsleiste: . pass f fehlgeschlagene Tests s übersprungene Tests (Erinnerung: nur für Abhängigkeits-/Plattform-Diskrepanzen verwenden) x xfailed test (Test, der fehlschlagen sollte) X xpassed test (Test, der fehlschlagen sollte, aber bestanden hat)

    Sie können jede Kombination von „fsxX“ mit der erweiterten Berichtsoption „-r“ verwenden. Die xfail/xpass-Ergebnisse werden als übersprungene Tests in der junitxml-Ausgabe angezeigt – was auch das Problem 99 behebt.

  • Machen Sie py.test.cmdline.main(), um den Exitstatus zurückzugeben, anstatt SystemExit auszulösen, und ermöglichen Sie auch, dass er mehrmals aufgerufen wird. Dies erfordert natürlich, dass Ihre Anwendung und Ihre Tests ordnungsgemäß heruntergefahren werden und keinen globalen Zustand haben.

Fehlerbehebungen

  • verbesserte Traceback-Darstellung: - verbesserte und vereinheitlichte Berichterstattung für die Option „–tb=short“ - Fehler bei der Importierung von Testmodulen sind viel kürzer (im Stil von –tb=short) - Raises zeigt kürzere, relevantere Tracebacks - –fulltrace macht jetzt systematischer längere Traces / verhindert das Zuschneiden

  • Verbessern der Unterstützung für Raises und anderer dynamisch kompilierter Codes durch Manipulation von python’s linecache.cache anstelle der bisher eher hackyartigen Erstellung benutzerdefinierter Codeobjekte. Dies ermöglicht eine nahtlose Funktion auf Jython und PyPy, wo es zuvor nicht funktionierte.

  • Problem 96 beheben: Erfassen widerstandsfähiger gegen Unterbrechungen durch Strg+C (betraf eine ziemlich substanzielle Umstrukturierung der zugrunde liegenden Erfassungsfunktionalität, um Rennbedingungen zu vermeiden).

  • Beheben der Verknüpfung von bedingten skipif/xfail-Dekoratoren - sodass die Verwendung mehrerer @py.test.mark.skipif(condition)-Dekoratoren jetzt wie erwartet funktioniert, einschließlich einer spezifischen Berichterstattung darüber, welche Bedingungen zum Überspringen geführt haben.

  • Problem 95 beheben: Spätimport von zlib, damit es nicht für den allgemeinen py.test-Start erforderlich ist.

  • Problem 94 beheben: Machen Sie die Berichterstattung robuster gegenüber fehlerhaftem Quellcode (und seien Sie intern vorsichtiger bei der Darstellung unerwarteter Byte-Sequenzen)

1.3.0 (2010-05-05)

  • deprezieren Sie die Option –report zugunsten einer neuen kürzeren und leichter zu merkenden Option -r: Sie nimmt ein Zeichenfolgenargument entgegen, das aus jeder Kombination von „xfsX“-Zeichen besteht. Sie beziehen sich auf die einzelnen Zeichen, die Sie während des Punkt-Fortschrittsdrucks sehen, und geben am Ende des Testlaufs eine zusätzliche Zeile pro Test aus. Diese zusätzliche Zeile zeigt die genaue Position oder Test-ID an, die Sie direkt in die py.test-Kommandozeile einfügen können, um einen bestimmten Test erneut auszuführen.

  • externen Plugins erlauben, neue Hooks über den neuen pytest_addhooks(pluginmanager)-Hook zu registrieren. Die neue Version des pytest-xdist-Plugins für verteiltes und looponfailing-Testen erfordert diese Funktion.

  • fügen Sie einen neuen pytest_ignore_collect(path, config)-Hook hinzu, um Projekten und Plugins zu ermöglichen, Ausschlussverhalten für ihre Verzeichnisstruktur zu definieren - zum Beispiel können Sie in einem conftest.py diese Methode definieren

    def pytest_ignore_collect(path):
        return path.check(link=1)
    

    um selbst einen Sammelversuch von Tests in symbolverknüpften Verzeichnissen zu verhindern.

  • neuer pytest_pycollect_makemodule(path, parent)-Hook, um die Anpassung des Modulsammlungsobjekts für ein übereinstimmendes Testmodul zu ermöglichen.

  • erweitern und verfeinern Sie den xfail-Mechanismus: @py.test.mark.xfail(run=False) den dekorierten Test nicht ausführen @py.test.mark.xfail(reason="...") gibt die Grundzeichenfolge in xfail-Zusammenfassungen aus, die --runxfail auf der Kommandozeile gibt xfail-Markierungen praktisch ignoriert

  • machen Sie (bisher interne) häufig nützliche Methoden zugänglich: py.io.get_terminal_with() -> gibt die Terminalbreite zurück py.io.ansi_print(...) -> gibt farbigen/fetten Text unter Linux/win32 aus py.io.saferepr(obj) -> gibt eine begrenzte Darstellungzeichenfolge zurück

  • machen Sie test-ergebnisbezogene Ausnahmen als py.test.skip.Exception, py.test.raises.Exception usw. zugänglich, was hauptsächlich für Plugins nützlich ist, die spezielle Ergebnisinterpretationen/Tweaks vornehmen

  • (Problem 85) Korrigieren Sie das junitxml-Plugin, um Tests mit nicht-ASCII-Ausgaben zu verarbeiten

  • Korrigieren/verfeinern Sie die Python3-Kompatibilität (danke Benjamin Peterson)

  • Korrekturen für die Kombination Jython/Win32, beachten Sie jedoch: Jython2.5.1/Win32 bietet keinen Kommandozeilen-Launcher, siehe https://bugs.jython.org/issue1491 . Siehe die pylib-Installationsdokumentation für Workarounds.

  • Korrekturen für die Behandlung von Unicode-Ausnahmewerten und nicht druckbaren Objekten

  • (Problem 87) Korrigieren Sie den unboundlocal-Fehler im assertionold-Code

  • (Problem 86) Verbessern Sie die Dokumentation für looponfailing

  • IO-Erfassung verfeinern: stdin-Redirect Pseudo-Datei hat jetzt eine NOP close()-Methode

  • liefern Sie distribute_setup.py Version 0.6.10

  • Links zu den neuen capturelog- und coverage-Plugins hinzugefügt

1.2.0 (2010-01-18)

  • verfeinerte Verwendung und Optionen für „py.cleanup“

    py.cleanup     # remove "*.pyc" and "*$py.class" (jython) files
    py.cleanup -e .swp -e .cache # also remove files with these extensions
    py.cleanup -s  # remove "build" and "dist" directory next to setup.py files
    py.cleanup -d  # also remove empty directories
    py.cleanup -a  # synonym for "-s -d -e 'pip-log.txt'"
    py.cleanup -n  # dry run, only show what would be removed
    
  • fügen Sie eine neue Option „py.test –funcargs“ hinzu, die verfügbare funcargs und ihre Hilfezeichenfolgen (Docstrings für die jeweilige Factory-Funktion) für einen gegebenen Testpfad anzeigt

  • zeigen Sie einen kurzen und prägnanten Traceback an, wenn ein funcarg-Lookup fehlschlägt

  • frühes Laden von „conftest.py“-Dateien in Unterverzeichnissen, die nicht mit einem Punkt beginnen. Ermöglicht die bequeme Aufbewahrung und den Zugriff auf testbezogene Optionen in einem test-Unterverzeichnis und das Hinzufügen von Kommandozeilenoptionen.

  • Problem 67 beheben: neue superkurze Traceback-Option: „–tb=line“ gibt eine einzelne Zeile für jeden fehlschlagenden (Python-)Test aus, die dessen Dateiname, Zeilennummer und den Fehlerwert angibt

  • Problem 78 beheben: rufen Sie immer Python-seitige Aufräumfunktionen auf, auch wenn das entsprechende Setup fehlschlug. Dies beinhaltet Verfeinerungen beim Aufruf von setup_module/class-Funktionen, die jetzt nur einmal aufgerufen werden, im Gegensatz zum früheren Verhalten, bei dem sie mehrmals aufgerufen würden, wenn sie eine Ausnahme auslösten (einschließlich einer Skipped-Ausnahme). Jede Ausnahme wird aufgezeichnet und allen Tests im entsprechenden Modul/Klassenbereich zugeordnet.

  • Problem 63 beheben: nehmen Sie an, dass <40 Spalten eine fehlerhafte Terminalbreite sind, und setzen Sie den Standard auf 80

  • beheben Sie das PDB-Debugging, damit es sich bei Raises-bezogenen Fehlern im richtigen Frame befindet

  • aktualisieren Sie apipkg.py, um ein Problem zu beheben, bei dem rekursive Importe das Importieren unnötigerweise unterbrechen könnten

  • fix plugin links

1.1.1 (2009-11-24)

  • dist/looponfailing aus dem py.test-Kern in ein neues, separat veröffentlichtes pytest-xdist-Plugin verschoben.

  • neues junitxml-Plugin: –junitxml=path generiert eine junit-formatierte XML-Datei, die z.B. vom Hudson CI-System verarbeitet werden kann.

  • neue Option: –genscript=path generiert ein eigenständiges py.test-Skript, das keine installierten Bibliotheken benötigt. dank Ralf Schmitt.

  • neue Option: –ignore verhindert, dass der angegebene Pfad gesammelt wird. Kann mehrmals angegeben werden.

  • neue Option: –confcutdir=dir lässt py.test nur conftest-Dateien berücksichtigen, die relativ zu dem angegebenen Verzeichnis sind.

  • neues funcarg: „pytestconfig“ ist das py.test-Konfigurationsobjekt für den Zugriff auf Kommandozeilenargumente und kann nun leicht in einem Test verwendet werden.

  • installieren Sie py.test und py.which mit einem -$VERSION-Suffix, um zwischen Python3, python2.X, Jython und PyPy installierten Versionen zu unterscheiden.

  • neues „pytestconfig“-Funcarg ermöglicht den Zugriff auf das Testkonfigurationsobjekt

  • neuer „pytest_report_header“-Hook kann zusätzliche Zeilen zurückgeben, die am Header eines Testlaufs angezeigt werden sollen.

  • (experimentell) erlauben Sie „py.test path::name1::name2::…“, um direkt auf einen Test innerhalb einer Testsammlung zu verweisen. Dies könnte sich schließlich zu einem vollständigen Ersatz für „-k“-Spezifikationen entwickeln.

  • optimierte Plugin-Ladung: Die Reihenfolge ist nun wie in customize.html dokumentiert: setuptools, ENV, commandline, conftest. Außerdem werden setuptools-Einstiegspunkt-Namen in kanonische Namen („pytest_*“) umgewandelt.

  • überspringen Sie automatisch Tests, die „capfd“ benötigen, aber kein os.dup haben

  • erlauben Sie pytest_generate_tests, auch in Klassen definiert zu werden

  • deprezieren Sie die Verwendung des „disabled“-Attributs zugunsten von pytestmark

  • deprezieren Sie die Definition von Directory-, Module-, Class- und Function-Knoten in conftest.py-Dateien. Verwenden Sie stattdessen pytest collect Hooks.

  • Sammel-/Elementknoten-spezifische Runtest-/Collect-Hooks werden nur genau für übereinstimmende conftest.py-Dateien aufgerufen, d.h. für diejenigen, die sich genau unterhalb des Dateisystempfads eines Elements befinden

  • Änderung: Der erste pytest_collect_directory-Hook, der etwas zurückgibt, verhindert nun, dass weitere Hooks aufgerufen werden.

  • Änderung: Das Figleaf-Plugin erfordert jetzt –figleaf zur Ausführung. Außerdem werden seine langen Kommandozeilenoptionen etwas kürzer gemacht (siehe py.test -h).

  • Änderung: Das pytest doctest Plugin ist jetzt standardmäßig aktiviert und hat eine neue Option –doctest-glob, um ein Muster für Dateizusammenführungen festzulegen.

  • Änderung: interne py._* Hilfsvariablen entfernen, nur py._pydir behalten

  • erfassen von robusten Daten, um zu überleben, wenn benutzerdefinierter pytest_runtest_setup-Code fehlschlägt und den Erfassungs-Setup-Code daran hindert, ausgeführt zu werden.

  • machen Sie py.test.*-Helfer, die von Standard-Plugins bereitgestellt werden, frühzeitig sichtbar - funktioniert transparent sowohl für pydoc als auch für interaktive Sitzungen, die regelmäßig z.B. py.test.mark und py.test.importorskip sehen.

  • vereinfachen Sie die interne Plugin-Manager-Maschinerie

  • vereinfachen Sie den internen Sammelbaum durch Einführung eines RootCollector-Knotens

  • beheben Sie die Assertions-Neuinterpretation, die einen Aufruf mit „keyword=…“ sieht

  • Problem 66 beheben: Aufrufen von pytest_sessionstart und pytest_sessionfinish Hooks auf Worker-Knoten während der Dist-Tests, korrektes Berichten von Modul-/Sitzungs-Teardown-Hooks.

  • Problem 65 beheben: korrektes Behandeln von Dist-Tests, wenn keine execnet/py-Bibliothek remote installiert ist.

  • überspringen Sie einige Installations-Tests, wenn kein execnet verfügbar ist

  • Korrigieren Sie die Dokumentation, Korrigieren Sie die interne Generierung von Binärdateien/Skripten

1.1.0 (2009-11-05)

  • einführen Sie automatische Plugin-Registrierung über „pytest11“-Einstiegspunkte über setuptools’ pkg_resources.iter_entry_points

  • Korrigieren Sie py.test Dist-Tests, um mit execnet >= 1.0.0b4 zu funktionieren

  • py.test.cmdline.main() zur besseren Abwärtskompatibilität wieder einführen

  • svn-Pfade: Korrigieren Sie einen Fehler mit path.check(versioned=True) für svn-Pfade, erlauben Sie „%“ in svn-Pfaden, machen Sie svnwc.update() standardmäßig interaktiv wie in 1.0.x und fügen Sie svnwc.update(interactive=False) hinzu, um die Interaktion zu unterbinden.

  • verfeinern Sie das verteilte Tarball, um Test- und keine pyc-Dateien zu enthalten

  • versuchen Sie stärker, Deprecation-Warnungen für py.compat.*-Zugriffe auszugeben, die einen korrekten Speicherort angeben

1.0.3

  • Dokumentation anpassen und verbessern

  • entfernen Sie das py.rest-Tool und den internen Namensraum - es wurde nie wirklich beworben und kann bei Bedarf mit der alten Version wieder verwendet werden. Wenn Interesse besteht, könnte es zu einem eigenen Werkzeug wiederbelebt werden, denke ich.

  • Problem 48 und 59 beheben: lösen Sie einen Fehler aus, wenn das Modul einer importierten Testdatei nicht vom Dateipfad zu stammen scheint - vermeidet die „gleicher Name“-Verwirrung, die wiederholt gemeldet wurde

  • zusammengeführt von Ronnys Nose-Kompatibilitäts-Hacks: jetzt werden Nose-Style setup_module() und setup()-Funktionen unterstützt

  • generalisierte py.test.mark-Funktionsmarkierung einführen

  • Befehlsgruppen neu anordnen / verfeinern

  • deprezieren Sie parser.addgroup zugunsten von getgroup, das eine Optionsgruppe erstellt

  • fügen Sie die Kommandozeilenoption –report hinzu, die das Anzeigen von übersprungenen/xfailed-Abschnitten steuert

  • generalisierte Überspringung: eine neue Methode, um Python-Funktionen mit skipif oder xfail auf Funktions-, Klassen- und Modulebene basierend auf Plattform- oder sys-Modulattributen zu markieren.

  • erweitern Sie den py.test.mark-Decorator, um positionsbasierte Argumente zu ermöglichen

  • einführen und testen Sie „py.cleanup -d“ zum Entfernen leerer Verzeichnisse

  • Problem #59 beheben - robustifizieren Sie die unittest-Testsammlung

  • sorgen Sie dafür, dass die bpython/help-Interaktion funktioniert, indem Sie ApiModule ein __all__-Attribut hinzufügen, bereinigen Sie initpkg

  • verwenden Sie die MIT-Lizenz für pylib, fügen Sie einige Mitwirkende hinzu

  • entfernen Sie den py.execnet-Code und ersetzen Sie alle Verwendungen durch das eigentliche „execnet“

  • Problem 50 beheben - cached_setup speichert nun mehr für Tests mit mehreren Argumenten.

  • zusammenführen von Jarkos Korrekturen, Problem #45 und #46

  • fügen Sie die Möglichkeit hinzu, einen Pfad für py.lookup zum Durchsuchen anzugeben

  • beheben Sie einen cached_setup-Fehler bei funcargs, der wahrscheinlich nur beim verteilten Testen und im „modul“-Scope mit Teardown auftritt.

  • viele Korrekturen und Änderungen, um die Codebasis Python3-kompatibel zu machen, vielen Dank an Benjamin Peterson für die Hilfe dabei.

  • konsolidieren Sie die Implementierung von builtins, um mit >=2.3 kompatibel zu sein, fügen Sie Helfer hinzu, um die Beibehaltung von 2- und 3k-kompatiblem Code zu erleichtern

  • deprezieren Sie py.compat.doctest|subprocess|textwrap|optparse

  • deprezieren Sie py.magic.autopath, entfernen Sie das Verzeichnis py/magic

  • verschieben Sie die py.test-Assertionsbehandlung nach py/code und ein pytest_assertion-Plugin, fügen Sie die Option „–no-assert“ hinzu, deprecate Sie py.magic-Namespaces zugunsten von (weniger) py.code-Namespaces.

  • konsolidieren und bereinigen Sie py/code-Klassen und -Dateien

  • bereinigen Sie py/misc, verschieben Sie Tests in bin-for-dist

  • führen Sie delattr/delitem/delenv-Methoden zu py.test’s monkeypatch funcarg ein

  • konsolidieren Sie die py.log-Implementierung, entfernen Sie den alten Ansatz.

  • führen Sie py.io.TextIO und py.io.BytesIO ein, um zwischen Text-/Unicode- und Byte-Streams zu unterscheiden (verwendet die zugrunde liegenden Standard-IO-Objekte, falls verfügbar)

  • stellen Sie das Hilfsskript py.unittest_convert zur Verfügung, das „unittest.py“-Stil-Dateien in den einfacheren assert/direct-test-classes py.test/nosetests-Stil konvertiert. Das Skript wurde von Laura Creighton geschrieben.

  • vereinfachte interne localpath-Implementierung

1.0.2 (2009-08-27)

  • beheben Sie Verpackungsfehler, die durch Fedora Red Hat Packaging ausgelöst wurden, und fügen Sie auch doc-, examples- und contrib-Verzeichnisse zum Tarball hinzu.

  • fügen Sie einen Dokumentationslink zum neuen Django-Plugin hinzu.

1.0.1 (2009-08-19)

  • fügen Sie ein „pytest_nose“-Plugin hinzu, das nose.SkipTest, Nose-Style Function/Method/Generator Setup/Teardown behandelt und versucht, Funktionen korrekt zu melden.

  • das Erfassen von Unicode-Schreibvorgängen oder codierten Zeichenfolgen nach sys.stdout/err funktioniert besser, auch die Terminalausgabe wurde zwischen Windows und Linux angepasst und etwas vereinheitlicht.

  • verbesserte Dokumentationslayout und -inhalt erheblich

  • fügen Sie eine Option „–help-config“ hinzu, um conftest.py / ENV-Variablennamen für alle Longopt-Kommandozeilenoptionen und einige spezielle conftest.py-Variablen anzuzeigen. benennen Sie die Einstellung „conf_capture“ in conftest entsprechend in „option_capture“ um.

  • Problem #27 beheben: bessere Berichterstattung über nicht sammelbare Elemente, die auf der Kommandozeile angegeben wurden (z.B. pyc-Dateien)

  • Problem #33 beheben: Hinzufügen der Unterstützung für das Flag „–version“ (danke Benjamin Peterson)

  • Problem #32 beheben: Hinzufügen der Unterstützung für „unvollständige“ Pfade für wcpath.status()

  • mit „Test“ beginnende Klassen werden nicht mehr standardmäßig gesammelt, wenn sie eine __init__-Methode haben

  • monkeypatch setenv() akzeptiert jetzt einen „prepend“-Parameter

  • verbesserte Berichterstattung über Sammlungsfehler-Tracebacks

  • vereinfachte multicall-Mechanismus und Plugin-Architektur, einige interne Methoden und Argumentnamen umbenannt

1.0.0 (2009-08-04)

  • teurere Berichterstattung versucht, den Dateisystempfad relativ zum aktuellen Verzeichnis anzuzeigen

  • xfail-Ausgabe etwas verbessern

1.0.0b9 (2009-07-31)

  • saubere Handhabung und Berichterstattung des endgültigen Teardowns des Test-Setups

  • beheben Sie ein svn-1.6-Kompatibilitätsproblem mit py.path.svnwc().versioned() (danke Wouter Vanden Hove)

  • setup/teardown- oder Sammlungsprobleme werden jetzt als ERRORs oder mit großen „E“s in den Fortschrittszeilen angezeigt. sie werden separat gemeldet und gezählt.

  • dist-testing: ordnungsgemäße Handhabung von Testelementen, die lokal gesammelt werden, aber auf der entfernten Seite nicht gesammelt werden können - oft aufgrund von Plattform-/Abhängigkeitsgründen

  • vereinfachte py.test.mark-API - siehe Schlüsselwort-Plugin-Dokumentation

  • bessere Integration mit Logging: Erfassung erfasst standardmäßig Testfunktionen und ihr unmittelbares Setup/Teardown in einem einzigen Stream

  • capsys und capfd funcargs haben jetzt eine readouterr()- und eine close()-Methode (untergeordnete py.io.StdCapture/FD-Objekte werden verwendet, die ebenfalls eine readouterr()-Methode erhielten, um Schnappschüsse der erfassten Ausgaben/Fehler zurückzugeben)

  • machen Sie die Assertions-Neuinterpretation besser mit Vergleichen, die keine booleschen Werte zurückgeben (gemeldet mit numpy von dank maciej fijalkowski)

  • Überarbeitete Erfassung von Testergebnissen in das Plugin pytest_iocapture.py, wodurch der Erfassungscode aus dem config-Objekt entfernt wurde

  • item.repr_failure(excinfo) anstelle von item.repr_failure(excinfo, outerr)

1.0.0b8 (2009-07-22)

  • pytest_unittest-plugin ist jetzt standardmäßig aktiviert

  • Hook pytest_keyboardinterrupt eingeführt und pytest_sessionfinish-Hook verfeinert, Tests hinzugefügt.

  • Workaround für eine fehlerhafte Interaktion mit dem logging-Modul („closing already closed files“). Dank Sridhar Ratnakumar für die Auslösung.

  • Wenn Plugins „py.test.importorskip“ zum Importieren einer Abhängigkeit verwenden, wird nur eine Warnung ausgegeben, anstatt den Testprozess zu beenden.

  • viele Verbesserungen der Dokumentation: - Verfeinerte Dokumentation zu funcargs, Verwendung des Begriffs „factory“ anstelle von „provider“ - Hinzufügung einer neuen Seite für Vorträge/Tutorials - bessere Download-Seite - bessere Plugin-Docstrings - Hinzufügung einer neuen Seite für Plugins und eines Skripts zur automatischen Dokumentengenerierung

  • Teardown-Problem im Zusammenhang mit teilweise fehlgeschlagenen Funcarg-Setups behoben (danke MrTopf für die Meldung), „pytest_runtest_teardown“ wird jetzt immer aufgerufen, auch wenn „pytest_runtest_setup“ fehlgeschlagen ist.

  • Doctest-Ausgabe für Docstrings in py-Modulen angepasst, danke Radomir.

1.0.0b7

  • py.test.xfail zurück in py.test.mark.xfail umbenannt, um doppelte Dekorationsmöglichkeiten für xfail zu vermeiden

  • py.test.mark-Dekorator zum Setzen von Schlüsselwörtern auf Funktionen wieder hinzugefügt (war tatsächlich dokumentiert, daher war die Entfernung nicht erfreulich)

  • scope-Argument aus request.addfinalizer() entfernt, da request.cached_setup das scope-Argument hat. TOOWTDI.

  • Abschluss der Einrichtung vor der Berichterstattung über Fehler durchführen

  • Angewendete modifizierte Patches von Andreas Kloeckner, um zu ermöglichen, dass Testfunktionen keinen func_code haben (#22) und dass „-k“ und Funktionsschlüsselwörter funktionieren (#20)

  • Patch von Daniel Peolzleithner angewendet (Issue #23)

  • Issue #18 gelöst, multiprocessing.Manager() und Umleitung kollidieren

  • __name__ == „__channelexec__“ für remote_exec-Code gesetzt

1.0.0b3 (2009-06-19)

  • Plugin-Klassen sind entfernt: Hooks werden jetzt direkt in conftest.py oder globalen pytest_*.py-Dateien definiert.

  • Neuer Hook pytest_namespace(config) hinzugefügt, der es ermöglicht, Helfer direkt in den py.test.*-Namespace einzufügen.

  • Viele Hooks dokumentiert und verfeinert

  • Neuer Stil generativer Tests über den Hook pytest_generate_tests hinzugefügt, der gut mit Funktionsargumenten integriert.

1.0.0b1

  • Neue „funcarg“-Setup-Methode eingeführt, siehe doc/test/funcarg.txt

  • Plugin-Architektur und viele neue py.test-Plugins eingeführt, siehe doc/test/plugins.txt

  • teardown_method wird jetzt garantiert nach der Ausführung einer Testmethode aufgerufen.

  • Neue Methode: py.test.importorskip(mod,minversion) importiert entweder oder ruft py.test.skip() auf

  • Interne Architektur von py.test komplett überarbeitet

  • Neues py.process.ForkedFunc-Objekt, das die Ausführung einer Funktion in einen Subprozess auslagert und ein Ergebnis zurückgibt.

XXX viele Dinge fehlen hier XXX

0.9.2

  • Installation und Metadaten verfeinert, neues setup.py erstellt, jetzt basierend auf setuptools/ez_setup (danke an Ralf Schmitt für seine Unterstützung).

  • Die Art und Weise, wie py.*-Skripte unter Windows verfügbar gemacht werden, wurde verbessert. Sie werden jetzt als „.cmd“-Dateien in das Skriptverzeichnis hinzugefügt.

  • py.path.svnwc.status() ist jetzt vollständiger und verwendet die XML-Ausgabe des ‚svn‘-Befehls, falls verfügbar (Guido Wesdorp)

  • Korrektur für py.path.svn*, damit es mit svn 1.5 funktioniert (Chris Lamb)

  • Korrektur für path.relto(otherpath) unter Windows, um normcase zur Überprüfung zu verwenden, ob ein Pfad relativ ist.

  • py.test's Traceback ist von Editoren besser parsebar (folgt der Konvention filenames:LINENO: MSG) (danke an Osmo Salomaa)

  • Korrektur für die Javascript-Generierung, „py.test –runbrowser“ sollte jetzt zuverlässiger funktionieren

  • Zuvor versehentlich hinzugefügte py.test.broken und py.test.notimplemented Helfer entfernt.

  • Es gibt jetzt ein py.__version__-Attribut

0.9.1

Dies ist eine ziemlich vollständige Liste der v0.9.1, die als Referenz für Entwickler dienen kann.

  • Unterstützung für Plus-Zeichen in py.path.svn-URLs zugelassen [39106]

  • Unterstützung für Failed-Exceptions ohne excinfo in py.test behoben [39340]

  • Unterstützung für das Beenden von Prozessen für Windows (sowie für Plattformen, die os.kill unterstützen) in py.misc.killproc hinzugefügt [39655]

  • Setup/Teardown für generative Tests zu py.test hinzugefügt [40702]

  • Erkennung von FAILED TO LOAD MODULE in py.test hinzugefügt [40703, 40738, 40739]

  • Problem mit dem Aufruf von .remove() auf wcpaths von nicht versionierten Dateien in py.path behoben [44248]

  • Einige Import- und Vererbungsprobleme in py.test behoben [41480, 44648, 44655]

  • Grüner Balken-Tests schlagen fehl, wenn pypy verfügbar ist, aber ohne stackless [45294]

  • kleine Korrekturen in rsession-Tests [45295]

  • Problem mit 2.5 Typdarstellungen in py.test behoben [45483, 45484]

  • Interne Fehlerberichterstattung in py.test atomar gemacht [45518]

  • Nicht existierende Dateien werden vom py.lookup-Skript ignoriert [45519]

  • Verbesserte Erzeugung von Ausnahmenamen in py.test [45535]

  • weniger Threads in execnet verwendet [merge in 45539]

  • Sperre für atomare Berichterstattung in py.test entfernt [45545]

  • Globale Variablen aus execnet entfernt [45541, 45547]

  • Bereinigungsmechanismen refaktoriert, setDaemon auf 1 gesetzt, damit atexit in 2.5 aufgerufen wird (py.execnet) [45548]

  • Fehler beim Zusammenfügen von Threads in py.execnet's servemain behoben [45549]

  • py.test.rsession Tests refaktoriert, sodass sie nicht mehr von der genauen Ausgabeform abhängen [45646]

  • repr() auf Testresultate angewendet [45647]

  • „Reason“-Klassen für py.test.skip() hinzugefügt [45648, 45649]

  • Einige unnötige Plausibilitätsprüfungen in py.test.collect entfernt [45655]

  • verhindert die Verwendung von os.tmpfile() in py.io.fdcapture, da es unter Windows nur von Administratoren verwendet werden kann [45901]

  • Unterstützung für Sperren und nicht-rekursive Commits für py.path.svnwc hinzugefügt [45994]

  • Dateien in py.execnet gesperrt, um Segfaults bei CPython zu verhindern [46010]

  • export()-Methode zu py.path.svnurl hinzugefügt

  • -d -x in py.test behoben [47277]

  • Problem mit der Argumentverkettung in py.path.svnwc behoben [49423]

  • py.test-Verhalten wiederhergestellt, dass es bei Fehlern mit dem Code 1 beendet [49974]

  • kein Fehler bei HTML-Dateien, die keine begleitende .txt-Datei haben [50606]

  • „utestconvert.py < input“ behoben [50645]

  • kleine Korrektur für Code-Einrückung in py.code.source [50755]

  • Korrektur beim Erstellen der Dokumentation für _docgen.py [51285]

  • Verbesserte Überprüfungen für Quellcode-Darstellungen von Codeblöcken in py.test [51292]

  • Unterstützung für die Übergabe von Authentifizierungsdaten an py.path.svn*-Objekte hinzugefügt [52000, 52001]

  • sorted()-Aufruf für py.apigen-Tests zugunsten von [].sort() entfernt, um Python 2.3 zu unterstützen [52481]