Azure Load Testing – Testare il carico di lavoro delle Azure Web App

Azure Load Testing è un servizio cloud offerto da Microsoft Azure che consente agli sviluppatori e ai team IT di simulare carichi di lavoro pesanti sui loro sistemi per testare le prestazioni delle applicazioni. Questo strumento è progettato per aiutare le aziende a garantire che le loro applicazioni possano gestire picchi di traffico previsti senza compromettere la velocità o la disponibilità del servizio.

Con Azure Load Testing è possibile:

  • Generare carico di prova a livello mondiale: Il servizio consente di simulare utenti che accedono alle applicazioni da diverse località geografiche, fornendo una visione completa di come le prestazioni dell’applicazione possano variare in scenari di utilizzo reale.
  • Automatizzare i test di carico come parte del processo di CI/CD: Integra i test di carico nei processi di integrazione continua e distribuzione continua (CI/CD) per garantire che le prestazioni dell’applicazione vengano verificate automaticamente con ogni aggiornamento.
  • Analizzare i risultati dei test in dettaglio: Azure Load Testing fornisce dashboard e report dettagliati che aiutano ad identificare i colli di bottiglia delle prestazioni e le aree che richiedono ottimizzazioni. Questi dati possono aiutare i team a prendere decisioni informate sull’ottimizzazione delle prestazioni.

Il servizio supporta vari tipi di applicazioni, inclusi siti web, applicazioni web e servizi backend, rendendolo una soluzione versatile per un’ampia gamma di scenari di testing delle prestazioni. Inoltre, Azure Load Testing è integrato con altri servizi Azure, come Azure Monitor e Application Insights, offrendo una vista integrata delle prestazioni dell’applicazione e della diagnostica.

NOTA: Attualmente il servizio è in PREVIEW

Figura 1: Funzionamento di Azure Load Testing

Test con le Azure Web Apps

Quando decidete di utilizzare Azure Load Testing con le vostre Azure Web Apps avete la possibilità di simulare e analizzare come le vostre applicazioni aziendali si comportano sotto carichi di lavoro pesanti. Ecco come potete procedere:

  1. Preparazione dell’ambiente di test: Inizialmente dovete avere una Web App su Azure pronta per essere testata. Dopo averla configurata e messa online, è il momento di pensare al test di carico.
  2. Creazione dello scenario di test: Azure Load Testing vi consente di definire scenari di test che imitano vari comportamenti e volumi di utenti. Avete la possibilità di utilizzare script di test già pronti o crearne di nuovi, ad esempio con JMeter. Questi script descrivono le azioni degli utenti sulla vostra Web App, come l’accesso, la navigazione e l’interazione con le varie funzionalità.
  3. Configurazione del test: Dopo aver preparato lo scenario, potete configurare il vostro test di carico direttamente in Azure Load Testing. Qui, specificherete dettagli come la durata del test, il numero di utenti virtuali che volete simulare e le regioni da cui dovrebbero arrivare queste richieste. Questo passaggio è fondamentale per assicurarvi che il test simuli in modo realistico il traffico atteso sulla vostra applicazione.
  4. Avvio del test: Con la configurazione completata potete eseguire il test. Azure Load Testing si occuperà di generare il carico verso la vostra Web App e di raccogliere dati sulle prestazioni in tempo reale.
  5. Monitoraggio e valutazione: Durante e dopo il test, potete osservare le prestazioni della vostra applicazione attraverso i dashboard forniti da Azure Load Testing. Questi mostrano metriche importanti come i tempi di risposta, il throughput e la percentuale di errori. L’integrazione con strumenti come Azure Monitor e Application Insights vi permette inoltre di indagare più a fondo, identificando potenziali colli di bottiglia o aree di miglioramento.
  6. Ottimizzazione: Basandovi sui risultati ottenuti, potreste scoprire la necessità di apportare modifiche alla configurazione della vostra Web App, al codice dell’applicazione o all’infrastruttura su cui si basa, per migliorarne le prestazioni. Questo processo di test e ottimizzazione è essenziale per assicurare che la vostra applicazione aziendale possa gestire efficacemente il carico di utenti previsto.

Incorporando Azure Load Testing nel vostro flusso di lavoro, potete semplificare significativamente il processo di verifica delle prestazioni delle vostre applicazioni, garantendo così che siano pronte ad affrontare i picchi di traffico senza problemi, migliorando l’esperienza degli utenti e la stabilità del servizio offerto dalla vostra azienda.

Dal portale di Microsoft Azure selezionate la vostra Web App e cliccate sul nodo Load Testing (Preview). Come prima operazione sarà necessario creare una Load Testing resource.

