Plugins

So leistungsfähig pytest ist, es kann noch mehr, wenn wir Plugins hinzufügen. Die Codebasis von pytest ist so konzipiert, dass Anpassungen und Erweiterungen möglich sind, und es gibt Hooks, die Änderungen und Verbesserungen durch Plugins ermöglichen.

Es wird euch vielleicht überraschen, dass ihr bereits einige Plugins geschrieben habt, wenn ihr die vorherigen Abschnitte durchgearbeitet habt. Jedes Mal, wenn ihr Fixtures oder Hook-Funktionen in die Datei conftest.py eines Projekts einfügt, erstellt ihr ein lokales Plugin. Es ist nur ein wenig zusätzliche Arbeit, diese conftest.py-Dateien in installierbare Plugins umzuwandeln, die ihr zwischen Projekten, mit anderen Personen oder mit der ganzen Welt teilen könnt.

Zunächst beginnen wir jedoch mit der Frage, wo ihr Plugins von Drittanbietern finden könnt. Es gibt eine ganze Reihe von Plugins, so dass die Wahrscheinlichkeit groß ist, dass Änderung, die ihr an pytest vornehmen wollt, bereits geschrieben wurden.

Plugins finden

Ihr könnt pytest-Plugins von Drittanbietern an verschiedenen Stellen finden, u.a. enthält die pytest-Dokumentation eine alphabetisch geordnete Liste von Plugins, die von pypi.org stammen. Ihr könnt auch pypi.org selbst durchsuchen, z.B. nach pytest oder nach dem pytest-Framework. Schließlich finden sich in pytest-dev auf GitHub auch viele beliebte pytest-Plugins.

Plugins installieren

pytest-Plugins lassen sich, wie anderen Python-Pakete einfach mit uv installieren: uv add --group tests pytest-cov.

Plugins für …

… veränderte Testabläufe

pytest führt unsere Tests üblicherweise in einer vorhersehbaren Reihenfolge aus. Bei einem Verzeichnis mit Testdateien führt pytest jede Datei in alphabetischer Reihenfolge aus. Innerhalb jeder Datei wird jeder Test in der Reihenfolge ausgeführt, in der er in der Datei erscheint. Manchmal kann es jedoch sinnvoll sein, diese Reihenfolge zu ändern. Die folgenden Plugins ändern den üblichen Ablauf eines Test:

pytest-xdist

führt Tests parallel aus, entweder mit mehreren CPUs auf einer Maschine oder mehreren entfernten Maschinen.

Stars Contributors Commit activity Lizenz
pytest-randomly

lässt die Tests in zufälliger Reihenfolge ablaufen, zuerst nach Datei, dann nach Klasse, dann schließlich nach Testdatei.

Stars Contributors Commit activity Lizenz
pytest-rerunfailures

führt fehlgeschlagene Tests erneut aus und ist v.a. hilfreich bei fehlerhaften Tests.

Stars Contributors Commit activity Lizenz
pytest-order

ermöglicht die Festlegung der Reihenfolge durch Markers.

Stars Contributors Commit activity Lizenz
pytest-repeat

macht es einfach, einen oder mehrere Tests zu wiederholen.

Stars Contributors Commit activity Lizenz
pytest-freethreaded

für die Überprüfung, ob Tests und Bibliotheken mit dem experimentellen Freethreaded-Modus von Python 3.13 thread-sicher sind.

Stars Contributors Commit activity Lizenz

… veränderten Output

Die normale pytest-Ausgabe zeigt hauptsächlich Punkte für bestandene Tests und Zeichen für andere Ausgaben. Wenn ihr -v übergebt, seht ihr eine Liste von Testnamen mit dem Ergebnis. Es gibt jedoch Plugins, die die Ausgabe noch weiter verändern:

pytest-sugar

zeigt grüne Häkchen anstelle von Punkten für bestandene Tests und hat einen schönen Fortschrittsbalken. Es zeigt, wie pytest-instafail auch, Fehlschläge sofort an.

Stars Contributors Commit activity Lizenz
pytest-html

ermöglicht die Erstellung von HTML-Berichten. Berichte können mit zusätzlichen Daten und Bildern, wie z.B. Screenshots von Fehlerfällen, erweitert werden.

Stars Contributors Commit activity Lizenz
pytest-check

lässt mehrere Fehler pro Test zu.

Stars Contributors Commit activity Lizenz

… für die Webentwicklung

pytest wird ausgiebig für das Testen von Webprojekten verwendet und es gibt eine lange Liste von Plugins, die das Testen weiter vereinfachen:

Playwright for Python

wurde speziell für End-to-End-Tests entwickelt. Playwright unterstützt alle modernen Rendering-Engines wie Chromium, WebKit und Firefox mit einer einzigen API.

Stars Contributors Commit activity Lizenz
pytest-httpx

erleichtert das Testen von HTTPX und FastAPI-Anwendungen.

Stars Contributors Commit activity Lizenz
pytest-selenium

stellt Fixtures zur Verfügung, die eine einfache Konfiguration von Browser-basierten Tests mit Selenium ermöglichen.

Stars Contributors Commit activity Lizenz
pyleniumio

ist ein dünner Python-Wrapper um Selenium mit einfacher und klarer Syntax.

Stars Contributors Commit activity Lizenz

… für Fake-Daten

Wir haben Faker schon verwendet in Marker mit Fixtures kombinieren, um mehrere Task-Instanzen zu erzeugen. Es gibt viele Fälle in verschiedenen Bereichen, in denen es hilfreich ist, Fake-Daten zu erzeugen. Es überrascht daher nicht, dass es mehrere Plugins gibt, die diesen Bedarf decken:

Faker

generiert Fake-Daten für euch und bietet ein Faker Fixture für die Verwendung mit pytest.

Stars Contributors Commit activity Lizenz
time-machine

stellt sowohl eine Fixture als auch einen Marker zur Verfügung, um die Zeit während der Tests zu steuern.

Stars Contributors Commit activity Lizenz
pytest-factoryboy

enthält Fixtures für factory-boy, einen Datenbankmodell-Datengenerator.

Stars Contributors Commit activity Lizenz

… für Verschiedenes

pytest-testinfra

ist ein Serverspec-Äquivalent für pytest, um den aktuellen Zustand eurer Server mit Management-Tools wie Salt, Ansible, Puppet, Chef usw. zu testen.

Stars Contributors Commit activity Lizenz
pytest-cov

führt die Coverage beim Testen aus.

Stars Contributors Commit activity Lizenz
pytest-mock

ist ein dünner Wrapper um die unittest.mock-Patching-API.

Stars Contributors Commit activity Lizenz
pytest-asyncio

testet asynchrone Funktionen.

Stars Contributors Commit activity Lizenz
pytest-benchmark

führt Benchmark-Timing für Code innerhalb von Tests durch.

Stars Contributors Commit activity Lizenz
pytest-bdd

schreibt BDD-Tests mit pytest.

Stars Contributors Commit activity Lizenz
pytest-memray

pytest-Plugin für die Integration von Memray in eure Testsuite.

Stars Contributors Commit activity Lizenz
pytest-timeout

lässt Tests nicht zu lange laufen.

Stars Contributors Commit activity Lizenz
pytest-describe

ist ein Plugin für pytest, mit dem Tests in beliebig verschachtelten describe-Blöcken geschrieben werden können, ähnlich wie bei RSpec für Ruby und Jasmine für JavaScript.

Stars Contributors Commit activity Lizenz
pytest-grpc

ist ein Pytest-Plugin für gRPC.

Stars Contributors Commit activity Lizenz

Eigene Plugins

Siehe auch