maurocarlu's picture
add Locust load testing script and documentation for the Skill Classification API
9dabbe0
# Locust Load Testing - Skill Classification API
Questa directory contiene gli script per il load testing della Skill Classification API utilizzando [Locust](https://locust.io/).
## Prerequisiti
Assicurati di avere Python installato e installa Locust:
```bash
pip install locust
```
## Avvio del Test
### 1. Avvia Locust
Dalla directory `monitoring/locust/`, esegui:
```bash
locust -f locustfile.py
```
### 2. Accedi alla Web UI
Apri il browser e vai a: **http://localhost:8089**
### 3. Configura il Test
Nella Web UI, configura i seguenti parametri:
| Parametro | Descrizione | Valore di Default |
|-----------|-------------|-------------------|
| **Host** | URL dell'API da testare | `https://dacrow13-hopcroft-skill-classification.hf.space` |
| **Number of users** | Numero totale di utenti simulati | 5-10 (HF Spaces) / 10-100 (locale) |
| **Spawn rate** | Utenti da creare al secondo | 1-2 |
### 4. Avvia il Test
Clicca su **"Start swarming"** per avviare il test di carico.
## Ambienti di Test
Lo script è preconfigurato per testare l'API deployata su **HuggingFace Spaces**:
| Ambiente | URL | Note |
|----------|-----|------|
| **HuggingFace Spaces** (default) | `https://dacrow13-hopcroft-skill-classification.hf.space` | Produzione |
| Docker locale | `http://localhost:8080` | Sviluppo con Docker |
| Uvicorn locale | `http://localhost:8000` | Sviluppo senza Docker |
Per testare un ambiente diverso, usa il flag `--host`:
```bash
locust -f locustfile.py --host http://localhost:8080
```
## Task Implementati
Lo script simula il comportamento di utenti reali con i seguenti task:
| Task | Endpoint | Metodo | Peso | Descrizione |
|------|----------|--------|------|-------------|
| **Predizione Singola** | `/predict` | POST | 3 | Classifica un singolo issue text. Task principale, eseguito più frequentemente. |
| **Predizione Batch** | `/predict/batch` | POST | 1 | Classifica multipli issue text in una singola richiesta. |
| **Monitoraggio e Storia** | `/predictions`, `/health` | GET | 1 | Visualizza la cronologia delle predizioni e verifica lo stato del sistema. |
### Distribuzione dei Pesi
Con i pesi configurati (3:1:1), la distribuzione approssimativa delle richieste è:
- **60%** - Predizione Singola
- **20%** - Predizione Batch
- **20%** - Monitoraggio e Storia
### Tempo di Attesa
Ogni utente attende tra **1 e 5 secondi** tra un task e l'altro per simulare un comportamento realistico.
## Metriche Monitorate
Durante il test, Locust fornisce le seguenti metriche in tempo reale:
- **RPS (Requests Per Second)**: Numero di richieste al secondo
- **Response Time**: Tempo medio/mediano/percentili di risposta
- **Failure Rate**: Percentuale di richieste fallite
- **Active Users**: Numero di utenti attualmente attivi
## Opzioni Avanzate
### Esecuzione Headless (senza UI)
```bash
# Test su HuggingFace Spaces (default)
locust -f locustfile.py --headless -u 5 -r 1 -t 2m
# Test su Docker locale
locust -f locustfile.py --headless -u 50 -r 5 -t 5m --host http://localhost:8080
```
| Opzione | Descrizione |
|---------|-------------|
| `--headless` | Esegui senza Web UI |
| `-u 5` | 5 utenti simulati |
| `-r 1` | 1 utente creato al secondo |
| `-t 2m` | Durata del test: 2 minuti |
| `--host` | URL dell'API (override) |
### Esportazione Risultati
```bash
locust -f locustfile.py --headless -u 5 -r 1 -t 2m --csv=results
```
Questo creerà file CSV con i risultati del test.
## Struttura File
```
monitoring/locust/
├── locustfile.py # Script principale di load testing
└── README.md # Questa documentazione
```
## Note Importanti
- **HuggingFace Spaces**: Usa un numero ridotto di utenti (5-10) per non sovraccaricare il servizio gratuito
- **Latenza**: I test su HF Spaces avranno latenze maggiori rispetto ai test locali
- **Cold Start**: Il primo request potrebbe essere lento se lo Space è in sleep mode