Una risorsa di Load Testing in Azure Load Testing è essenzialmente un’entità all’interno del servizio Azure che rappresenta e gestisce l’ambiente di test di carico per le vostre applicazioni. Quando create una risorsa di Load Testing in Azure, state impostando uno spazio dedicato dove potete configurare, eseguire e monitorare i vostri test di carico. Questa risorsa serve come un contenitore per tutti gli elementi necessari per condurre i test di carico, inclusi gli script di test, le configurazioni del test, i risultati dei test e le metriche delle prestazioni.

Figura 2: Creazione di una Load Testing resource

Figura 3: Creazione di una Load Testing resource

Durante la creazione della Load Testing resource ho ricevuto l’errore Error occured while creating the resource ICTPowerLoadTest. The subscription is not registered to use namespace ‘Microsoft.LoadTestService’

Il motivo di questo errore è dovuto al fatto che nella mia sottoscrizione non era ancora stato registrato il resource provider corretto.
Un resource provider in Azure è un servizio che offre un insieme di risorse e operazioni per gestire queste risorse all’interno di Azure. Ogni provider di risorse offre supporto per un insieme specifico di servizi e funzionalità in Azure, come il calcolo, lo storage, il networking e le banche dati, tra gli altri. Ad esempio, il provider di risorse Microsoft.Compute offre macchine virtuali, set di scalabilità di macchine virtuali e altri servizi di calcolo, mentre Microsoft.Storage fornisce account di storage, spazi dei nomi per le code, e così via.

Figura 4: Errore per la mancata registrazione del resource provider in Azure

Ho quindi provveduto a registrare il Namespace Microsoft.LoadTestService richiesto all’interno della mia Sottoscrizione Azure. Nella figura sotto viene mostrato come effettuare la registrazione.

Figura 5: Registrazione del Namespace Microsoft.LoadTestService

Dopo circa un minuto il resource provider si è registrato.

Figura 6: Registrazione del Namespace Microsoft.LoadTestService completata con successo

Ho riprovato a ricreare le risorse e la creazione della Load Testing resource è stata completata senza intoppi.

Figura 7: Creazione della Load Testing resource completata

Creazione del Load test

Quando utilizzate Azure Load Testing per creare un test di carico direttamente dal portale Azure, specificando l’URL dell’applicazione web target e i parametri di base del test, il servizio esegue diverse operazioni sotto il cofano per facilitarvi il lavoro:

  1. Astrazione della creazione dello script di test: Normalmente, la preparazione di uno script di test di carico richiede una conoscenza approfondita degli strumenti di test, oltre a una comprensione delle interazioni utente che si desidera simulare. Azure Load Testing semplifica questo processo permettendovi di specificare soltanto l’URL dell’applicazione web e alcuni parametri di base del test, come il numero di utenti virtuali, la durata del test, ecc. Il servizio può quindi generare automaticamente uno script di test di carico che simula le interazioni utente con l’applicazione web.
  2. Provisioning dell’infrastruttura di calcolo: Eseguire un test di carico efficace richiede solitamente risorse di calcolo significative per generare un carico di traffico verso l’applicazione. Gestire manualmente queste risorse può essere oneroso e costoso. Azure Load Testing elimina questa complessità occupandosi automaticamente del provisioning dell’infrastruttura necessaria per eseguire il test di carico. Questo significa che non dovete preoccuparvi di configurare o gestire server, VM o container: Azure Load Testing gestisce tutto per voi, assicurandosi che ci sia abbastanza potenza di calcolo per generare il carico specificato.
  3. Esecuzione e monitoraggio del test: Dopo aver specificato i parametri del test e aver avviato il test di carico, Azure Load Testing esegue lo script di test contro l’URL dell’applicazione target, generando le interazioni utente simulate in base ai parametri definiti. Durante l’esecuzione del test, il servizio monitora le prestazioni dell’applicazione, raccogliendo dati importanti come i tempi di risposta, l’errore rate, il throughput, e altri indicatori di prestazione.
  4. Raccolta e analisi dei risultati: Alla conclusione del test, Azure Load Testing fornisce un report dettagliato dei risultati, che include metriche chiave e insights sulle prestazioni dell’applicazione sotto carico. Questo vi permette di analizzare facilmente i risultati per identificare colli di bottiglia, problemi di prestazione, e aree che potrebbero beneficiare di ottimizzazione.

Fate clic su Create Test per iniziare il wizard di creazione.

Figura 8: Creazione di un nuovo test

