105 lines
3.2 KiB
Markdown
105 lines
3.2 KiB
Markdown
<!-- status: canonical -->
|
|
<!-- lastReviewed: 2026-04-05 -->
|
|
|
|
# Testing-Strategie
|
|
|
|
## Testpyramide
|
|
|
|
```
|
|
/ E2E \ <- Manuell / geplant
|
|
/ Functional \ <- Standalone-Scripts (AI, real calls)
|
|
/ Integration \ <- pytest (DB, Workflows, RBAC)
|
|
/ Unit \ <- pytest (Models, Utils, Logic)
|
|
```
|
|
|
|
## Gateway: `gateway/tests/`
|
|
|
|
### Test-Kategorien
|
|
|
|
| Kategorie | Pfad | Beschreibung | Ausfuehrung |
|
|
|-----------|------|-------------|-------------|
|
|
| **Unit** | `tests/unit/` | Datamodels, RBAC-Logic, Utils, Workflows | `pytest tests/unit/` |
|
|
| **Integration** | `tests/integration/` | DB-abhaengig (RBAC, Workflow-Execution) | `pytest tests/integration/` |
|
|
| **Validation** | `tests/validation/` | Architektur-Validierung | `pytest tests/validation/` |
|
|
| **Functional** | `tests/functional/` | AI-Modell-Tests, KPI, JSON-Verarbeitung | `python tests/functional/<script>.py` (standalone, nicht pytest) |
|
|
|
|
### Test-Verzeichnisstruktur
|
|
|
|
```
|
|
tests/
|
|
conftest.py # sys.path Setup
|
|
README.md # Ausfuehrungshinweise
|
|
test_phase123_basic.py # Root-Level Basistest
|
|
unit/
|
|
datamodels/ # test_workflow_models, test_docref
|
|
rbac/ # test_rbac_bootstrap, test_rbac_permissions
|
|
services/ # test_renderer_pdf_smoke, test_json_extraction
|
|
utils/ # test_json_utils
|
|
workflows/ # test_automation2_graphUtils, test_state_management
|
|
integration/
|
|
rbac/ # test_rbac_database
|
|
workflows/ # test_workflow_execution
|
|
validation/
|
|
test_architecture_validation.py
|
|
functional/
|
|
test01_ai_model_selection.py # Nummerierte AI-Testscripts
|
|
... # test14_json_continuation_context.py etc.
|
|
```
|
|
|
|
### Tests ausfuehren
|
|
|
|
```bash
|
|
cd gateway/
|
|
|
|
# Standard (ohne expensive-Marker):
|
|
pytest
|
|
|
|
# Alle Tests (inkl. expensive):
|
|
pytest -m ""
|
|
|
|
# Nur Unit:
|
|
pytest tests/unit/
|
|
|
|
# Mit Coverage:
|
|
pytest --cov=modules tests/unit/
|
|
```
|
|
|
|
### Marker
|
|
|
|
- `@pytest.mark.expensive` -- Standardmaessig uebersprungen (Default: `-m 'not expensive'` in `pytest.ini`)
|
|
- `@pytest.mark.asyncio` -- Fuer async Tests
|
|
|
|
### Konfiguration
|
|
|
|
`pytest.ini` im `gateway/`-Root:
|
|
- `testpaths = tests`, `pythonpath = .`
|
|
- Log-Output: `logs/test_logs.log`
|
|
- Default: `-v --tb=short -m 'not expensive'`
|
|
|
|
## Frontend Nyla
|
|
|
|
**Aktueller Stand (2026-04-05):** Kein automatisiertes Test-Framework installiert. `package.json` enthaelt keinen `test`-Script, keine Vitest/Jest/Cypress-Dependency.
|
|
|
|
**Qualitaets-Gate:** Nur ESLint (`npm run lint`).
|
|
|
|
**Empfehlung:** Vitest fuer Unit/Component-Tests, Playwright oder Cypress fuer E2E.
|
|
|
|
## Akzeptanzkriterien (AC-Format)
|
|
|
|
In Work-Items (`c-work/`) verwenden wir Given-When-Then:
|
|
|
|
```
|
|
Given <Vorbedingung>
|
|
When <Aktion>
|
|
Then <erwartetes Ergebnis>
|
|
```
|
|
|
|
### Testplan-Mapping
|
|
|
|
| ID | AC | Art | Automatisiert | Repo-Pfad | Status |
|
|
|----|----|-----|--------------|-----------|--------|
|
|
| T1 | 1 | unit | ja | gateway/tests/unit/... | pending |
|
|
| T2 | 2 | integration | ja | gateway/tests/integration/... | pending |
|
|
| T3 | 3 | api | nein | -- | pending |
|
|
|
|
Referenz: -> `c-work/_TEMPLATE.md` (Testplan-Section)
|