Testing
Dieses Kapitel beschreibt die Teststrategie, das Setup und die Ausführung für das GENTRAIN-Projekt. Wir verwenden mehrere Testebenen, um die Codequalität und Systemzuverlässigkeit sicherzustellen: Unit-Tests, End-to-End (E2E) Tests und eine produktionsähnliche Testumgebung.
Teststrategie
GENTRAIN folgt einem mehrschichtigen Testansatz:
- Unit-Tests: Testen einzelner Komponenten und Funktionen isoliert
- End-to-End (E2E) Tests: Validierung vollständiger Benutzer-Workflows in einer produktionsähnlichen Umgebung
Testumgebung einrichten
Docker Compose für Tests
Wir verwenden Docker Compose und eine Caddyfile.local-Datei, um die Produktionsumgebung lokal zu simulieren. Dies stellt sicher, dass Tests unter realistischen Bedingungen mit allen erforderlichen Diensten ausgeführt werden.
Dienste
Die Testumgebung (docker-compose.test.yaml) erweitert die Haupt-docker-compose.prod.yaml mit zusätzlichen Konfigurationen für Tests:
- e2e-tests: Cypress Test-Runner
- frontend-tests: Frontend-Dienst mit Testkonfigurationen
Diese Dienste verwenden ein Testing-Profil, um sie von Produktionsdiensten zu isolieren.
Testumgebung starten
docker compose -f docker-compose.test.yaml build --no-cache
docker compose -f docker-compose.test.yaml --profile testing build e2e-tests frontend-tests
Diese Befehle bauen die notwendigen Docker-Images für die Testumgebung.
docker compose -f docker-compose.test.yaml up
Dieser Befehl startet alle in der docker-compose.test.yaml definierten Dienste, außer die Testservices (e2e-tests, frontend-tests). Nach dem Start der Dienste sind diese unter folgenden Domains erreichbar:
- API unter
http://api.localhost - Frontend unter
https://app.localhost - Admin-Panel unter
https://admin.localhost - Dokumentation unter
https://docs.localhost
Weitere Details zum Routing finden sich in der Caddyfile.local.
Testumgebung stoppen
docker compose -f docker-compose.test.yaml down
Umgebungskonfiguration
Die .env.test-Datei enthält testspezifische Konfigurationen und wird von den Testdiensten und der CI/CD-Pipeline verwendet.
Unit-Testing
Frontend Unit-Tests
Frontend Unit-Tests befinden sich im frontend/-Verzeichnis und verwenden Vitest als Testing-Framework.
Frontend Unit-Tests lokal ausführen
# Von ./frontend
npm run test
Frontend Unit-Tests in Docker ausführen
docker compose -f docker-compose.test.yaml --profile testing run --rm frontend-tests
API Unit-Tests
API Unit-Tests befinden sich im backend/api/-Verzeichnis und verwenden pytest als Testing-Framework.
API Unit-Tests in Docker ausführen
docker exec gentrain-api sh -c "pytest"
End-to-End (E2E) Testing mit Cypress
Überblick
Cypress wird für E2E-Tests verwendet, um vollständige Benutzer-Workflows aus UI-Perspektive zu validieren. Tests laufen in einem echten Browser (Chrome) gegen eine Live-Testumgebung.
Cypress-Setup
Die E2E-Testsuite befindet sich in e2e-tests/cypress/ mit folgender Struktur:
cypress/
├── e2e/ # Test-Spezifikationen
│ └── smoke/ # Smoke-Tests für kritische Workflows
│ └── admin/ # Admin-Panel-Tests
│ └── app/ # Frontend-Tests
│ └── docs/ # Dokumentations-Tests
├── fixtures/ # Testdaten-Dateien
├── support/ # Hilfsfunktionen und Utilities
└── screenshots/ # Screenshots von Testläufen
└── videos/ # Videoaufzeichnungen von Testläufen
E2E-Tests ausführen
Voraussetzungen
Starten Sie die Testumgebung wie im Abschnitt Testumgebung einrichten beschrieben.
Tests ausführen
Interaktiver Modus (für Entwicklung):
cd e2e-tests
npx cypress open
Dies öffnet den Cypress Test Runner, wo Sie:
- Einzelne Tests anzeigen und debuggen können
- Tests in spezifischen Browsern ausführen können
- Testvideo-Aufzeichnungen anzeigen können
- Element-Selektoren inspizieren können
Headless-Modus:
cd e2e-tests
npx cypress run
Dies führt alle Tests in einem Headless-Browser aus und generiert einen Testbericht.
In Docker (für CI/CD):
docker compose -f docker-compose.test.yaml --profile testing run --rm e2e-tests
Automatisiertes Testen mit GitHub Actions
CI/CD-Workflow
Die .github/workflows/testing.yml-Datei definiert automatisiertes Testen bei:
- Push auf dev-Branch: Vollständige Testsuite-Ausführung
- Pull Requests auf dev-Branch: Test-Validierung vor dem Merge
Workflow-Stages
- Setup: Code auschecken und Umgebung vorbereiten
- Docker-Images bauen: Alle Docker-Images inklusive Testdienste bauen
- Dienste starten: Testumgebung über Docker Compose starten
- Auf Dienste warten: Health-Checks stellen sicher, dass alle Dienste vor dem Testen bereit sind
- Unit-Tests ausführen: Frontend- und API-Unit-Tests ausführen
- E2E-Tests ausführen: Cypress End-to-End-Tests ausführen
- Artefakte hochladen: Testvideos und Screenshots für Debugging speichern
- Aufräumen: Testumgebung herunterfahren und Container entfernen
Der Workflow beinhaltet umfassendes Error-Handling:
- Container-Logs werden bei Fehlern für Debugging erfasst
- Test-Artefakte (Videos/Screenshots) werden unabhängig von Testergebnissen in GitHub Artifacts hochgeladen
- Dienste werden immer heruntergefahren, auch wenn Tests fehlschlagen