225 lines
5.4 KiB
Markdown
225 lines
5.4 KiB
Markdown
# EspoCRM E2E Test Suite
|
|
|
|
Automatisierte End-to-End Tests für Custom EspoCRM Entities.
|
|
|
|
## Überblick
|
|
|
|
Das Test-Framework führt automatisiert folgende Tests durch:
|
|
|
|
### ✅ CRUD-Operationen
|
|
- **Create**: Erstellen von Testdatensätzen für alle Custom Entities
|
|
- **Read**: Validierung der erstellten Datensätze
|
|
- **Update**: Änderung von Feldern
|
|
- **Delete**: Löschen der Test-Daten
|
|
|
|
### 🔗 Relationship-Tests
|
|
- **Link**: Verknüpfung von Entities über Relationships
|
|
- **Unlink**: Entfernung von Verknüpfungen
|
|
- **Verification**: Prüfung der korrekten Verknüpfung
|
|
|
|
## Getestete Entities
|
|
|
|
1. **CMietobjekt** - Mietobjekte (Wohnungen, Häuser, etc.)
|
|
2. **CVmhMietverhältnis** - Mietverhältnisse
|
|
3. **CKündigung** - Kündigungen
|
|
4. **CBeteiligte** - Beteiligte Personen (Mieter, Vermieter)
|
|
5. **CMietinkasso** - Mietinkasso-Verfahren
|
|
6. **CVmhRäumungsklage** - Räumungsklagen
|
|
|
|
## Getestete Relationships
|
|
|
|
- CVmhMietverhältnis ↔ CMietobjekt
|
|
- CKündigung ↔ CVmhMietverhältnis
|
|
- CBeteiligte ↔ CVmhMietverhältnis (als Mieter/Vermieter)
|
|
|
|
## Installation
|
|
|
|
### Voraussetzungen
|
|
|
|
- Python 3.6+
|
|
- `requests` Bibliothek
|
|
|
|
```bash
|
|
pip3 install requests
|
|
```
|
|
|
|
## Verwendung
|
|
|
|
### Schnellstart
|
|
|
|
```bash
|
|
./run_e2e_tests.sh
|
|
```
|
|
|
|
### Direkte Python-Ausführung
|
|
|
|
```bash
|
|
python3 e2e_tests.py
|
|
```
|
|
|
|
## Konfiguration
|
|
|
|
Die Konfiguration erfolgt in [e2e_tests.py](e2e_tests.py#L20-L25):
|
|
|
|
```python
|
|
CONFIG = {
|
|
'base_url': 'https://crm.bitbylaw.com',
|
|
'api_key': '2b0747ca34d15032aa233ae043cc61bc',
|
|
'username': 'dev-test'
|
|
}
|
|
```
|
|
|
|
## Ausgabe
|
|
|
|
Das Framework generiert eine detaillierte Testübersicht:
|
|
|
|
```
|
|
================================================================================
|
|
TEST SUMMARY
|
|
================================================================================
|
|
|
|
✅ CMietobjekt: 4/4 tests passed
|
|
✓ create 0.234s
|
|
✓ read 0.123s
|
|
✓ update 0.156s
|
|
✓ delete 0.089s
|
|
|
|
✅ CVmhMietverhltnis: 4/4 tests passed
|
|
✓ create 0.267s
|
|
✓ read 0.134s
|
|
✓ update 0.178s
|
|
✓ delete 0.092s
|
|
|
|
================================================================================
|
|
Total: 24/24 tests passed (0 failed)
|
|
Time: 3.45s
|
|
================================================================================
|
|
```
|
|
|
|
## Architektur
|
|
|
|
### Komponenten
|
|
|
|
#### 1. **espocrm_api_client.py**
|
|
API-Client für EspoCRM REST API mit folgenden Features:
|
|
- CRUD-Operationen (Create, Read, Update, Delete)
|
|
- Relationship-Management (Link, Unlink)
|
|
- Fehlerbehandlung und Logging
|
|
|
|
#### 2. **e2e_tests.py**
|
|
Haupttest-Framework mit:
|
|
- `EntityTestBase`: Basis-Klasse für Entity-Tests
|
|
- Spezifische Test-Klassen für jede Entity
|
|
- `TestTracker`: Ergebnis-Tracking und Reporting
|
|
- Automatisches Cleanup
|
|
|
|
#### 3. **run_e2e_tests.sh**
|
|
Shell-Wrapper mit:
|
|
- Dependency-Checks
|
|
- Farbiger Ausgabe
|
|
- Exit-Code-Handling
|
|
|
|
## Erweiterung
|
|
|
|
### Neue Entity hinzufügen
|
|
|
|
1. Neue Test-Klasse erstellen:
|
|
|
|
```python
|
|
class CMyEntityTest(EntityTestBase):
|
|
def __init__(self, client: EspoCRMAPIClient, tracker: TestTracker):
|
|
super().__init__(client, tracker)
|
|
self.entity_type = 'CMyEntity'
|
|
|
|
def run_full_test(self) -> Optional[str]:
|
|
# Create
|
|
data = {
|
|
'name': f'Test Entity {datetime.now().strftime("%Y%m%d_%H%M%S")}',
|
|
# ... weitere Felder
|
|
}
|
|
|
|
record_id = self.test_create(data)
|
|
if not record_id:
|
|
return None
|
|
|
|
# Read
|
|
self.test_read(record_id)
|
|
|
|
# Update
|
|
self.test_update(record_id, {'field': 'new_value'})
|
|
|
|
return record_id
|
|
```
|
|
|
|
2. Test in `run_all_tests()` einbinden:
|
|
|
|
```python
|
|
print("\n🔷 Testing CMyEntity...")
|
|
myentity_test = CMyEntityTest(client, tracker)
|
|
myentity_id = myentity_test.run_full_test()
|
|
```
|
|
|
|
3. Cleanup-Order anpassen falls Dependencies bestehen
|
|
|
|
### Neue Relationships testen
|
|
|
|
```python
|
|
# Link testen
|
|
entity_test.test_link(
|
|
record_id='123',
|
|
link_name='relationshipName',
|
|
foreign_id='456'
|
|
)
|
|
|
|
# Unlink testen
|
|
entity_test.test_unlink(
|
|
record_id='123',
|
|
link_name='relationshipName',
|
|
foreign_id='456'
|
|
)
|
|
```
|
|
|
|
## Fehlerbehebung
|
|
|
|
### Connection Fehler
|
|
|
|
```
|
|
❌ Connection failed: HTTPError 401
|
|
```
|
|
→ API-Key oder Username prüfen
|
|
|
|
### Entity nicht gefunden
|
|
|
|
```
|
|
❌ API Error: POST https://crm.bitbylaw.com/api/v1/CMyEntity
|
|
Status: 404
|
|
```
|
|
→ Entity-Name prüfen (z.B. `CKndigung` statt `CKuendigung`)
|
|
|
|
### Relationship nicht gefunden
|
|
|
|
```
|
|
AssertionError: Link not found: xyz123
|
|
```
|
|
→ Relationship-Name und Richtung prüfen
|
|
|
|
## Best Practices
|
|
|
|
1. **Immer cleanup durchführen**: Tests hinterlassen keine Datenreste
|
|
2. **Eindeutige Namen**: Timestamps in Test-Daten-Namen
|
|
3. **Dependencies beachten**: Lösch-Reihenfolge ist wichtig
|
|
4. **Fehlerbehandlung**: Jeder Test ist isoliert
|
|
|
|
## Weitere Informationen
|
|
|
|
- [EspoCRM REST API Dokumentation](https://docs.espocrm.com/development/api/)
|
|
- [Projektübersicht](KI_OVERVIEW_README.md)
|
|
- [Validierungs-Tools](VALIDATION_TOOLS.md)
|
|
|
|
## Support
|
|
|
|
Bei Fragen oder Problemen:
|
|
1. Logs prüfen: Test-Ausgabe enthält detaillierte Fehlermeldungen
|
|
2. API-Dokumentation konsultieren
|
|
3. Entity-Definitionen in `custom/Espo/Custom/Resources/metadata/entityDefs/` prüfen
|