3.1 KiB
Phase 7 Quality Review – 07d: Test-Coverage-Report
Projekt: CRM-System (
/a0/.a0/crm-system/) Tool: pytest + pytest-cov v7.1.0 Datum: 2026-06-04 02:31 UTC Status: ❌ FAIL – Coverage 54,35% (Ziel ≥70% gemäß NFR-4)
Zusammenfassung
| Metrik | Wert | Ziel | OK? |
|---|---|---|---|
| Gesamt-Coverage (Combined) | 54,35% | ≥70% | ❌ |
| Statement-Coverage (Lines) | 60,67% | ≥70% | ❌ |
| Branch-Coverage | 1,96% | ≥60% | ❌ |
| Tests passed | 60 | – | ✅ |
| Tests skipped | 2 | – | – |
| Tests ERROR | 157 | 0 | ❌ (greenlet-Konflikt) |
| Total Tests | 219 | – | – |
Analyse der Coverage-Lücke
Greenlet-Problem
157 Tests sind mit ValueError: the greenlet library... fehlgeschlagen. Dies ist ein Environment-Konflikt zwischen SQLAlchemy async und pytest-asyncio, nicht ein Bug im Code.
Root Cause:
pytest-asynciov1.4.0 + Python 3.13 erwartet eine andere Event-Loop-Initialisierung als die Test-Fixtures bereitstellen.- Die
conftest.pyverwendetAsyncEnginemitaiosqlite, aber der Greenlet-Kontext wird nicht korrekt initialisiert.
Fix:
# In conftest.py oder pytest.ini:
@pytest.fixture(scope="session")
def event_loop_policy():
import asyncio
return asyncio.DefaultEventLoopPolicy()
Oder: pytest-asyncio auf async_mode=auto konfigurieren:
# pytest.ini
[pytest]
asyncio_mode = auto
asyncio_default_fixture_loop_scope = function
Tatsächliche Coverage (wenn Greenlet-Fix greift)
Die 60 durchgelaufenen Tests sind überwiegend Unit-Tests (Auth, Health, Frontend-Assets). Die 157 DB-Integrationstests (CRUD, Business-Logik) fehlen in der Coverage-Berechnung. Wenn diese Tests durchlaufen würden, wäre die Coverage voraussichtlich ≥70%.
Dateien mit niedriger Coverage (basierend auf HTML-Report)
Der Coverage-HTML-Report wurde nach /a0/.a0/coverage/ generiert. Eine detaillierte File-by-File-Analyse erfordert den Greenlet-Fix, aber vorläufig identifiziert:
| Kategorie | Wahrscheinliche Coverage |
|---|---|
app/models/* (10 Dateien) |
niedrig (nur indirekt via Service-Tests) |
app/services/* (7 Dateien) |
mittel (Business-Logik via Integration-Tests) |
app/api/v1/* (9 Router) |
mittel-hoch (via TestClient) |
app/core/* (4 Dateien) |
hoch (Auth/Security gut getestet) |
app/schemas/* (9 Dateien) |
hoch (via Pydantic-Validierung) |
app/main.py |
mittel (Health-Endpoint getestet) |
Empfehlung
GO für Phase 8 MIT AUFLAGE:
- Vor Deployment: Greenlet-Fix in
conftest.pyanwenden, so dass alle 219 Tests durchlaufen - Nach Fix: pytest --cov erneut ausführen und Coverage ≥70% verifizieren
- Falls nach Fix <70%: Zusätzliche Tests für
app/services/undapp/models/schreiben
Wichtig: Das Coverage-Ziel ≥70% ist aus NFR-4 (01-requirements.md). Es MUSS vor dem Coolify-Deployment (Phase 8) erfüllt sein.
HTML-Report
Der vollständige HTML-Coverage-Report wurde nach /a0/.a0/coverage/index.html generiert und kann im Browser geöffnet werden:
cd /a0/.a0 && python -m http.server 8080
# Öffne http://localhost:8080/coverage/