Cos'è lo STRESS Test nel test del software?

⚡ Riepilogo intelligente

Lo stress test spinge un'applicazione oltre i suoi normali limiti operativi per individuare il punto di rottura, verificare che i guasti vengano gestiti correttamente e dimostrare che il sistema si ripristina senza problemi una volta rimosso il carico estremo.

  • 🔘 Definizione: I test di stress misurano la robustezza e la gestione degli errori sotto un carico di gran lunga superiore al traffico di produzione.
  • ☑️ Obiettivo: Il test individua il punto esatto del guasto e verifica la possibilità di ripristino una volta che il carico torna alla normalità.
  • Scopo: Le varianti distribuita, applicativa, transazionale, sistemica ed esplorativa enfatizzano ciascuna un diverso livello del sistema.
  • 🧪 Processo: Pianificare, programmare, eseguire, analizzare e poi perfezionare: in genere, questo processo richiede tre o quattro cicli completi prima che gli obiettivi vengano raggiunti.
  • Tooling: LoadRunner, Apache JMeter, StressTester e NeoIl carico genera utenti virtuali simultanei e acquisisce i dati di risposta.
  • 📊 Metrica: Il risultato viene quantificato in termini di velocità di trasmissione, pagine al secondo, tempo di accesso, tempo di risposta al primo byte e connessioni fallite.

Test di stress nel collaudo del software

Cos'è lo stress test?

Test di stress Lo stress test è un tipo di test del software che verifica la stabilità e l'affidabilità di un'applicazione. L'obiettivo dello stress test è misurare la robustezza e la capacità di gestione degli errori del software in condizioni di carico estremamente elevato, garantendo che il software non si blocchi in situazioni critiche. Si tratta di testare deliberatamente il software oltre i normali punti di funzionamento e di valutarne il comportamento in condizioni estreme.

Durante un test di stress, l'applicazione in prova (AUT) viene sottoposta a stress per un breve periodo di tempo al fine di scoprirne la capacità di resistenza. L'utilizzo principale del test di stress consiste nel determinare il limite oltre il quale un sistema, un software o un hardware si guasta. Verifica inoltre se il sistema dimostra un'efficace gestione degli errori una volta superato tale limite.

In Software Engineering, Lo stress test è spesso elencato insieme Test di resistenzama i due differiscono: lo Stress Testing applica un carico insolitamente elevato in un breve intervallo per trovare il punto di rottura, mentre l'Endurance Testing (o test di resistenza) mantiene un carico moderato per ore per evidenziare il degrado graduale.

Lo screenshot qui sotto mostra un ampio blocco di dati copiato da una pagina web.

Copiare un blocco di dati molto grande da una pagina web per mettere sotto stress un'applicazione desktop

L'applicazione in fase di test viene messa sotto stress quando vengono copiati 5 GB di dati dal sito web e incollati in Blocco note. Blocco note è ora sotto stress e restituisce un messaggio di errore "Non risponde", esattamente come mostrato nella schermata successiva.

Blocco note mostra un messaggio di errore "Non risponde" dopo aver incollato 5 GB di dati.

Lo stesso principio si applica direttamente anche ai sistemi lato server.

Necessità di stress test

Consideriamo i seguenti esempi in tempo reale in cui l'utilizzo dello stress test risulta evidente:

  • Durante il periodo del festival, un negozio onlineping Il sito potrebbe registrare un picco di traffico o quando annuncia una promozione.
  • Quando un blog viene menzionato in un importante quotidiano, subisce un improvviso aumento del traffico.

È fondamentale eseguire test di stress per gestire picchi di traffico anomali di questo tipo. L'incapacità di gestire questo traffico improvviso può comportare una perdita di fatturato e danni alla reputazione.

I test di stress sono inoltre estremamente utili per i seguenti motivi:

  • Verifica se il sistema funziona in condizioni anomale.
  • Conferma che viene visualizzato un messaggio di errore appropriato quando il sistema è sotto stress.
  • Un guasto del sistema in condizioni estreme potrebbe comportare enormi perdite di fatturato.
  • È meglio prepararsi a condizioni estreme eseguendo in anticipo dei test di stress.

