Skip to content

Per verificare la capacità di carico del lavoro di un web server in genere si eseguono stress test.

Sappiamo tutti che un web server è composto da software (ad esempio Nginx, MySQL, PHP, …) e hardware (CPU, RAM, disco, scheda di rete, …) che utilizza il protocollo HTTP per rispondere alle richieste effettuate su Internet. La macchina è istruita per ricevere richieste HTTP dal web e rispondere, in genere, inviando pagine HTML.

lo stress test determina la quantità massima di lavoro che un server può gestire senza un peggioramento dei tempi di risposta e non viene mai eseguito in “condizioni regolari”, ma in condizioni estreme.

Cos’è uno stress test?

Uno stress test, da non confondere con il test di carico, è un benchmarking di un sito web per vedere come si comporta in situazioni critiche, ovvero con molte richieste. lo stess test del web server è un processo molto noto a chi si occupa di affidabilità e prestazioni.

Lo stress test è definito come il processo di verifica dell’hardware o del software per la sua stabilità in condizioni di carico pesante. Questo test viene eseguito per trovare il punto di rottura, cioè un valore numerico (in termini di numero di utenti e richieste del server ecc.) in cui il sistema si romperà.

Durante lo stress test, l’applicazione sottoposta a test (AUT) viene bombardata da un “carico pesante” per un determinato periodo di tempo per verificare il punto di rottura e per vedere come viene eseguita la gestione degli errori.

Testando il tuo web server, puoi individuare i colli di bottiglia delle prestazioni e migliorare la risposta e la capacità di carico del tuo server.

Sebbene la maggior parte dei siti web sia soggetta a livelli di traffico generalmente abbastanza regolari, potrebbero esserci occasioni in cui alcuni siti dovranno affrontare carichi pesanti. Esempi di questi includono negozi online o anche alcuni siti web governativi.

Se il tuo sito web ottiene un picco inaspettato nel numero di visitatori in un breve periodo, quanto sei attrezzato per gestirlo?

Ad esempio, un test può simulare un numero crescente di visitatori simultanei che atterrano sul tuo sito. Registrerà anche i tempi di risposta del web server e, più in generale, le sue capacità di fare fronte alle richieste crescenti.

Lo stress test è semplicemente una parte del test delle prestazioni. Va insieme ad altri test, come ad esempio il test di carico, spike test, test di resistenza, test di scalabilità e test di volume. Lo stress test verifica il limite di carico di un particolare web server.

Perché è utile eseguire uno stress test

Di seguito riporto alcuni motivi tecnici alla base dell’esecuzione di stress test:

  • Per verificare il comportamento del sistema in condizioni di carico anomalo o estremo.
  • Per trovare il valore numerico di utenti, richieste ecc., dopodiché il sistema potrebbe diventare instabile.
  • Per diagnosi e poter gestire l’errore mostrando i messaggi appropriati. Significa verificare se viene visualizzato un messaggio di errore corretto quando il sistema raggiunge il punto di interruzione, ovvero supera il numero di richieste consentite.
  • Per essere ben preparati a condizioni estreme e adottare misure precauzionali come la pulizia del codice, la pulizia del DB, ecc.
  • Per verificare la gestione dei dati prima che il sistema si interrompa, ad esempio per vedere se i dati sono stati eliminati, salvati o meno, ecc.
  • Per verificare la sicurezza in tali condizioni di rottura, ecc.
  • Verificare la capacità di carico con varie combinazioni di RAM, disco, processore e rete, ecc.
  • Verificare se il sistema funziona come previsto quando raggiunge il limite di chiamate HTTP gestibili.
  • Verificare come scala il tempo di risposta del web server all’aumentare delle richieste contemporanee.
  • Verifica le prestazioni dell’app o del sito web quando la rete è molto lenta, dovrebbe essere visualizzato un messaggio di errore appropriato per la condizione di “time-out”.
  • Verifica tutti i casi di test di cui sopra per un server su cui è in esecuzione più di un’applicazione per verificare se l’altra applicazione viene interessata.

Differenze tra stress test e test di carico

La principale differenza tra test di carico e stress test è che il test di carico viene eseguito in condizioni normali, mentre lo stress test valuta il comportamento del server in condizioni di carico di picco, spesso ben oltre le condizioni normali.

Test di caricoStress test
Il test di carico serve a testare il comportamento del sistema in condizioni di carico di lavoro normali e si limita a testare o simulare con il carico di lavoro effettivo.Lo stress test serve a testare il comportamento del sistema in condizioni estreme e viene eseguito fino al guasto del sistema.
Il test di carico non ha la finalità di interrompe il sistema.Lo stress test del sistema tenta di interrompere il sistema testando con carichi di lavoro crescenti.
Questo test viene eseguito per verificare le prestazioni del sistema sotto un carico previsto.Questo test viene eseguito per scoprire il punto di rottura del sistema.
Questo test viene eseguito per verificare il tempo di risposta del server per il carico specifico previsto.Questo test viene eseguito per verificare se il sistema si comporterà come previsto se il carico supera il limite normale.
La gestione degli errori non è testata a fondo.In questo test viene verificata anche la gestione degli errori.
Nessun test di questo tipo è obbligatorio.Questo verifica anche la presenza di minacce alla sicurezza, perdite di memoria, ecc.
Verifica l’affidabilità del sistema.Verifica la stabilità dei sistemi.
Il test viene effettuato con il numero massimo di utenti, richieste ecc.Il test viene eseguito con più del max. possibile numero di utenti e richieste HTTP.

