pytest

pytest ist eine Alternative zu Pythons Unittest-Modul, die das Testen noch weiter vereinfacht.

  • pytest erkennt Tests automatisch anhand von Dateinamen und Funktionen, die mit test_ beginnen, während bei unittest Testklassen und -Methoden von unittest.TestCase abgeleitet werden. Dies führt zu einer einfacheren, besser lesbaren Syntax mit weniger Boilerplate-Code.

  • unittest bietet eine Reihe von Assertion-Methoden (z. B. assertEqual(), assertTrue(), assertRaises()). Mit pytest lassen sich dieselben Annahmen definieren, allerdings mit der Standard-assert()-Anweisung von Python. Dies führt häufig zu aussagekräftigeren Fehlermeldungen und einer besseren Introspektion.

  • unittest stellt für Fixtures nur setUp()- und tearDown()-Methoden bereit. In pytest hingegen werden Fixtures als Funktionen definiert, was die Wiederverwendbarkeit fördert und die Verwaltung von Testabhängigkeiten vereinfacht.

  • In unittest sind parametrisierte Tests zwar möglich, erfordern jedoch zusätzliche Aufwand. pytest enthält hingegen den Dekorator @pytest.mark.parametrize, mit dem mühelos Testfunktionen mit unterschiedlichen Eingaben und erwarteten Ergebnissen ausgeführt werden können.

  • pytest verfügt über ein umfangreiches Ökosystem mit über 800 Plugins für fortgeschrittene Testanforderungen; unittest ist in seiner Erweiterbarkeit eingeschränkter.

Bemerkung

Auch bei agentischer Software-Entwicklung nutzen wir pytest:

AGENTS.md
# Testing
- Use `pytest` for testing your code.
- Collect pytest fixtures in a `conftest.py` file to avoid duplication.
- When a test fails, run the last failed test first using `uv run pytest --last-failed`.

Siehe auch

Siehe auch

Im Jupyter Tutorial ist beschrieben, wie pytest auch in Jupyter Notebooks verwendet werden kann.

Installation

Ihr könnt pytest mit uv installieren:

$ uv add --group tests pytest
C:>  uv add --group tests pytest