- 1. Grundlagen und Test Discovery
- Konventionen: Wie pytest Tests findet (Dateinamen, Klassen, Funktionen).
- Assertions: Warum einfache assert-Statements in pytest mächtiger sind als self.assert....
- CLI-Tricks: Gezieltes Ausführen von Tests mit -k, -m und -x.
- 2. Das Fixture-System: Setup und Teardown
- Dependency Injection: Ressourcen (DB-Verbindungen, API-Clients) sauber bereitstellen.
- Scopes: Lebensdauer von Fixtures steuern (function, class, module, session).
- Autouse & Yield: Automatisches Setup und sauberes Aufräumen nach dem Test.
- 3. Parametrisierung: DRY (Dont Repeat Yourself)
- @pytest.mark.parametrize: Den gleichen Test mit verschiedenen Datensätzen ausführen.
- Indirekte Parametrisierung: Fixtures dynamisch über Test-Parameter steuern.
- Kombinatorik: Massives Testen von Grenzwerten mit minimalem Code-Overhead.
- 4. Marks und Metadata
- Built-in Marks: skip, xfail (erwartetes Scheitern) und skipif.
- Custom Marks: Logische Gruppierung von Tests (z.B. @pytest.mark.slow).
- Filtern: Ausführen von spezifischen Test-Suites basierend auf Markierungen.
- 5. Konfiguration und die conftest.py
- Zentralisierung: Fixtures und Hooks projektweit zur Verfügung stellen.
- pytest.ini & pyproject.toml: Standard-Verhalten und CLI-Optionen festlegen.
- Hooks: Den Test-Lifecycle erweitern (z.B. für benutzerdefinierte Reports).
- 6. Mocking und Monkeypatching
- pytest-mock: Das mocker-Fixture zur Isolation von Systemkomponenten.
- Monkeypatch: Temporäres Ändern von Umgebungsvariablen oder Modul-Attributen.
- Abhängigkeiten: Externe APIs und Datenbanken für deterministische Tests simulieren.
- 7. Testing in modernen Umgebungen
- pytest-asyncio: Asynchrone Funktionen (async/await) korrekt testen.
- Integrationstests: Zusammenspiel von Microservices und Datenbanken validieren.
- API-Testing: Kombination von pytest mit requests oder httpx.
- 8. Performance und Plugins
- pytest-xdist: Parallele Testausführung zur massiven Zeitersparnis.
- pytest-cov: Messung und Visualisierung der Testabdeckung (Coverage).
- Weitere Plugins: pytest-html für grafische Reports, pytest-ordering uvm.
- 9. Praxis-Workshop: "The Bulletproof App"
- Workshop: Refactoring einer ungetesteten Applikation hin zu 90% Coverage.
- Refactoring-Task: Komplexe unittest-Strukturen in elegantes pytest transformieren.
- CI-Challenge: Integration der Test-Suite in eine GitHub Action mit Coverage-Report.
- Final Roadmap: Aufbau eines Test-Standards für zukünftige Projekte.
LernzieleDie Teilnehmenden erlernen den Aufbau einer strukturierten Testumgebung mit pytest. Ziel ist es, wiederverwendbare Fixtures zu erstellen, Edge-Cases durch Parametrisierung effizient abzudecken und Plugins gezielt einzusetzen, um die Testgeschwindigkeit und die Aussagekraft von Testberichten signifikant zu steigern.
Zielgruppen- Python-Entwickler: Zur Verbesserung der Code-Qualität durch Unit- und Integration-Tests.
- QA-Engineers & Tester: Zur Automatisierung komplexer Test-Szenarien.
- DevOps Engineers: Zur Integration von Test-Metriken in CI-Pipelines.
- Data Scientists: Zur Absicherung von Daten-Pipelines und Analyse-Logik.