Esempi di stress test

Esistono numerosi esempi di stress test, di seguito elenco i più comuni:

  • Inviare al web server un numero crescente di richieste HTTP su pagine differenti
  • Download simultaneo di file di grandi dimensioni dal server
  • Esecuzione di più applicazioni contemporaneamente su un server
  • Sottoporre il server a una grande quantità di traffico di posta elettronica
  • Scrittura e lettura simultanea di dati da e verso un disco

Come si esegue uno stress test

Il processo di stress test può essere eseguito in cinque fasi principali:

  • Pianificazione dello stress test. Qui raccogli i dati del sistema, analizzi il sistema, definisci gli obiettivi dello stress test
  • Creazione di script di automazione. In questa fase si creano gli script di automazione per le prove di stress, si generano i dati di prova per gli scenari di sollecitazione.
  • Esecuzione dello script. In questa fase, esegui gli script di automazione del test di stress e memorizzi i risultati dello stress.
  • Analisi dei risultati. In questa fase si analizzano i risultati dello stress test e si identificano i colli di bottiglia.
  • Ottimizzazione. In questa fase, metti a punto il sistema, modifica le configurazioni, ottimizza il codice con l’obiettivo di raggiungere il benchmark desiderato.

Infine, esegui nuovamente l’intero ciclo per determinare che le modifiche hanno prodotto i risultati desiderati. Ad esempio, non è raro dover eseguire da 3 a 4 cicli del processo di Stress Testing per raggiungere gli obiettivi di performance.

Strumenti utili

A seconda dello strumento con cui scegli di testare il tuo sito, ognuno può avere caratteristiche diverse. Il più semplice riguarderà semplicemente la simulazione di un carico sempre crescente e l’arresto quando il tuo sito si arresta in modo anomalo oppure smette di rispondere.

Altri strumenti possono essere in grado di generare un carico simulato che imita diversi comportamenti dell’utente, come eseguire query, modificare pagine o caricare altre funzioni. Alcuni strumenti sono in grado di tracciare flussi logici per ogni singolo scenario.

ServizioDescrizione
Loadview by Dotcom MonitorLoadview è una delle soluzioni più complete disponibili sul mercato e oggi si basa su un modello di servizio cloud. Ciò significa che qualsiasi tipo di simulazione di cui hai bisogno, paghi solo per il servizio: non ci sono investimenti in hardware o altro.
Per quanto riguarda le funzionalità, Loadview offre una soluzione molto complessa che può includere molti test differenti, da semplici test di carico HTTP a un sofisticato mix di tua scelta. È in grado di simulare variabili dinamiche e persino la diversità di geolocalizzazione nei suoi test.
K6 Cloud (formerly Load Impact)K6 è uno strumento di stress test open source basato su cloud e fornito come servizio premium. Una delle cose che rende interessante questo strumento è che ha un prezzo su un modello a uso variabile, il che significa che il costo di ingresso può essere relativamente basso a seconda delle tue esigenze. Tuttavia, è principalmente incentrato sullo sviluppatore. Oltre ai test di carico, K6 offre anche il monitoraggio delle prestazioni. Il suo lato di test di carico è focalizzato su carichi elevati e può gestire varie modalità come picchi, prove di stress e corse di resistenza.
Load NinjaLoad Ninja ti consente di eseguire test di carico con browser reali basati su script registrati e quindi aiuta ad analizzare i risultati delle prestazioni. Il suo utilizzo di browser reali su larga scala significa che questo strumento aiuta a ricreare un ambiente più realistico e il risultato finale per i test. I risultati possono essere analizzati in tempo reale e grazie ai pratici strumenti forniti dal sistema, il tempo di scripting può essere ridotto fino al 60%. È anche possibile testare le applicazioni interne, sia con IP fissi basati su proxy che con la propria gamma di IP dinamici (utilizzando una whitelist).
LoadRunner by Micro FocusLoadRunner è uno strumento premium ma con un account community gratuito entry-level supporta i test di 50 utenti virtuali. Tuttavia, se lo si ridimensiona a livelli elevati, il costo aumenta in modo esponenziale. Questa soluzione basata su cloud offre anche l’uso di un ambiente di sviluppo integrato per i test unitari. Supporta un’ampia gamma di ambienti applicativi, tra cui Web, Mobile, WebSockets, Citrix, Java, .NET e molti altri. Tieni presente che LoadRunner può essere piuttosto complesso e ha una curva di apprendimento ripida.
LoaderRispetto a quanto mostrato finora, Loader è uno strumento molto più semplice e basilare. Il suo piano gratuito supporta i test di carico con un massimo di 10.000 utenti virtuali, il che è sufficiente per la maggior parte dei siti web con traffico moderato.
Sfortunatamente dovrai disporre di un piano a pagamento per accedere a funzionalità aggiuntive come analisi avanzate, test simultanei e supporto prioritario. Tuttavia, è facile da usare poiché in pratica devi semplicemente aggiungere il tuo sito, specificare i parametri, quindi lanciare il test.
GatlingGatling è disponibile in due versioni, Open Source o Enterprise. Il primo ti consente di eseguire il test di carico come integrazione con la tua pipeline di sviluppo. Include sia un registratore web che un generatore di rapporti con il piano. La versione Enterprise ha implementazioni on-premise o, in alternativa, puoi optare per una versione Cloud basata su Amazon Web Services (AWS). Sebbene entrambe queste versioni siano ricche di funzionalità, la versione Enterprise supporta alcuni extra che non vengono forniti con la versione Open Source. Ad esempio, ha un’interfaccia di gestione più utilizzabile e supporta una gamma più ampia di integrazioni.
The GrinderGrinder è completamente open source ed è probabilmente l’unica opzione veramente gratuita in questo elenco. Tuttavia, deve essere eseguito localmente nel tuo ambiente di sviluppo e ha bisogno di alcuni extra come Java per funzionare. Tuttavia, essendo open source è stato ampiamente adottato e gli sviluppatori hanno creato un numero abbondante di plugin che lo estendono notevolmente in termini sia di usabilità che di funzionalità. Tuttavia, a meno che tu non sia uno sviluppatore o un utente esperto, The Grinder potrebbe essere complicato da usare.
Screaming FrogScreaming Frog è uno spider SEO che emula il comportamento dei bot dei motori di ricerca. Se hai un computer ben corazzato puoi eseguire lo spider con threads multipli e verificare status code ed i tempi di risposta del tuo web server. Con Screaming Frog non possiamo eseguire un vero e proprio stress test, quanto più un test di carico, in quanto il valore delle chiamate resta uguale durante il test. Tuttavia, in mancanza d’altro, può essere una valida alternativa a strumenti più specifici.

