Навантажувальне тестування API за допомогою Locust

Навантажувальне тестування API за допомогою Locust

Навантажувальне тестування API за допомогою Locust: вступ

Ймовірно, ви були в такій ситуації раніше: ви пишете код, який щось робить, наприклад, кінцеву точку. Ви перевіряєте кінцеву точку за допомогою Postman або Insomnia, і все працює нормально. Ви передаєте кінцеву точку клієнтському розробнику, який потім використовує API і розгортає додаток. Але тоді API дає збій, коли користувачі використовують програму.

Це може бути дуже неприємною ситуацією, не кажучи вже про те, що це дорого для бізнесу. Ось чому розробники програмного забезпечення проводять різноманітні тести програмних систем, щоб переконатися, що вони працюють належним чином. API нічим не відрізняються. Перед розгортанням вам слід провести принаймні тести продуктивності та безпеки.

Тести продуктивності можна згрупувати в тести функціональності та тести навантаження. Тести функціональності – це те, для чого ви зазвичай використовуєте Postman або Insomnia. Вони гарантують, що ваш API функціонує так, як ви очікуєте. З іншого боку, навантажувальні тести більше стурбовані тим, як ваш API працює в умовах реального використання та пікового навантаження, і саме про це ця стаття. Розглянемо навантажувальні тести більш детально.

Що таке тестування навантаження API?

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

Навантажувальні тести API вимірюють такі показники, як час відповіді, кількість одночасних користувачів, швидкість пропускання, рівень використання ресурсів, середній час напрацювання на відмову (MTBF), середній час до відмови (MTTF) тощо. Усі ці показники можна використовувати, щоб визначити, наскільки добре працює API.

Види навантажувального тестування

Існує кілька типів навантажувального тестування, кожен зі своїми варіантами використання. Давайте поглянемо на деякі з них.

Тестування навантаження: Це основна форма тесту навантаження. Він використовується для оцінки продуктивності системи (у цьому випадку API) за нормального та очікуваного пікового навантаження.

Стрес-тестування: Це використовується для оцінки продуктивності системи під дуже великим навантаженням. Мета цього тесту — перевірити, чи відновлюється система після збою та скільки часу потрібно для цього. Зазвичай навантаження збільшується повільно, поки воно не перевищить можливості системи.

Спайк тестування: Це трохи схоже на стрес-тестування, за винятком того, що велике навантаження застосовується раптово, а не повільно його нарощує. Цей тип тесту показує, що відбувається, коли середня кількість користувачів або відвідувачів раптово зростає, або коли ваша система виконується DDOS-атакою.

Випробування на замочування: Цей тест не схожий на інші вище. Це навантажує вашу систему на 80% (або приблизно) від нормального та залишає її працювати протягом тривалого періоду, скажімо, від 12 до 14 годин. Цей вид перевірки визначає, наскільки надійна система з часом.

Навантажувальне тестування ваших API за допомогою Locust

Розробники мають доступ до різноманітних варіантів навантажувального тестування своїх API. Серед поширених інструментів тестування навантаження є Gatling, JMeter і Locust. У цій статті ми зосередимося на Locust.

Locust — це інструмент навантажувального тестування з відкритим вихідним кодом на основі Python, який використовують такі провідні компанії, як Google, Microsoft і Riot Games, для тестування своїх API. У цій статті ми продемонструємо, як завантажити тест API. 

Для цього підручника я створю простий API за допомогою Flask. Ви можете слідкувати за мною або просто створити свій API за допомогою Node або будь-якої іншої фреймворки, яка вам зручна.

Вимога

Python 3

Налаштування та встановлення

По-перше, вам потрібно налаштувати віртуальне середовище на вашому ПК, щоб не зіпсувати глобальне середовище Python. Для цього виконайте наступні команди. Зверніть увагу, що ці команди застосовуються до терміналу Windows.

$ проект mkdir

$ cd /d шлях\до\проекту

$ python -m venv venv

$ venv\Scripts\activate

 

Спочатку ми створили a проект каталог. Потім ми змінили наш поточний каталог на проект. Потім ми створили та активували віртуальне середовище для Python у цьому каталозі. 

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

 

Щоб встановити Flask, запустіть. Переконайтеся, що ви в проект де ви створили віртуальне середовище.

$ pip колба встановлення

 

Щоб встановити Locust, запустіть

$ pip встановити сарану

 

Після цього введіть наступні команди. Переконайтеся, що ви у своєму проект каталог, коли ви це зробите.

$ copy nul __init__.py

Додаток $ mkdir

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Ця команда створює деякі файли, які ми будемо використовувати для створення наших кінцевих точок за допомогою Flask. Ви також можете створити ці файли за допомогою файлового провідника. Але що в цьому цікавого? Зробивши це, скопіюйте наведений нижче код у app.py

