1. Projektziel
ImmoPrüf ist eine simulierte Immobilienbewertungs-Web-App, entwickelt um einen vollständigen QA-Workflow zu demonstrieren.
Was
Was getestet wird
- Formularvalidierung
- Berechnungslogik (Marktwert, Beleihungswert)
- REST-API Endpoints
- Fehlerfälle und Edge Cases
Wie
Wie getestet wird
- Manuelles exploratives Testen
- Automatisierte E2E-Tests (Playwright)
- API-Tests (Postman)
- Automatische CI-Pipeline (GitHub Actions)
2. Architekturübersicht
Drei unabhängige Schichten — Frontend, API und Tests.
3. Gefundene und behobene Bugs
5 Bugs durch manuelles exploratives Testen entdeckt.
| ID | Beschreibung | Schweregrad | Status |
|---|---|---|---|
BUG-001 |
Beleihungswert 80% statt 60% | Kritisch | ✅ Behoben |
BUG-002 |
Datum zeigt 01.01.1970 | Mittel | ✅ Behoben |
BUG-003 |
Fläche ohne m² Einheit | Niedrig | ✅ Behoben |
BUG-004 |
Gewerbeimmobilie zeigt "undefined" | Kritisch | ✅ Behoben |
BUG-005 |
Kein Fehler bei Wert unter 10.000€ | Mittel | ✅ Behoben |
5 Bugs gefunden — 5 Bugs behoben ✅
Jeder Bug wurde mit Reproduktionsschritten, erwartetem und tatsächlichem Ergebnis dokumentiert.
Jeder Bug wurde mit Reproduktionsschritten, erwartetem und tatsächlichem Ergebnis dokumentiert.
4. Automatisierte Tests — Playwright
Stack
Technologie
- Playwright + TypeScript
- Chromium Browser
- End-to-End Tests
- Headless Modus für CI
Tests
Was getestet wird
- Validierung aller 4 Formularfelder
- Alle 5 Bug-Fixes verifiziert
- Happy-Path Gesamttest
- Regression nach jeder Änderung
// Beispiel — BUG-001 Test
test('Beleihungswert ist 60% des Marktwerts', async ({ page }) => {
await fillForm(page, {
adresse: 'Hauptstrasse 12, Erfurt',
typ: 'wohnung',
flaeche: '100',
baujahr: '2020'
});
const ratio = beleihung / marktwert;
expect(ratio).toBeCloseTo(0.6, 1); // ✅
});
10 / 10 Tests bestanden ✅
5. API Tests — Postman
3 REST-Endpoints mit 20 automatisierten Tests.
| Endpoint | Methode | Tests | Status |
|---|---|---|---|
/api/marktdaten |
GET | 7 | ✅ |
/api/wertindikation |
GET | 5 | ✅ |
/api/hochwasser |
GET | 5 | ✅ |
Fehlertests |
GET | 3 | ✅ |
// Beispiel — Postman Test Script
pm.test("Beleihungswert ist 60% des Marktwerts", function () {
const json = pm.response.json();
const ratio = json.ergebnis.beleihungswert / json.ergebnis.marktwert;
pm.expect(ratio).to.be.closeTo(0.6, 0.01); // ✅
});
20 / 20 Tests bestanden ✅
6. CI/CD — GitHub Actions
Bei jedem Push auf main werden alle Tests
automatisch ausgeführt.
Pipeline
Schritte
- Code checkout
- Node.js 24 installieren
- Dependencies installieren (
npm ci) - Playwright + Chromium installieren
- API Server + HTTP Server starten
- Server-Startzeit abwarten (sleep 8s)
- Playwright Tests ausführen
- HTML Report als Artifact speichern (30 Tage)
Warum
Mehrwert
- Kein manuelles Testen nach jedem Commit
- Bug wird sofort erkannt bevor er live geht
- Report als Beweis gespeichert (30 Tage)
- Gleicher Ablauf wie Jenkins bei on-geo
- Badge zeigt Status direkt im README
Workflow:
Trigger: Push + Pull Request auf
Runner:
.github/workflows/playwright.ymlTrigger: Push + Pull Request auf
mainRunner:
ubuntu-latest · Node.js 24
7. Projektstruktur
immopruf/
├── app/
│ └── index.html ← Web-Anwendung
├── tests/
│ └── immopruf.spec.ts ← Playwright Tests (TypeScript)
├── api/
│ └── server.js ← Mock REST API (Node.js + Express)
├── docs/
│ ├── bug-report.md ← Bug-Dokumentation
│ ├── api-test-report.md ← API Testergebnisse
│ ├── ci-cd-report.md ← CI/CD Dokumentation
│ ├── architecture.html ← Architektur-Diagramm
│ └── project.html ← Diese Seite
├── .github/
│ └── workflows/
│ └── playwright.yml ← GitHub Actions Pipeline
├── playwright.config.ts
├── package.json
└── README.md
8. Gesamtergebnis
| Testart | Tests | Bestanden | Status |
|---|---|---|---|
| Manuell (Bugs gefunden) | 5 | 5 | ✅ |
| Playwright E2E | 10 | 10 | ✅ |
| Postman API | 20 | 20 | ✅ |
| Total | 35 | 35 | ✅ |
35 / 35 Tests bestanden ✅
Vollständiger QA-Workflow von manuellen Tests bis CI/CD-Pipeline.
Vollständiger QA-Workflow von manuellen Tests bis CI/CD-Pipeline.