Junior
Parlami dei test di carico.
sobes.tech AI
Risposta dell'AI
I test di carico sono un tipo di test volto a determinare le prestazioni, la stabilità e la scalabilità di un'applicazione (sistema) sotto diverse condizioni di carico.
Le attività dei test di carico:
- Determinare il carico limite che il sistema può sopportare.
- Identificare i colli di bottiglia.
- Valutare il tempo di risposta del sistema sotto carico.
- Verificare la stabilità del sistema a lungo termine sotto carico.
- Verificare la scalabilità del sistema.
Tipi di test di carico:
- Test di carico (Load Testing): Verificare il comportamento del sistema sotto un livello di carico previsto (normale).
- Test di stress (Stress Testing): Verificare il sistema sotto un carico superiore alla norma, fino al verificarsi di malfunzionamenti. L'obiettivo è determinare il limite di resistenza.
- Test di resistenza / assorbimento (Endurance/Soak Testing): Verificare la stabilità del sistema con un carico medio o elevato per un lungo periodo, identificando perdite di memoria e degradazione delle prestazioni nel tempo.
- Test di picco (Spike Testing): Verificare il comportamento del sistema in risposta a un aumento improvviso e massiccio del carico.
- Test di scalabilità (Scalability Testing): Valutare la capacità del sistema di gestire un volume di carico crescente attraverso scalabilità orizzontale o verticale delle risorse.
- Test di volume (Volume Testing): Verificare il comportamento del sistema con l'aumentare del volume di dati in database o altri sistemi di archiviazione.
Fasi del test di carico:
- Definizione degli obiettivi: Stabilire metriche di prestazione chiare (tempo di risposta, throughput, errori) e criteri di successo.
- Pianificazione e progettazione degli scenari: Analizzare gli scenari utente, definire il profilo di carico (numero di utenti virtuali, intensità delle richieste).
- Sviluppo degli script di test: Creare script per simulare le azioni degli utenti utilizzando strumenti di test di carico.
- Preparazione dell'ambiente di test: Configurare un ambiente di test che simuli quello di produzione.
- Esecuzione dei test: Eseguire i test con diverse condizioni di carico.
- Monitoraggio e raccolta dati: Raccogliere metriche di prestazione del sistema, server, database.
- Analisi dei risultati e report: Confrontare i risultati con le metriche obiettivo, identificare problemi, preparare report.
Strumenti per i test di carico:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Esempio di uno script semplice di JMeter (Richiesta HTTP):
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test di carico di esempio">
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Gruppo di Thread">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">10</intProp>
<longProp name="ThreadGroup.duration">60</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Esempio di richiesta HTTP">
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.embedded_url_report">true</boolProp>
<boolProp name="HTTPSampler.connect_timeout"></boolProp>
<boolProp name="HTTPSampler.response_timeout"></boolProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.comment"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.image_parser">true</stringProp>
<stringProp name="HTTPSampler.concurrentDwn">Both</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.implementation_status">OK</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<listProp name="HTTPSampler.HTTP_HEADERS"></listProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Métricas recopiladas durante los tests de carga:
- Tiempo de respuesta
- Capacidad de transferencia
- Número de errores por segundo
- Número de solicitudes por segundo
- Uso de CPU
- Uso de memoria
- Actividad del disco duro
- Actividad de red
- Métricas de bases de datos
Los tests de carga ayudan a prevenir fallos del sistema en producción bajo alta carga y a garantizar un nivel de calidad aceptable para los usuarios finales.