La sezione successiva illustra cosa deve dimostrare un test di stress efficace.

Obiettivi dello stress test

L'obiettivo dello stress test è analizzare il comportamento del sistema dopo un guasto. Affinché lo stress test abbia successo, il sistema deve visualizzare un messaggio di errore appropriato quando si trova in condizioni estreme.

Per condurre i test di stress, a volte vengono utilizzati set di dati di grandi dimensioni, e questi dati potrebbero andare persi durante un malfunzionamento del sistema. I tester devono assicurarsi che questi dati relativi alla sicurezza non vengano persi durante i test di stress.

Lo scopo principale dei test di stress è garantire che il sistema si riprenda dopo un guasto, una proprietà chiamata recuperabilità. Test di recupero quindi verifica nel dettaglio tale procedura di ripristino.

Test di carico vs. test di stress

Entrambe le tecniche appartengono alla Test di Performance Sono membri della stessa famiglia, quindi è facile confonderli. Il diagramma seguente mette a confronto i due profili di carico.

Grafico che confronta il profilo di carico costante del test di carico con il profilo di carico crescente del test di stress.

Caricare i test Test di stress
Caricare i test Verifica il comportamento del sistema in condizioni di carico di lavoro normali; simula il carico di lavoro effettivo previsto. Lo stress test verifica il comportamento del sistema in condizioni estreme e viene eseguito fino al cedimento del sistema.
I test di carico non interrompono il sistema. Lo stress test cerca deliberatamente di mandare in tilt il sistema sovraccaricandolo di dati o privandolo delle risorse necessarie.

I profili correlati includono Test delle punte (una breve e improvvisa esplosione), Test di volume (grandi quantità di dati piuttosto che molti utenti) e Test di scalabilità (margine di crescita).

Tipi di stress test

Di seguito vengono illustrate le diverse tipologie di stress test, una alla volta.

Test di stress distribuito

Nei sistemi client-server distribuiti, i test vengono eseguiti su tutti i client dal server. Il ruolo del server di stress è quello di distribuire un set di test di stress a tutti i client di stress e di track lo stato di ciascun client. Dopo che un client contatta il server, quest'ultimo aggiunge il nome del client e inizia a inviare dati per il test. La figura seguente mostra come il server di stress raggiunge alcuni client ma non altri.

Configurazione di test di stress distribuito in cui un server di stress raggiunge Client1 e Client2 ma perde il contatto con Client3 e Client4.

Nel frattempo, i computer client inviano un segnale, o heartbeat, per confermare di essere ancora connessi al server. Se il server non riceve alcun segnale da un computer client, è necessario esaminare ulteriormente quel computer per la risoluzione dei problemi. Nella figura, il server può connettersi con 2 client (Client1 e Client2), ma non può inviare o ricevere segnali da Client 3 e Client 4.

Per questi scenari di stress test, l'opzione migliore è un'esecuzione notturna. I grandi data center necessitano di un metodo più efficiente per individuare i computer che hanno subito guasti da stress che richiedono un'analisi più approfondita.

Test di stress dell'applicazione

Questo test si concentra sull'individuazione di difetti relativi al blocco e alla gestione dei dati, a problemi di rete e a colli di bottiglia prestazionali all'interno di una singola applicazione.

Test di stress transazionali

Esegue test di stress su una o più transazioni tra due o più applicazioni. Viene utilizzato per la messa a punto e l'ottimizzazione del sistema.

Test di stress sistemico

Si tratta di un test di stress integrato che può essere eseguito su più sistemi che condividono lo stesso server. Viene utilizzato per individuare difetti in cui un'applicazione blocca i dati di un'altra applicazione.

Test di stress esplorativi