Inserite le informazioni richieste e gli URL da testare. Io ho aggiunto un paio di pagine, La Home Page ed una pagina del sito.

Figura 9: Configurazione degli URL da testare

In Azure Load Testing potete specificare metodi HTTP da utilizzare nei vostri test di carico. Quando create script di test o configurate scenari di test, avete la possibilità di definire le tipologie di richieste HTTP che volete inviare alla vostra applicazione web. Questo include i metodi HTTP standard come GET, POST, PUT, DELETE, PATCH e altri.

La scelta del metodo HTTP dipenderà dall’azione che desiderate simulare con il test di carico. Ad esempio:

  • GET: Utilizzato per richiedere dati da un’origine specificata. È il tipo di richiesta più comune nei test di carico per simulare utenti che accedono a pagine web o recuperano risorse senza modificare alcun dato sul server.
  • POST: Utilizzato per inviare dati al server per creare o aggiornare una risorsa. È comune nei test di carico che simulano l’invio di form, l’accesso degli utenti, o la creazione di nuovi record in un’applicazione.
  • PUT: Utilizzato per inviare dati al server per aggiornare/sovrascrivere una risorsa esistente. Può essere utilizzato nei test di carico per simulare la modifica di dati esistenti.
  • DELETE: Utilizzato per rimuovere risorse specificate. Nei test di carico, potreste utilizzare questo metodo per simulare azioni di cancellazione da parte degli utenti.
  • PATCH: Utilizzato per applicare modifiche parziali a una risorsa. È utile per test di carico che richiedono aggiornamenti specifici a dati esistenti senza sovrascriverli completamente.

Questo processo vi permette di simulare con precisione il comportamento degli utenti e il carico sulla vostra applicazione, testando come gestisce diverse tipologie di richieste HTTP, che è cruciale per ottimizzare le prestazioni e l’affidabilità delle vostre applicazioni web.

Figura 10: Configurazione degli URL da testare e scelta del metodo HTTP di test

Figura 11: Parametri scelti per il test

Nella scheda Load Configuration di Azure Load Testing dovete specificare i dettagli che definiscono come sarà generato il carico sul vostro sistema durante il test. Questi parametri influenzano direttamente l’intensità e la natura del carico di test, permettendovi di simulare scenari di utilizzo realistici per la vostra applicazione web. Ecco alcuni dei parametri che generalmente dovete configurare:

  • Numero di utenti virtuali: Questo parametro indica il numero totale di utenti virtuali (VUs) che genereranno carico sul vostro sistema simultaneamente. Un numero più alto simula un carico maggiore, come durante un picco di traffico.
  • Durata del test: Specifica quanto tempo durerà il test di carico. Può variare da pochi minuti a diverse ore, a seconda del vostro scenario di test specifico.
  • Pattern di carico: Definisce come varierà il numero di utenti virtuali nel tempo. Potete scegliere tra un carico costante, dove il numero di VUs rimane lo stesso per tutta la durata del test, o un carico variabile, che simula aumenti e diminuzioni nel numero di utenti. Questo aiuta a capire come l’applicazione risponde a variazioni di traffico.
  • Pausa tra le richieste: Definisce l’intervallo di tempo tra le richieste inviate da ciascun utente virtuale. Questo può aiutare a simulare un comportamento utente più realistico, dove ci sono pause naturali nell’interazione con l’applicazione.

Quando configurate la scheda Load Configuration è importante considerare lo scenario di utilizzo previsto per la vostra applicazione e quali condizioni di carico volete testare. Ad esempio, se prevedete picchi di traffico durante eventi specifici, potreste voler configurare un test che simula un aumento rapido e significativo nel numero di utenti. Oppure, se volete assicurarvi che la vostra applicazione possa gestire un carico costante nel tempo, potreste optare per un pattern di carico costante.

Adeguare accuratamente questi parametri alle vostre esigenze vi aiuterà a ottenere risultati di test più significativi e rappresentativi delle prestazioni reali della vostra applicazione sotto varie condizioni di carico.

Figura 12: Scheda Load Configuration del test

Figura 13: Schermata finale della creazione del Load Test

Appena le risorse saranno create (ci vogliono circa 3-4 minuti) verrete reindirizzati alla dashboard, dove verranno mostrati i risultati del test.

Figura 14: Provisioning delle risorse del Load Test

Figura 15: Esecuzione del Load Test

Dopo un paio di minuti nella dashboard cominceranno ad apparire i primi dati.

