Sobes.tech
Junior

Háblame sobre las pruebas de carga.

sobes.tech AI

Respuesta de la IA

Las pruebas de carga son un tipo de prueba que se enfoca en determinar el rendimiento, la estabilidad y la escalabilidad de una aplicación (sistema) bajo diferentes cargas.

Las tareas de las pruebas de carga:

  • Determinar la carga límite que puede soportar el sistema.
  • Identificar los cuellos de botella.
  • Evaluar el tiempo de respuesta del sistema bajo carga.
  • Verificar la estabilidad del sistema a largo plazo bajo carga.
  • Comprobar la escalabilidad del sistema.

Tipos de pruebas de carga:

  • Prueba de carga (Load Testing): Verificar el comportamiento del sistema bajo un nivel esperado (normal) de carga.
  • Prueba de estrés (Stress Testing): Verificar el sistema bajo una carga que excede la normal, hasta que ocurran fallos. El objetivo es determinar el límite de resistencia.
  • Prueba de resistencia/soak (Endurance/Soak Testing): Verificar la estabilidad del sistema con una carga media o alta durante un período prolongado, identificando fugas de memoria y degradación del rendimiento con el tiempo.
  • Prueba de picos de carga (Spike Testing): Verificar el comportamiento del sistema ante un aumento repentino y simultáneo de carga.
  • Prueba de escalabilidad (Scalability Testing): Evaluar la capacidad del sistema para manejar un volumen creciente de carga mediante escalado horizontal o vertical de recursos.
  • Prueba de volumen (Volume Testing): Verificar el comportamiento del sistema al aumentar el volumen de datos en bases de datos u otros almacenamientos.

Etapas de la prueba de carga:

  1. Definición de objetivos: Establecer métricas de rendimiento claras (tiempo de respuesta, capacidad de transferencia, errores) y criterios de éxito.
  2. Planificación y diseño de escenarios: Analizar escenarios de usuario, definir el perfil de carga (cantidad de usuarios virtuales, intensidad de solicitudes).
  3. Desarrollo de scripts de prueba: Crear scripts para simular acciones de usuarios usando herramientas de prueba de carga.
  4. Preparación del entorno de prueba: Configurar un entorno de prueba que simule el entorno de trabajo.
  5. Ejecución de pruebas: Ejecutar pruebas con diferentes cargas.
  6. Monitoreo y recopilación de datos: Recoger métricas de rendimiento del sistema, servidores, bases de datos.
  7. Análisis de resultados y reporte: Comparar resultados con métricas objetivo, identificar problemas, preparar informes.

Herramientas para pruebas de carga:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Ejemplo de un script simple de JMeter (Solicitud 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="Prueba de carga de ejemplo">
      <hashTree>
        <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grupo de Hilos">
          <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="Ejemplo de solicitud 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 en las pruebas 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

Las pruebas de carga ayudan a prevenir fallos en producción bajo alta carga y a garantizar un nivel aceptable de calidad para los usuarios finales.