API testing: 16

 

 

1. Тестування продуктивності API

2. Метрики

3. k6

4. Jmeter Blazemeter

 

Тестування продуктивності API (Performance testing):

 

🕹️ навантажувальне тестування (Performance and Load testing) - автоматизоване тестування, імітуюче роботу певної кількості бізнес користувачів.

 

💀 стресове тестування (Stress testing) - перевіряє систему в умовах стресу, оцінює здатність системи до регенерації, тобто  повернення до нормального стану після завершення впливу стресу. Стрес у цьому контексті може бути підвищеною інтенсивністю виконання операцій до дуже високих значень або аварійних змін конфігурацій сервера.

 

🧑‍🏫 тестування стабільності або надійності (Stability / Reliability Testing) - це перевірка працездатності додатку при тривалому (багато часовому) тестуванні із середнім рівнем навантаження.

 

🛢️ об'ємне тестування (Volume Testing) - задачою об'ємного тестування є отримання оцінок ефективності та продуктивності роботи додатку при збільшенні обсягів даних у базі даних.

 

🪜 План для тестування продуктивності API:

  1. Визначення вимог до продуктивності:

    • Швидкість відповіді (наприклад, час, необхідний для обробки одного запиту).

    • Скільки та яких запитів API має обробляти за певний період часу.

    • Максимальна кількість одночасних користувачів або запитів.

  2. Вибір інструменту для тестування продуктивності

  3. Вибір виду та типу тестування

  4. Створення тестових сценаріїв:

    • Запити на різні кінцеві точки API.

    • Тестування з різними параметрами (параметри запиту, заголовки, тіла запиту - рандом, нова/стара аутентифікація).

    • Визначення максимальних значень навантаження для вашого API.

  5. Запуск тестів та моніторинг результатів:

    • Запуск тестів у контрольованому середовищі.

    • Вимірювання показників.

  6. Аналіз результатів:

    • Порівняння фактичної продуктивності з вимогами.

    • Визначення вузьких місць (наприклад, повільні кінцеві точки, великі затримки в обробці запитів).

    • Рекомендації щодо оптимізації API.

 

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

  • список тестованих операцій

  • інтенсивність виконання операцій

  • залежність зміни інтенсивності виконання операцій від часу

У список тестованих завдань повинні входити операції, критичні з точки зору бізнесу, а також з технічної точки зору:

Критичними з точки зору бізнесу є операції, швидкість виконання яких реально впливає на продуктивність бізнес-процесу. Наприклад, збільшення тривалості обслуговування клієнтів у банку, неможливість виконати необхідну кількість операцій протягом дня тощо.

Критичними з технічної точки зору є ресурсоємні операції, що потребують великої кількості пам'яті, серйозно навантажують процесор, створюють значний мережевий трафік. Як правило, це операції, що виконуються одночасно великою кількістю бізнес-користувачів, або створення складних звітів, до яких входять так звані "важкі" запити до бази даних.

Віртуальний користувач (Virtual User) — програмний процес, який циклічно виконує змодельовані операції.

 

Ітерація (Iteration) — це один повтор виконуваної в циклі операції.

 

Інтенсивність виконання операції (Operation Intensity) — частота виконання операції за одиницю часу, в тестовому скрипті задається інтервалом часу між ітераціями.

 

Навантаження (Loading) — сукупне виконання операцій на загальному ресурсі.

 

Продуктивність (Performance) — кількість виконуваних операцій за період часу. Може бути rps

 

Масштабованість додатку (Application Scalability) — пропорційне зростання продуктивності при збільшенні навантаження.

 

Профіль навантаження (Performance Profile) — це набір операцій з заданими інтенсивностями, отриманий на основі збору статистичних даних або визначений шляхом аналізу вимог до тестованої системи.

 

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

 

ТЕРМІНИ

Метрика

Опис

Latency (Час затримки)

Час, який проходить від моменту відправки запиту до отримання відповіді від сервера.

RPS (Запити за секунду)

Кількість запитів, які система може обробити за одну секунду.

TPS (Транзакції за секунду)

Кількість завершених транзакцій або бізнес-операцій за секунду.

Throughput (Пропускна здатність)

Кількість переданих даних за одиницю часу (наприклад, мегабайти на секунду).

Конверсія помилок (Error Rate)

Процент запитів, які призвели до помилок (наприклад, HTTP 4xx або 5xx).

Кількість активних користувачів (Active Users)

Кількість користувачів, які одночасно взаємодіють з системою.

CPU Usage (Використання процесора)

Процент процесорних ресурсів, що використовуються сервером.

Memory Usage (Використання пам'яті)

Кількість оперативної пам'яті, яку використовує система під час тестування.

Database Query Time (Час запиту до бази даних)

Час, який система витрачає на виконання запитів до бази даних.

Connection Time (Час з'єднання)

Час, необхідний для встановлення з'єднання між клієнтом і сервером.

Queue Time (Час у черзі)

Час, який запит проводить в черзі на обробку, перш ніж буде виконаний.

Uptime (Час безперервної роботи)

Перевірка на надійність системи і чи зберігається її стабільність під навантаженням.

 

Ресурси, які можуть бути використані для масштабування додатку, включають:

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

Пам'ять (RAM) — обсяг оперативної пам'яті, необхідної для зберігання даних під час обробки запитів. Збільшення пам'яті дозволяє обробляти більшу кількість одночасних користувачів або зберігати більші обсяги даних в оперативній пам'яті.

Місце на диску (Storage) — доступне місце для зберігання даних. Це можуть бути локальні диски або хмарне сховище. Для масштабування можуть бути додані додаткові сховища або використані більш швидкі технології для зберігання даних.

Мережеві ресурси (Network bandwidth) — пропускна здатність мережі для обміну даними між серверами або з користувачами. Для масштабування може бути збільшена пропускна здатність мережі або додані додаткові канали зв'язку.

Сервери та інфраструктура:

  • Вертикальне масштабування (Scale Up) — покращення потужностей існуючих серверів (збільшення кількості процесорів, пам'яті тощо).
  • Горизонтальне масштабування (Scale Out) — додавання нових серверів для розподілу навантаження між кількома машинами.
  • Бази даних — масштабування бази даних для обробки більшого обсягу запитів або даних, наприклад, за допомогою реплікації чи шардінгу.

Кешування — використання кеш-пам'яті (наприклад, Redis чи Memcached) для зменшення навантаження на базу даних і прискорення доступу до часто використовуваних даних.

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

 

Jmeter

Octoperf

Grafana k6

Copy of Copy of Lesson 14: CLI, Newman

By iravol

Copy of Copy of Lesson 14: CLI, Newman

  • 73