Sobes.tech
Junior

Vorbește-mi despre testarea de încărcare.

sobes.tech AI

Răspuns de la AI

Testarea de încărcare este un tip de testare care vizează determinarea performanței, stabilității și scalabilității unei aplicații (sistem) sub diferite niveluri de încărcare.

Obiectivele testării de încărcare:

  • Determinarea încărcării maxime pe care o poate suporta sistemul.
  • Identificarea punctelor slabe (bottlenecks).
  • Evaluarea timpului de răspuns al sistemului la o anumită încărcare.
  • Verificarea stabilității sistemului pe termen lung sub încărcare.
  • Testarea scalabilității sistemului.

Tipuri de testare de încărcare:

  • Test de încărcare (Load Testing): Testarea comportamentului sistemului la nivelul de încărcare așteptat (normal).
  • Test de stres (Stress Testing): Testarea sistemului la o încărcare care depășește nivelul normal, până la apariția eșecurilor. Scopul este de a determina limita de rezistență.
  • Test de rezistență/rezistență pe termen lung (Endurance/Soak Testing): Testarea stabilității sistemului sub o încărcare medie sau mare pe perioade lungi, identificarea scurgerilor de memorie, degradarea performanței în timp.
  • Test de vârf de încărcare (Spike Testing): Testarea comportamentului sistemului la o creștere bruscă și bruscă a încărcării.
  • Testarea scalabilității (Scalability Testing): Evaluarea capacității sistemului de a gestiona o volum de încărcare în creștere prin scalare orizontală sau verticală a resurselor.
  • Testarea volumului (Volume Testing): Testarea comportamentului sistemului pe măsură ce volumul de date crește.

Etapele de realizare a testării de încărcare:

  1. Stabilirea obiectivelor: Definirea metricalor de performanță (timp de răspuns, capacitate de transfer, număr de erori) și a criteriilor de succes.
  2. Planificarea și proiectarea scenariilor: Analiza scenariilor utilizatorilor, definirea profilului de încărcare (numărul de utilizatori virtuali, intensitatea solicitărilor).
  3. Dezvoltarea scripturilor de test: Scrierea scripturilor pentru simularea acțiunilor utilizatorilor folosind instrumente de testare a încărcării.
  4. Pregătirea mediului de testare: Configurarea mediului de testare care imită mediul de producție.
  5. Executarea testelor: Rularea testelor cu diferite niveluri de încărcare.
  6. Monitorizarea și colectarea datelor: Colectarea metricilor de performanță ale sistemului, serverelor, bazelor de date.
  7. Analiza rezultatelor și raportarea: Compararea rezultatelor cu obiectivele, identificarea problemelor, pregătirea raportului.

Instrumente pentru testarea de încărcare:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Exemplu de script simplu JMeter (Cerere 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 de încărcare pentru exemplu">
      <hashTree>
        <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grup de fire">
          <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="Cerere 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>

Metrice colectate în timpul load testing:

  • Timpul de răspuns
  • Throughput
  • Numărul de erori pe secundă
  • Numărul de solicitări pe secundă
  • Utilizarea CPU
  • Utilizarea memoriei
  • Activitatea discului
  • Activitatea rețelei
  • Metricele bazei de date

Load testing ajută la prevenirea defectării sistemului în producție sub sarcină mare și asigură un nivel acceptabil de calitate pentru utilizatorii finali.