Questo tipo di stress test viene utilizzato per testare il sistema con parametri o condizioni insolite, improbabili in uno scenario reale. Viene impiegato per individuare difetti in situazioni impreviste, come ad esempio:

  • Un gran numero di utenti ha effettuato l'accesso contemporaneamente.
  • Avvio simultaneo di un antivirus su tutti i computer.
  • Un database va offline mentre è in fase di accesso da un sito web.
  • Un grande volume di dati viene inserito simultaneamente nel database.

Indipendentemente dalla variante applicata, la sequenza di esecuzione rimane la stessa.

Come eseguire lo stress test?

Il processo di stress test si articola in 5 fasi principali:

  • Passaggio 1) Pianificazione dello stress test: Qui si raccolgono i dati di sistema, si analizza il sistema e si definiscono gli obiettivi del test di stress.
  • Passaggio 2) Creare script di automazione: In questa fase, si creano gli script di automazione per i test di stress e si generano i dati di test per gli scenari di stress.
  • Passaggio 3) Esecuzione dello script: In questa fase, si eseguono gli script di automazione per i test di stress e si memorizzano i risultati.
  • Passaggio 4) Analisi dei risultati: In questa fase, si analizzano i risultati dello stress test e si identificano i colli di bottiglia.
  • Fase 5) Messa a punto e ottimizzazione: In questa fase, si perfeziona il sistema, si modificano le configurazioni e si ottimizza il codice con l'obiettivo di raggiungere il benchmark desiderato.

Infine, si esegue nuovamente l'intero ciclo per determinare se le modifiche hanno prodotto i risultati desiderati. Ad esempio, non è insolito che siano necessari da 3 a 4 cicli del processo di Stress Testing prima che vengano raggiunti gli obiettivi di prestazioni, quindi gli script vengono normalmente mantenuti insieme al regressione on.

Strumenti consigliati per i test di stress

I quattro strumenti elencati di seguito coprono la maggior parte delle esigenze, dalle suite aziendali a un'opzione open-source gratuita.

LoadRunner

LoadRunner è uno strumento di test di carico ampiamente utilizzato, ora venduto da OpenText nelle edizioni Professional, Enterprise e Cloud dopo il passaggio da HP a Micro Focus OpenTextI risultati dei test di carico prodotti da LoadRunner vengono considerati come un parametro di riferimento.

JMeter

Apache JMeter è uno strumento di test open-source. È un puro Java applicazione per test di stress e di prestazioni, ed è destinata a coprire tipi di test come carico, funzionali e di stress. Versioni attuali 5.6.x di Apache JMeter richiedere Java 8 o successivo, con Java 17 consigliati.

Prova di sforzo

Questo strumento fornisce un'analisi approfondita delle prestazioni delle applicazioni web, presenta i risultati in formato grafico ed è semplice da usare. Non è richiesto alcuno scripting di alto livello, il che mantiene il ritorno sull'investimento atracadatto a team più piccoli.

NeoCaricare

NeoCaricare, ora parte del Tricentis portfolio, è uno strumento popolare per testare web e Applicazioni mobiliPuò simulare migliaia di utenti per valutare le prestazioni delle applicazioni sotto carico e analizzare i tempi di risposta. Supporta inoltre test di prestazioni, carico e stress integrati nel cloud ed è altamente scalabile.

Ulteriori opzioni sono elencate nella guida a strumenti di test delle prestazioniQualunque sia la scelta, il suo risultato avrà un significato solo se confrontato con le metriche riportate di seguito.

Metriche per lo stress test

Le metriche aiutano a valutare le prestazioni di un sistema e vengono generalmente analizzate al termine dello stress test. Le metriche comunemente utilizzate si suddividono in tre famiglie.

Misurazione della scalabilità e delle prestazioni

  • Pagine al secondo: Misura il numero di pagine richieste al secondo.
  • Throughput: Un parametro di base: la dimensione dei dati di risposta al secondo.
  • turni: Il numero di volte in cui sono stati pianificati gli scenari di test rispetto al numero di volte in cui un cliente li ha eseguiti.