Alla fine del test di carico eseguito con Azure Load Testing la dashboard vi fornirà una serie di informazioni e metriche dettagliate riguardanti le prestazioni della vostra applicazione sotto carico. Queste informazioni sono cruciali per valutare come l’applicazione si comporta quando è sottoposta a stress e per identificare eventuali colli di bottiglia o aree che necessitano di ottimizzazione. Ecco cosa potete aspettarvi di trovare nella dashboard alla conclusione del test:

1. Riepilogo del Test

  • Una panoramica generale del test, comprese le informazioni base come la durata del test, il numero totale di utenti virtuali, la regione da cui è stato generato il carico, e altro.

2. Metriche delle Prestazioni

  • Dati chiave sulle prestazioni dell’applicazione durante il test, come:
    • Tempi di Risposta: La media, mediana, minima, e massima dei tempi di risposta, che indicano quanto rapidamente l’applicazione risponde alle richieste sotto carico.
    • Throughput: Il numero di richieste al secondo che l’applicazione è stata in grado di gestire, utile per valutare la capacità di elaborazione.
    • Errori: Il numero e i tipi di errori generati, che possono indicare problemi nell’elaborazione delle richieste o nella stabilità dell’applicazione.

3. Trend dei Tempi di Risposta

  • Grafici che mostrano come i tempi di risposta variano nel tempo durante il test, permettendovi di identificare come la prestazione cambia con l’aumentare del carico.

4. Distribuzione dei Tempi di Risposta

  • Analisi della distribuzione dei tempi di risposta, che può aiutarvi a capire la variabilità e la consistenza delle prestazioni dell’applicazione.

5. Utilizzo delle Risorse

  • Informazioni sull’utilizzo delle risorse, come CPU e memoria, per i componenti dell’applicazione testati. Questo vi aiuta a capire se le prestazioni sono limitate dalle risorse hardware disponibili.

6. Raccomandazioni e Insights

  • A seconda delle funzionalità offerte da Azure Load Testing al momento del vostro test, potreste trovare analisi e raccomandazioni generate automaticamente per aiutarvi a interpretare i risultati e a identificare le azioni da intraprendere.

7. Dettagli dei Test

  • Dettagli più specifici sulle singole richieste o transazioni, inclusi i tempi di risposta per specifici endpoint o servizi testati.

Figura 16: Esecuzione del test di Azure Load Testing

Conclusioni

Azure Load Testing emerge come uno strumento essenziale per le aziende che cercano di garantire prestazioni ottimali delle loro applicazioni web in scenari di carico realistici. Fornendo un processo semplificato per configurare e eseguire test di carico, Azure Load Testing aiuta a eliminare la complessità tradizionalmente associata a questa attività critica. Attraverso l’uso di parametri di configurazione intuitivi e la generazione automatica di script di test, le aziende possono rapidamente valutare come le loro applicazioni rispondono sotto stress, senza la necessità di una profonda esperienza tecnica in materia di testing delle prestazioni.

Dalla definizione del carico di test, inclusi il numero di utenti virtuali, la durata del test e i pattern di carico, fino alla scelta degli URL specifici da testare e dei metodi HTTP da utilizzare, Azure Load Testing fornisce una piattaforma completa per simulare l’accesso degli utenti in vari scenari. Questo consente alle aziende di identificare i colli di bottiglia, le problematiche di prestazione e le aree che richiedono ottimizzazioni, assicurando che le applicazioni possano gestire efficacemente il traffico utente previsto.

La dashboard di Azure Load Testing offre un’analisi dettagliata dei risultati del test, presentando metriche chiave come i tempi di risposta, il throughput, l’utilizzo delle risorse e le informazioni sugli errori in formati facilmente interpretabili. Queste informazioni sono fondamentali per comprendere le prestazioni dell’applicazione sotto carico e per guidare le decisioni di ottimizzazione. Inoltre, l’integrazione con altri servizi Azure permette una gestione e un monitoraggio efficaci delle prestazioni dell’applicazione, arricchendo ulteriormente l’insieme di strumenti a disposizione delle aziende per garantire la scalabilità e la resilienza delle loro soluzioni cloud.

Concludendo, Azure Load Testing rappresenta una risorsa preziosa per le aziende che puntano a migliorare continuamente le prestazioni delle loro applicazioni web. Riducendo le barriere tecniche e offrendo insights dettagliati sul comportamento delle applicazioni sotto vari carichi di lavoro, Azure Load Testing consente alle aziende di affrontare proattivamente le sfide legate alle prestazioni, migliorando così l’esperienza degli utenti finali e sostenendo la crescita aziendale in un ambiente digitale sempre più competitivo.