Sobes.tech
Junior

Povězte mi o zátěžových testech.

sobes.tech AI

Odpověď od AI

Zátěžové testování je druh testování zaměřený na stanovení výkonu, stability a škálovatelnosti aplikace (systému) při různých zátěžích.

Úkoly zátěžového testování:

  • Určení maximální zátěže, kterou systém vydrží.
  • Identifikace "úzkých míst" (bottlenecků).
  • Vyhodnocení doby odezvy systému při dané zátěži.
  • Kontrola stability systému v dlouhodobém horizontu při zátěži.
  • Testování škálovatelnosti systému.

Druhy zátěžového testování:

  • Zátěžové testování (Load Testing): Kontrola chování systému při očekávané (běžné) úrovni zátěže.
  • Stress testing (Stress Testing): Kontrola systému při zátěži přesahující běžnou, do vzniku selhání. Cíl - určit mezní odolnost.
  • Testování odolnosti / vytrvalosti (Endurance/Soak Testing): Kontrola stability systému při dlouhodobém působení střední nebo vysoké zátěže, odhalení úniků paměti, degradace výkonu v čase.
  • Testování špičkové zátěže (Spike Testing): Kontrola chování systému při náhlém, okamžitém zvýšení zátěže.
  • Testování škálovatelnosti (Scalability Testing): Hodnocení schopnosti systému zpracovávat rostoucí objem zátěže pomocí horizontálního nebo vertikálního škálování zdrojů.
  • Testování objemu (Volume Testing): Kontrola chování systému při růstu objemu dat v databázi nebo jiných úložištích.

Fáze provádění zátěžového testování:

  1. Stanovení cílů: Jasné určení metrik výkonu (doba odezvy, propustnost, počet chyb) a kritérií úspěšnosti.
  2. Plánování a návrh scénářů: Analýza uživatelských scénářů, určení profilu zátěže (počet virtuálních uživatelů, intenzita požadavků).
  3. Vývoj testovacích skriptů: Psání skriptů pro simulaci akcí uživatelů s využitím nástrojů zátěžového testování.
  4. Příprava testovacího prostředí: Nastavení testovacího prostředí, které simuluje pracovní prostředí.
  5. Provedení testovacích běhů: Spuštění testů s různou zátěží.
  6. Monitorování a sběr dat: Sběr metrik výkonu systému, serverů, databází.
  7. Analýza výsledků a reportování: Porovnání získaných výsledků s cílovými metrikami, odhalení problémů, příprava zprávy.

Nástroje pro zátěžové testování:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Pří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="Zátěžový test pro příklad">
      <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="Příklad HTTP požadavku">
              <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>

Metriky shromažďované při zátěžovém testování:

  • Doba odezvy (Response Time)
  • Propustnost (Throughput)
  • Počet chyb za sekundu (Errors per Second)
  • Počet požadavků za sekundu (Requests per Second / Transactions per Second)
  • Využití CPU (CPU Utilization)
  • Využití paměti (Memory Usage)
  • Aktivita pevného disku (Disk I/O)
  • Síťová aktivita (Network I/O)
  • Metriky databáze (počet požadavků, doba vykonání požadavků)

Zátěžové testování pomáhá předejít selhání systému v produkci při vysoké zátěži a zajistit přijatelnou úroveň kvality pro koncové uživatele.