Risposta alla domanda

  • Tempo di esecuzione: Tempo medio di recupero di un'immagine o di una pagina.
  • Tempo al primo byte: Tempo impiegato per restituire il primo byte di dati o informazioni.
  • Tempo di pagina: Tempo impiegato per recuperare tutte le informazioni presenti in una pagina.

fallimenti

  • Connessioni non riuscite: Numero di connessioni fallite rifiutate dal client (segnale debole).
  • Round falliti: Numero di round falliti.
  • Tentativi falliti: Numero di tentativi falliti dal sistema (link interrotti o immagini non visualizzate).

La sezione conclusiva elenca le situazioni che più spesso giustificano uno stress test.

Esempi di test di stress

I test di stress sono necessari ogni volta che si prevede che un evento spinga il traffico ben oltre i livelli di base giornalieri:

  • Un sito web di e-commerce che annuncia una svendita per le festività.
  • Un sito web di notizie al momento di un evento importante.
  • Un ente scolastico pubblica i risultati degli esami.
  • Siti di social network, blog e app per dispositivi mobili durante un momento virale.

In ogni caso, il test monitora risorse quali memoria, processore e rete, verifica che vengano visualizzati messaggi di errore appropriati sotto stress e conferma che il sistema torni alla normalità in seguito. Si inserisce nel Ciclo di vita del test del software come controllo non funzionale a fianco Test di sistema e l'insieme più ampio di tipi di test del software.

DOMANDE FREQUENTI

No. Il test di stress applica un carico insolitamente pesante per un breve periodo per individuare il punto di rottura. Immergere o prova di resistenza mantiene un carico di lavoro realistico per molte ore al fine di individuare perdite di memoria e un lento degrado.

Test delle punte Il test di stress sottopone il sistema a un picco improvviso e di brevissima durata, misurando la velocità con cui si adatta e si riprende. Il test di stress, invece, aumenta gradualmente il carico fino al cedimento, indicando quindi dove si trova il limite piuttosto che la velocità di reazione del sistema.

Eseguite questo test prima di ogni rilascio importante, prima di qualsiasi picco di traffico prevedibile, come ad esempio un giorno di saldi o la pubblicazione dei risultati, e dopo modifiche architetturali alla cache, al pool di connessioni o all'autoscaling. Molti team lo ripetono anche trimestralmente come controllo di base.

Utilizzate un ambiente di test dimensionato il più possibile simile a quello di produzione, compatibilmente con il budget disponibile, poiché un hardware sottodimensionato sposta il punto di rottura. Utilizzate dati mascherati o sintetici, corrispondenti al volume di produzione, e non eseguite mai stress test distruttivi su dati reali dei clienti.

I modelli di apprendimento automatico analizzano i dati di telemetria della produzione per creare profili realistici di traffico di picco, segnalare curve di tempo di risposta anomale che una soglia fissa non rileverebbe e correlare le metriche delle risorse per individuare il collo di bottiglia. Diverse piattaforme commerciali generano ora scenari di carico a partire dai modelli di utilizzo osservati.

Sì. Bozze del copilota JMeter Piani di test, script k6 o Gatling, generatori di dati parametrizzati e fasi della pipeline CI da un prompt in linguaggio naturale. Considera l'output come una prima bozza: tempi di riflessione, ritmo e asserzioni necessitano ancora di una convalida da parte di un tester.

Rivela il vero limite di capacità, dimostra la gestione degli errori e riduce il rischio di interruzioni durante i picchi. I limiti sono rappresentati dai costi (gli ambienti di produzione e le licenze sono costosi), dallo sforzo di scripting e dal fatto che i risultati cambiano ogni volta che l'infrastruttura si modifica.

Lo eseguono ingegneri delle prestazioni o tester specializzati, di solito con sviluppatori e personale operativo a disposizione per leggere le metriche del server. Si trova dopo la funzionalità test di sistema, una volta che la build è sufficientemente stabile, gli errori indicano limiti di capacità anziché bug.

Riassumi questo post con: