Sobes.tech
Junior

Povedzte mi o záťažových testoch.

sobes.tech AI

Odpoveď od AI

Záťažové testovanie je druh testovania zameraný na určenie výkonu, stability a škálovateľnosti aplikácie (systému) pri rôznych zaťaženiach.

Úlohy záťažového testovania:

  • Určenie maximálnej záťaže, ktorú systém vydrží.
  • Identifikácia "úzkych miest" (bottleneckov).
  • Vyhodnotenie času odozvy systému pri zadanom zaťažení.
  • Kontrola stability systému v dlhodobom horizonte pri zaťažení.
  • Testovanie škálovateľnosti systému.

Druhy záťažového testovania:

  • Záťažové testovanie (Load Testing): Kontrola správania systému pri očakávanom (bežnom) úrovni zaťaženia.
  • Stress testing (Stress Testing): Kontrola systému pri zaťažení, ktoré presahuje bežné, do vzniku zlyhaní. Cieľ - určiť hranicu odolnosti.
  • Testovanie odolnosti / vytrvalosti (Endurance/Soak Testing): Kontrola stability systému pri dlhodobom pôsobení stredného alebo vysokého zaťaženia, odhalenie únikov pamäti, degradácie výkonu časom.
  • Testovanie špičkového zaťaženia (Spike Testing): Kontrola správania systému pri náhlom, okamžitom zvýšení zaťaženia.
  • Testovanie škálovateľnosti (Scalability Testing): Hodnotenie schopnosti systému spracovávať rastúci objem zaťaženia pomocou horizontálneho alebo vertikálneho škálovania zdrojov.
  • Testovanie objemu (Volume Testing): Kontrola správania systému pri raste objemu dát v databáze alebo iných úložiskách.

Fázy vykonávania záťažového testovania:

  1. Stanovenie cieľov: Jasné určenie metrík výkonu (doba odozvy, priepustnosť, počet chýb) a kritérií úspechu.
  2. Plánovanie a návrh scenárov: Analýza používateľských scenárov, určenie profilu zaťaženia (počet virtuálnych používateľov, intenzita požiadaviek).
  3. Vývoj testovacích skriptov: Písanie skriptov na simuláciu akcií používateľov s využitím nástrojov na záťažové testovanie.
  4. Príprava testovacieho prostredia: Nastavenie testovacieho prostredia, ktoré simuluje pracovné prostredie.
  5. Vykonanie testov: Spustenie testov s rôznym zaťažením.
  6. Monitorovanie a zber dát: Zber metrík výkonu systému, serverov, databáz.
  7. Analýza výsledkov a reportovanie: Porovnanie získaných výsledkov s cieľovými metrikami, odhalenie problémov, príprava správy.

Nástroje na záťažové testovanie:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Príklad jednoduchého skriptu JMeter (HTTP Request):

<?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="Príklad záťaže">
      <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 Request">
              <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>

Метрички, които се събират при натоварващо тестиране:

  • Време за реакция (Response Time)
  • Пропускателна способност (Throughput)
  • Брой грешки на секунда (Errors per Second)
  • Брой заявки на секунда (Requests per Second / Transactions per Second)
  • Използване на процесора (CPU Utilization)
  • Използване на памет (Memory Usage)
  • Активност на диска (Disk I/O)
  • Мрежова активност (Network I/O)
  • Метрики на базата данни (броя заявки, време за изпълнение на заявки)

Тестовете за натоварване помагат да се предотврати сривът на системата в продукция при високо натоварване и да се осигури приемливо ниво на качество за крайните потребители.