Sobes.tech
Junior

Pastāstiet man par slodzes testiem.

sobes.tech AI

Atbilde no AI

Slodzes testēšana — tas ir testēšanas veids, kas vērsts uz programmas (sistēmas) veiktspējas, stabilitātes un mērogojamības noteikšanu dažādās slodzēs.

Slodzes testēšanas mērķi:

  • noteikt sistēmas robežslodzi;
  • identificēt "šaurās" vietas (bottlenecks);
  • novērtēt sistēmas reakcijas laiku noteiktā slodzē;
  • pārbaudīt sistēmas stabilitāti ilgtermiņā;
  • pārbaudīt sistēmas mērogojamību:

Slodzes testēšanas veidi:

  • Slodzes testēšana (Load Testing): pārbaudīt sistēmas uzvedību gaidītā (standarta) slodzes līmenī;
  • Stresa testēšana (Stress Testing): pārbaudīt sistēmu slodzē, kas pārsniedz normālo, līdz sistēma sabojājas. Mērķis - noteikt izturības robežu;
  • Noturības/uzsūkšanas testēšana (Endurance/Soak Testing): pārbaudīt sistēmas stabilitāti ilgstošā vidējā vai augstā slodzē, atklāt atmiņas noplūdes, veiktspējas samazināšanos laika gaitā;
  • Pīķa slodzes testēšana (Spike Testing): pārbaudīt sistēmas uzvedību straujas, vienlaicīgas slodzes pieauguma laikā;
  • Mērogojamības testēšana (Scalability Testing): novērtēt sistēmas spēju apstrādāt pieaugošo slodzi, izmantojot horizontālo vai vertikālo resursu mērogošanu;
  • Datu apjoma testēšana (Volume Testing): pārbaudīt sistēmas uzvedību, palielinot datu apjomu datu bāzē vai citās glabātuvēs.

Darba posmi:

  1. Mērķu noteikšana: skaidri definēt veiktspējas metriku (atbildes laiks, caurlaidspēja, kļūdu skaits) un kritērijus;
  2. Scenāriju plānošana un izstrāde: analizēt lietotāju scenārijus, noteikt slodzes profilu (viltus lietotāju skaitu, pieprasījumu intensitāti);
  3. Testu skriptu izstrāde: rakstīt skriptus, izmantojot slodzes testēšanas rīkus, imitēt lietotāju darbības;
  4. Testēšanas vides sagatavošana: izveidot testēšanas stendu, kas imitē darba vidi;
  5. Testu izpilde: veikt testus ar dažādām slodzēm;
  6. Uzraudzība un datu vākšana: vākt sistēmas, serveru, datu bāzes metriku datus;
  7. Rezultātu analīze un ziņojumu sagatavošana: salīdzināt iegūtos rezultātus ar mērķa metriku, identificēt problēmas, sagatavot ziņojumu.

Slodzes testēšanas rīki:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Piemērs — vienkāršs JMeter skripts (HTTP pieprasījums):

<?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="Slodzes testēšanas piemērs">
      <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 pieprasījuma piemērs">
              <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>

Slodzes testēšanas laikā iegūtās metriku datus:

  • Atbildes laiks (Response Time)
  • Caurlaidspēja (Throughput)
  • Kļūdu skaits uz sekundes (Errors per Second)
  • Pieprasījumu skaits uz sekundes (Requests per Second / Transactions per Second)
  • CPU lietojums (CPU Utilization)
  • Atmiņas izmantošana (Memory Usage)
  • Diska aktivitāte (Disk I/O)
  • Tīkla aktivitāte (Network I/O)
  • Datu bāzes metriku dati (pieprasījumu skaits, izpildes laiks)

Slodzes testēšana palīdz novērst sistēmas kļūdas ražošanas vidē augstas slodzes laikā un nodrošina pieņemamu kvalitātes līmeni lietotājiem.