| # 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 | |