Analisi dei risultati

Monitorare le giuste metriche e KPI aiuta a valutare correttamente le prestazioni di un sistema. Le metriche comunemente utilizzate sono:

  • Misurazione della scalabilità e delle prestazioni all’aumentare delle richieste HTTP.
  • Pagine al secondo: misura quante pagine sono state richieste/secondo.
  • Throughput: Metrica di base – Dimensioni dei dati di risposta/secondo.
  • Round: numero di volte in cui sono stati pianificati scenari di test rispetto al numero di volte in cui un client è stato eseguito.
  • Risposta dell’applicazione: tempi di risposta.
  • Hit time: tempo medio per recuperare un’immagine o una pagina.
  • Time To First Byte: tempo necessario per restituire il primo byte di dati o informazioni.
  • Tempo pagina: il tempo è necessario per recuperare tutte le informazioni in una pagina.
  • Connessioni non riuscite: numero di connessioni non riuscite rifiutate dal client.
  • Time out: numero di richieste scadute.
  • Round falliti: numero di round in cui viene fallito il test.
  • Hit non riusciti: numero di tentativi falliti effettuati dal sistema (collegamenti interrotti o immagini non visualizzate).

Di seguito trovi un test eseguito con Screaming Frog lanciando 6 test con carico crescente: ho iniziato con 1 thread, poi 5, 10, 20, 50, 100 ed infine 200 (il massimo selezionabile).

Interessante notare come variano i tempi di risposta all’aumentare dei thread (i processi eseguiti in contemporanea dallo spider). Aumentando le richieste contemporanee da 1 a 200 il tempo medio di risposta sale da 0,02 secondi a 0,82 secondi. Con 200 richieste contemporanee il web server rimane stabile e non restituisce status code di errore.

Conclusione

Lo stress test del tuo sito web, applicazione, API o streaming multimediale è fondamentale per evitare guasti durante condizioni di traffico elevato, con potenziali conseguenze enormi, perdite di entrate e danni alla reputazione del marchio.

Lo stress test si concentra completamente sul test del sistema in condizioni di carico estremo per trovare il suo punto di rottura e vedere se vengono visualizzati messaggi appropriati quando il sistema non risponde. Sottopone a stress la memoria, il processore, il disco e tutto il sistema.

Lo stress test è un tipo di test non funzionale e di solito viene eseguito dopo il test funzionale. Quando è richiesto anche il test di carico, questo test può essere eseguito come caso estremo di test di carico. Il 90% delle volte, infatti, lo stesso strumento di automazione può essere utilizzato sia per le prove di carico che per stress test.

Spero che tu abbia acquisito una visione approfondita del concetto di stress test.

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’expertise di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1128 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Affidati alla nostra esperienza per fare la differenza.
Richiedi un preventivo

Non perderti altre guide, iscriviti per ricevere un avviso mensile con gli aggiornamenti del blog!

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.