Sobes.tech
Junior

дар бораи санҷиши боргирӣ гӯед.

sobes.tech AI

Ҷавоб аз AI

Тестування навантаження — це вид тестування, спрямований на визначення продуктивності, стабільності та масштабованості додатка (системи) при різних навантаженнях.

Задачі тестування навантаження:

  • Визначення максимальної навантаження, яку витримує система.
  • Виявлення "вузьких" місць (bottlenecks).
  • Оцінка часу відгуку системи при заданому навантаженні.
  • Перевірка стабільності роботи системи в довгостроковій перспективі під навантаженням.
  • Тестування масштабованості системи.

Види тестування навантаження:

  • Тестування навантаження (Load Testing): Перевірка поведінки системи при очікуваному (штатному) рівні навантаження.
  • Стрес-тестування (Stress Testing): Перевірка системи при навантаженні, що перевищує штатну, до виникнення збоїв. Мета - визначити межу міцності.
  • Тестування на витривалість / тривалість (Endurance/Soak Testing): Перевірка стабільності системи при тривалому впливі середнього або високого навантаження, виявлення витоків пам’яті, деградації продуктивності з часом.
  • Тестування пікової навантаження (Spike Testing): Перевірка поведінки системи при різкому, одночасному збільшенні навантаження.
  • Тестування масштабованості (Scalability Testing): Оцінка здатності системи обробляти зростаючий обсяг навантаження за рахунок горизонтального або вертикального масштабування ресурсів.
  • Тестування обсягу (Volume Testing): Перевірка поведінки системи при зростанні обсягу даних у базі даних або інших сховищах.

Етапи проведення тестування навантаження:

  1. Визначення цілей: Чітке визначення метрик продуктивності (час відгуку, пропускна здатність, кількість помилок) і критеріїв успішності.
  2. Планування та проектування сценаріїв: Аналіз користувацьких сценаріїв, визначення профілю навантаження (кількість віртуальних користувачів, інтенсивність запитів).
  3. Розробка тестових скриптів: Написання скриптів для імітації дій користувачів із використанням інструментів навантажувального тестування.
  4. Підготовка тестового середовища: Налаштування тестового стенду, що імітує робоче середовище.
  5. Виконання тестових прогонів: Запуск тестів з різним навантаженням.
  6. Моніторинг і збір даних: Збір метрик продуктивності системи, серверів, баз даних.
  7. Аналіз результатів і звітність: Порівняння отриманих результатів із цільовими метриками, виявлення проблем, підготовка звіту.

Інструменти для навантажувального тестування:

  • JMeter
  • LoadRunner
  • Gatling
  • k6
  • Locust

Приклад простого скрипта 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="Приклад навантаження">
      <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)
  • Метрики бази даних (кількість запитів, час виконання запитів)

Залежно від високого навантаження, навантажувальні тести допомагають запобігти збоїв системи у виробництві та забезпечити прийнятний рівень якості для кінцевих користувачів.