Sobes.tech
Junior

Papaskinkite apie apkrovos testavimą.

sobes.tech AI

Atsakymas iš AI

Krovinių testavimas — tai testavimo tipas, kuris skirtas nustatyti programėlės (sistemos) našumą, stabilumą ir mastelį įvairiose apkrovose.

Krovinių testavimo tikslai:

  • nustatyti sistemos ribinę apkrovą;
  • aptikti "siaurus" taškus (bottlenecks);
  • įvertinti sistemos atsako laiką nustatytoje apkrovoje;
  • patikrinti sistemos stabilumą ilgalaikėje perspektyvoje;
  • patikrinti sistemos mastelį:

Krovinių testavimo tipai:

  • Krovinių testavimas (Load Testing): patikrinti sistemos elgesį laukiamo (standartinio) apkrovos lygyje;
  • Streso testavimas (Stress Testing): patikrinti sistemą apkrovoje, viršijančioje įprastą, iki kol įvyksta gedimai. Tikslas - nustatyti atsparumo ribą;
  • Ištvermės/įsiurbimo testavimas (Endurance/Soak Testing): patikrinti sistemos stabilumą ilgalaikėje vidutinėje ar didelėje apkrovoje, aptikti atminties nutekėjimus, našumo mažėjimą laikui bėgant;
  • Piko apkrovos testavimas (Spike Testing): patikrinti sistemos elgesį staiga ir vienu metu padidėjus apkrovai;
  • Mastelio testavimas (Scalability Testing): įvertinti sistemos gebėjimą apdoroti augantį apkrovą horizontaliu ar vertikaliu išteklių mastelio keitimu;
  • Duomenų kiekio testavimas (Volume Testing): patikrinti sistemos elgesį didėjant duomenų kiekiui duomenų bazėje ar kituose saugyklose.

Veiklos etapai:

  1. Tikslų nustatymas: aiškiai apibrėžti našumo metrikas (atsako laiką, pralaidumą, klaidų skaičių) ir sėkmės kriterijus;
  2. Scenarijų planavimas ir projektavimas: analizuoti naudotojų scenarijus, nustatyti apkrovos profilį (virtualių naudotojų skaičių, užklausų intensyvumą);
  3. Testų scenarijų kūrimas: rašyti scenarijus naudodami apkrovos testavimo įrankius, imituoti naudotojų veiksmus;
  4. Testavimo aplinkos paruošimas: sukurti testavimo stendą, imituojantį darbo aplinką;
  5. Testų vykdymas: paleisti testus su skirtinga apkrova;
  6. Stebėsena ir duomenų rinkimas: rinkti sistemos, serverių, duomenų bazės metrikas;
  7. Rezultatų analizė ir ataskaitų rengimas: palyginti gautus rezultatus su tikslais, nustatyti problemas, parengti ataskaitą.

Krovinių testavimo įrankiai:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Pavyzdys — paprastas JMeter scenarijus (HTTP užklausa):

<?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="Krovinių testavimo pavyzdys">
      <hashTree>
        <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
          <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="HTTP užklausa pavyzdys">
              <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>

Krovinių testavimo metu surenkami metrikai:

  • Atsako laikas (Response Time)
  • Pralaidumas (Throughput)
  • Klaidų skaičius per sekundę (Errors per Second)
  • Užklausų skaičius per sekundę (Requests per Second / Transactions per Second)
  • CPU naudojimas (CPU Utilization)
  • Atminties naudojimas (Memory Usage)
  • Disko aktyvumas (Disk I/O)
  • Tinklo aktyvumas (Network I/O)
  • Duomenų bazės metrikos (užklausų skaičius, užklausų vykdymo laikas)

Krovinių testavimas padeda išvengti sistemos gedimų gamyboje didelės apkrovos metu ir užtikrinti priimtinos kokybės lygį naudotojams.