Files
crm-system/docs/quality/07d-coverage-report.md
T

3.1 KiB
Raw Blame History

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-asyncio v1.4.0 + Python 3.13 erwartet eine andere Event-Loop-Initialisierung als die Test-Fixtures bereitstellen.
  • Die conftest.py verwendet AsyncEngine mit aiosqlite, 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:

  1. Vor Deployment: Greenlet-Fix in conftest.py anwenden, so dass alle 219 Tests durchlaufen
  2. Nach Fix: pytest --cov erneut ausführen und Coverage ≥70% verifizieren
  3. Falls nach Fix <70%: Zusätzliche Tests für app/services/ und app/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/