Sobes.tech
Junior

Ispričajte mi o testiranju opterećenja.

sobes.tech АИ

Одговор од АИ

Testiranje opterećenja je vrsta testiranja usmerena na određivanje performansi, stabilnosti i skalabilnosti aplikacije (sistema) pri različitim opterećenjima.

Zadaci testiranja opterećenja:

  • Određivanje maksimalnog opterećenja koje sistem može izdržati.
  • Identifikacija "uskih grla" (bottlenecks).
  • Procena vremena odziva sistema pri datom opterećenju.
  • Provera stabilnosti sistema na duži rok pod opterećenjem.
  • Testiranje skalabilnosti sistema.

Vrste testiranja opterećenja:

  • Testiranje opterećenja (Load Testing): Provera ponašanja sistema pri očekivanom (redovnom) nivou opterećenja.
  • Stress test (Stress Testing): Provera sistema pri opterećenju koje premašuje redovno, do pojave kvarova. Cilj - odrediti granicu izdržljivosti.
  • Testiranje izdržljivosti / trajnosti (Endurance/Soak Testing): Provera stabilnosti sistema pri dugotrajnom delovanju srednjeg ili visokog opterećenja, otkrivanje curenja memorije, degradacije performansi tokom vremena.
  • Testiranje vršnog opterećenja (Spike Testing): Provera ponašanja sistema pri naglom, trenutnom povećanju opterećenja.
  • Testiranje skalabilnosti (Scalability Testing): Procena sposobnosti sistema da obrađuje rastući obim opterećenja putem horizontalnog ili vertikalnog skaliranja resursa.
  • Testiranje volumena (Volume Testing): Provera ponašanja sistema pri rastu obima podataka u bazi ili drugim skladištima.

Faze sprovođenja testiranja opterećenja:

  1. Definisanje ciljeva: Jasno definisanje metrika performansi (vreme odziva, propusnost, broj grešaka) i kriterijuma uspeha.
  2. Planiranje i dizajn scenarija: Analiza korisničkih scenarija, određivanje profila opterećenja (broj virtuelnih korisnika, intenzitet zahteva).
  3. Razvoj test skripti: Pisanje skripti za simulaciju akcija korisnika korišćenjem alata za testiranje opterećenja.
  4. Priprema testnog okruženja: Podešavanje testnog okruženja koje simulira radno okruženje.
  5. Izvođenje testova: Pokretanje testova sa različitim opterećenjem.
  6. Monitoring i prikupljanje podataka: Prikupljanje metrika performansi sistema, servera, baza podataka.
  7. Analiza rezultata i izveštavanje: Upoređivanje dobijenih rezultata sa ciljnim metrima, identifikacija problema, priprema izveštaja.

Alati za testiranje opterećenja:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Primer jednostavnog skripta 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="Primer za opterećenje">
      <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 zahtev">
              <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)
  • Метрике базе података (број захтева, време извршења захтева)

Тестирање оптерећења помаже у спречавању квара система у продукцији при високим оптерећењима и обезбеђује прихватљив ниво квалитета за крајње кориснике.