Sobes.tech
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:

  1. Definizione degli obiettivi: Stabilire metriche di prestazione chiare (tempo di risposta, throughput, errori) e criteri di successo.
  2. Pianificazione e progettazione degli scenari: Analizzare gli scenari utente, definire il profilo di carico (numero di utenti virtuali, intensità delle richieste).
  3. Sviluppo degli script di test: Creare script per simulare le azioni degli utenti utilizzando strumenti di test di carico.
  4. Preparazione dell'ambiente di test: Configurare un ambiente di test che simuli quello di produzione.
  5. Esecuzione dei test: Eseguire i test con diverse condizioni di carico.
  6. Monitoraggio e raccolta dati: Raccogliere metriche di prestazione del sistema, server, database.
  7. 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.