Нагрузочное тестирование 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 — это инструмент нагрузочного тестирования с открытым исходным кодом на основе Python, используемый ведущими компаниями, такими как Google, Microsoft и Riot Games, для тестирования своих API. В этой статье мы покажем, как загрузить тестовый API. 

В этом уроке я создам простой API с помощью Flask. Вы можете следовать за мной или просто создать свой API с помощью Node или любого другого удобного для вас фреймворка.

Требования

Python 3

Настройка и установка

Во-первых, вам нужно настроить виртуальную среду на своем ПК, чтобы не испортить глобальную среду Python. Для этого выполните следующие команды. Обратите внимание, что эти команды применяются к терминалу Windows.

проект $ mkdir

$ cd /d путь\к\проекту

$ python -m венв венв

$ венв\скрипты\активировать

 

Во-первых, мы создали Проект каталог. Затем мы изменили наш текущий каталог на Проект. Затем мы создали и активировали виртуальную среду для Python внутри этого каталога. 

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

 

Чтобы установить Flask, запустите. Убедитесь, что вы находитесь в Проект где вы создали виртуальную среду.

$ pip установить колбу

 

Чтобы установить Locust, запустите

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

 

Как только это будет сделано, введите следующие команды. Убедитесь, что вы находитесь в своем Проект каталог, когда вы делаете это.

$ скопировать нуль __init__.py

$ mkdir приложение

$ скопировать нулевое приложение\app.py

$ скопировать нулевое приложение\__init__.py

 

Эта команда создает некоторые файлы, которые мы будем использовать для создания наших конечных точек с помощью Flask. Кстати, вы также можете создавать эти файлы с помощью проводника. Но что в этом веселого? Как только вы это сделаете, скопируйте приведенный ниже код в app.py

из фляги импорт фляги, jsonify, запрос

app = Flask (__name__)

car_models = [

  { 'бренд': 'Tesla', 'модель': 'Model S' }

]

 

plane_models = [

  { 'марка': 'Боинг', 'модель': '747' }

]

 

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

защита get_cars():

  возврат jsonify(car_models)

@app.route('/самолеты')

защита get_planes():

  вернуть jsonify (plane_models)

если __name__ == '__main__':

    app.run (отладка = True)  

 

Приведенный выше код содержит метод get_cars используется для получения списка марок автомобилей и их моделей, и get_planes используется для получения списка марок самолетов и их моделей. Чтобы выполнить нагрузочное тестирование этой конечной точки, нам нужно запустить app.py. Для этого выполните приведенную ниже команду.

$ путь питона\к\app.py

Как только вы запустите это, вы должны увидеть что-то вроде этого:

Нагрузочное тестирование API 1

Если вы скопируете URL-адрес из терминала и наберете легковые автомобили or самолеты после / вы должны увидеть данные там. Однако наша цель — протестировать конечную точку с помощью саранчи, а не браузера. Итак, давайте сделаем это. Запустите следующую команду в корне вашего Проект каталог.

 

$ скопировать нулевое значение locust_test.py

 

Это создает файл «locust_test.py» в корне вашего Проект каталог. Сделав это, откройте файл и вставьте приведенный ниже код. Мы объясним это в ближайшее время.

 

время импорта

из саранчи импортировать HttpUser, задача, между

 

класс UserBehaviour (HttpUser):

    время_ожидания = между (5, 10)

 

    @задача

    защита get_cars (я):

        self.client.get('/cars')

    

    @задача

    защита get_planes (я):

        self.client.get('/самолеты')

 

Это базовый пример использования Locust для нагрузочного тестирования API. Сначала мы создаем класс поведение пользователя, которому можно дать любое подходящее имя, но оно должно расширять httpПользователь. HttpUser это класс, который заботится о создании экземпляров нескольких виртуальных пользователей для выполнения задач, которые мы указываем в поведение пользователя класса. 

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

Чтобы запустить код, убедитесь, что вы все еще находитесь в виртуальной среде. Если тот, который вы создали, используется сервером, обслуживающим API, откройте новый терминал, измените свой каталог на свой Проект каталог и активируйте созданную вами виртуальную среду. Вы можете найти команду для активации виртуальной среды выше. Теперь введите приведенную ниже команду в своем терминале.

 

$ саранча -f саранча_test.py

 

Вы должны увидеть что-то вроде этого:

Нагрузочное тестирование API 2

По умолчанию веб-интерфейс саранчи находится по адресу http://localhost/8089. Если вы посетите веб-сайт, вы должны увидеть такой интерфейс:

Нагрузочное тестирование API 3

Из интерфейса мы можем указать количество пользователей, скорость появления (количество пользователей, созданных в секунду) и хост. Вы можете получить адрес своего хоста, проверив терминал, на котором работает сервер. В нашем случае это порт 5000. При нажатии на Начинай роиться, вам будет представлен интерфейс ниже.

Нагрузочное тестирование API 4

Это показывает вам различные полезные показатели, такие как количество неудачных запросов, среднее время для запроса, минимальное время для запроса, количество запросов в секунду и так далее. Когда вы будете удовлетворены тем, что видите, вы можете нажать кнопку «Стоп». 


Кроме того, Показатели вкладка, есть Графики вкладка, которая показывает больше информация в виде графика, как на изображении ниже.

Eсть общее количество запросов в секунду график, график времени отклика, и график количества пользователей, все построено против времени. Используя графики, вы можете определить, сколько пользователей приемлемо для фиксированного времени отклика, или вы можете наблюдать за своими диаграммами для постоянного времени отклика, несмотря на увеличение числа пользователей, и другие подобные идеи. Если вы хотите поделиться этими Статистика с кем-то еще, вы можете скачать отчет с Загрузить данные меню.

Заключить...

Нагрузочное тестирование вашего API — важнейшее действие в процессе разработки, поэтому убедитесь, что оно включено в ваш цикл проектирования. Кстати, вы также можете проводить другие типы нагрузочных тестов, варьируя значения количества пользователей и скорости появления. 

Если вы хотите провести пиковый тест, укажите большое значение (скажем, 2000) для количества пользователей, а затем такое же большое значение для скорости появления (например, 500). Это означает, что за 4 секунды у вас будут созданы все 2000 пользователей, которые получат доступ к вашим конечным точкам. Стресс-тест будет аналогичным, но с гораздо более низким значением скорости появления. Чтобы узнать все, что вы можете сделать, проверьте Саранчу документации

Письма кобольдов: фишинговые атаки по электронной почте на основе HTML

Письма кобольдов: фишинговые атаки по электронной почте на основе HTML

Письма Кобольда: Фишинговые атаки по электронной почте на основе HTML 31 марта 2024 года компания Luta Security опубликовала статью, проливающую свет на новый сложный вектор фишинга — Письма Кобольда.

Подробнее »