з flask імпорт Flask, jsonify, запит

app = Flask(__name__)

моделі_автомобілів = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

моделі_площини = [

  { 'бренд': 'Боїнг', 'модель': '747' }

]

 

@app.route('/автомобілі')

def get_cars():

  повернути jsonify(car_models)

@app.route('/planes')

def get_planes():

  повернути jsonify(plane_models)

якщо __name__ == '__основна__':

    app.run(debug=True)  

 

Наведений вище код містить метод get_cars використовується для отримання списку марок автомобілів і їх моделей, а також get_planes використовується для отримання списку марок літаків та їх моделей. Щоб перевірити цю кінцеву точку, нам потрібно запустити app.py. Для цього виконайте наведену нижче команду.

$ python шлях\до\app.py

Після того як ви запустите це, ви повинні побачити щось на зразок цього:

Навантажувальне тестування API 1

Якщо ви скопіюєте URL-адресу з терміналу та введете автомобілів or літаки після /, ви зможете побачити там дані. Однак наша мета — перевірити кінцеву точку за допомогою locust, а не за допомогою браузера. Тож давайте зробимо це. Виконайте наступну команду в кореневій папці вашого проект каталог.

 

$ copy nul locust_test.py

 

Це створює файл «locust_test.py» у кореневому каталозі вашого проект каталог. Зробивши це, відкрийте файл і вставте наведений нижче код. Ми пояснимо це найближчим часом.

 

час імпорту

з locust import HttpUser, task, between

 

клас UserBehaviour(HttpUser):

    час_очікування = між (5, 10)

 

    @завдання

    def get_cars(self):

        self.client.get('/автомобілі')

    

    @завдання

    def get_planes(self):

        self.client.get('/planes')

 

Це базовий приклад використання Locust для навантажувального тестування API. Спочатку ми створюємо клас UserBehaviour, якому можна дати будь-яке відповідне ім’я, але воно повинно розширюватися HttpUser. HttpUser це клас, який піклується про створення кількох віртуальних користувачів для виконання завдань, які ми визначаємо в UserBehaviour клас. 

Завдання вказується шляхом прикрашання методу за допомогою @завдання декоратор. У нас також є функція під назвою між() що дозволяє нам вказати діапазон секунд очікування перед виконанням наступного завдання. Ви бачите, що в нашому коді ми призначили для цього діапазон від 5 до 10 секунд. 

Щоб запустити код, переконайтеся, що ви все ще перебуваєте у своєму віртуальному середовищі. Якщо той, який ви створили, використовується сервером, який обслуговує API, відкрийте новий термінал, змініть свій каталог на свій проект і активуйте створене вами віртуальне середовище. Ви можете знайти команду для активації віртуального середовища вище. Тепер введіть команду нижче у свій термінал.

 

$ locust -f locust_test.py

 

Ви повинні побачити щось на зразок цього:

Навантажувальне тестування API 2

За замовчуванням веб-інтерфейс locust розташований за адресою http://localhost/8089. Якщо ви відвідаєте веб-сайт, ви повинні побачити такий інтерфейс:

Навантажувальне тестування API 3

В інтерфейсі ми можемо вказати кількість користувачів, швидкість появи (кількість користувачів, створених за секунду) і хост. Ви можете отримати адресу свого хоста, перевіривши термінал, на якому працює сервер. У нашому випадку це порт 5000. Коли ви натискаєте на Почати роїтися, вам буде запропоновано інтерфейс нижче.

Навантажувальне тестування API 4

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


Крім того, Статистика вкладка, є a Чарти вкладка, яка показує більше інформація у вигляді графіка, як на зображенні нижче.

Існує графік загальної кількості запитів за секунду, графік часу відповіді, та графік кількості користувачів, все в залежності від часу. Використовуючи графіки, ви можете визначити, скільки користувачів прийнятно для фіксованого часу відповіді, або спостерігати за постійним часом відповіді на своїх діаграмах, незважаючи на збільшення кількості користувачів, і інші подібні дані. Якщо ви хочете поділитися ними статистика з кимось іншим, ви можете завантажити звіт із Завантажити дані Вкладка.

Щоб зробити висновок...

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

Якщо ви бажаєте провести тест на підвищення, вкажіть велике значення (скажімо, 2000) для кількості користувачів, а потім таке ж велике значення для вашої частоти появи (наприклад, 500). Це означає, що за 4 секунди у вас буде створено всі 2000 користувачів, які отримають доступ до ваших кінцевих точок. Стрес-тест буде аналогічним, але зі значно нижчим значенням для частоти появи. Щоб дізнатися все, що ви можете зробити, перегляньте Сарану документація