Sobes.tech
Junior

Rääkige mulle koormustestidest.

sobes.tech AI

Vastus AI-lt

Laadestestimine — see on testitüüp, mille eesmärk on määrata rakenduse (süsteemi) jõudlus, stabiilsus ja skaleeritavus erinevate koormuste korral.

Laadestestimise eesmärgid:

  • määrata süsteemi piirkoormus;
  • tuvastada "kitsaskohti" (bottlenecks);
  • hinnata süsteemi reageerimisaega määratud koormuse korral;
  • kontrollida süsteemi stabiilsust pikaajaliselt;
  • kontrollida süsteemi skaleeritavust:

Laadestestimise tüübid:

  • Koormustest (Load Testing): kontrollida süsteemi käitumist oodatud (tavalise) koormuse tasemel;
  • Stressa-test (Stress Testing): kontrollida süsteemi üle normi oleva koormuse korral, kuni süsteem ebaõnnestub. Eesmärk - määrata vastupidavuse piir;
  • Püsivuse/õõtsumise test (Endurance/Soak Testing): kontrollida süsteemi stabiilsust pikaajalise keskmise või kõrge koormuse korral, avastada mälulekkeid, jõudluse langust aja jooksul;
  • Tippkoormuse test (Spike Testing): kontrollida süsteemi käitumist järsu ja ühe korraga suurenemise korral;
  • Skaleeritavuse test (Scalability Testing): hinnata süsteemi võimet töödelda kasvavat koormust horisontaal- või vertikaalresursside skaleerimise teel;
  • Andmemahtude test (Volume Testing): kontrollida süsteemi käitumist andmemahu suurenemisel andmebaasis või muudes salvestistes.

Tööetapid:

  1. Eesmärkide määratlemine: selgelt määratleda jõudlusmõõdikud (vastamise aeg, läbilaskevõime, vigade arv) ja kriteeriumid;
  2. Süžeeanalüüs ja kavandamine: analüüsida kasutajate stsenaariume, määrata koormusprofiil (virtuaalsete kasutajate arv, päringute intensiivsus);
  3. Testskriptide koostamine: kirjutada skriptid koormustestimise tööriistade abil, imiteerida kasutajate tegevusi;
  4. Testkeskkonna ettevalmistamine: luua testikeskkond, mis imiteerib töökeskkonda;
  5. Testide läbiviimine: erinevate koormustega testide käivitamine;
  6. Jälgimine ja andmete kogumine: koguda süsteemi, serverite, andmebaasi metrikuandmeid;
  7. Tulemuste analüüs ja aruandlus: võrrelda saadud tulemusi eesmärgimõõdikutega, tuvastada probleemid, koostada aruanne.

Koormustestimise tööriistad:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Näide — lihtne JMeter skript (HTTP-päring):

<?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="Koormustestimise näide">
      <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 päring näide">
              <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>

Koormustestimise ajal kogutavad metrikad:

  • Vastamise aeg (Response Time)
  • Läbivus (Throughput)
  • Kliendivigade arv sekundis (Errors per Second)
  • Päringute arv sekundis (Requests per Second / Transactions per Second)
  • CPU kasutus (CPU Utilization)
  • Mälu kasutus (Memory Usage)
  • Ketaste aktiivsus (Disk I/O)
  • Võrgu aktiivsus (Network I/O)
  • Andmebaasi metrikad (päringute arv, päringute täitmise aeg)

Koormustestimine aitab vältida süsteemi tõrkeid tootmiskeskkonnas suure koormuse ajal ning tagada kasutajatele vastuvõetava kvaliteeditaseme.