Django Framework, используемая для приложений для удушья веб -приложений быстро и эффективно. По мере увеличения размера приложения общая проблема, с которой сталкиваются все команды, – это производительность приложения. Измерение производительности и анализа. Области улучшения являются ключом к предоставлению качественного продукта.
Locustio , инструмент с открытым исходным кодом, написанный на Python, используется для нагрузочное тестирование веб -приложений. Это просто и легко использовать с веб -интерфейсом для просмотра результатов теста. Он масштабируется и может быть распределен по нескольким машинах.
Эта статья демонстрирует пример для использования саранчи для нагрузочного тестирования нашего веб -приложения Django.
Перед началом тестирования нагрузки мы должны определить страницы, которые мы хотим протестировать. В нашем случае мы ожидаем, что пользователи будут следить за сценарием, в котором они входят в систему, посещают разные страницы и отправляют защищенные формы CSRF.
Locustio помогает нам подражать пользователям, выполняющим эти задачи в нашем веб -приложении. Основная идея измерения производительности заключается в том, чтобы сделать количество запросов на различные задачи и анализ успеха и неудачи этих запросов.
Установка
pip install locustio
Locustio поддерживает только Python 2.x. В настоящее время нет поддержки Python 3.x.
Файл саранчи
Файл Locust создан для моделирования действий пользователей веб -приложений.
from locust import HttpLocust, TaskSet, task class UserActions(TaskSet): def on_start(self): self.login() def login(self) # login to the application response = self.client.get('/accounts/login/') csrftoken = response.cookies['csrftoken'] self.client.post('/accounts/login/', {'username': 'username', 'password': 'password'}, headers={'X-CSRFToken': csrftoken}) @task(1) def index(self): self.client.get('/') for i in range(4): @task(2) def first_page(self): self.client.get('/list_page/') @task(3) def get_second_page(self): self.client.('/create_page/', {'name': 'first_obj'}, headers={'X-CSRFToken': csrftoken}) @task(4) def add_advertiser_api(self): auth_response = self.client.post('/auth/login/', {'username': 'suser', 'password': 'asdf1234'}) auth_token = json.loads(auth_response.text)['token'] jwt_auth_token = 'jwt '+auth_token now = datetime.datetime.now() current_datetime_string = now.strftime("%B %d, %Y") adv_name = 'locust_adv' data = {'name', current_datetime_string} adv_api_response = requests.post('http://127.0.0.1:8000/api/advertiser/', data, headers={'Authorization': jwt_auth_token}) class ApplicationUser(HttpLocust): task_set = UserActions min_wait = 0 max_wait = 0
В приведенном выше примере файл Locust определяет набор из 4 задач, выполняемых пользователем – перейдите на домашнюю страницу после входа в систему, посещение страницы списка несколько раз и отправляя форму один раз.
Параметры, min_wait и max_wait, определите время ожидания между различными запросами пользователя.
Запустить саранчу
Перейдите к каталогу locustfile.py и запустите.
locust --host=
Где URL -адрес приложения?
Экземпляр саранчи работает локально по адресу http://127.0.0.1:8089
Когда начинается новый тест, Locust Web UI предлагает ввести количество пользователей для моделирования и курса люка (количество пользователей в секунду).
Сначала мы пытаемся моделировать 5 пользователей с частотой люка 1 пользователя в секунду и наблюдаем за результатами.
После начала теста Locustio выполняет все задачи и результаты успеха/сбоя запросов записаны. Эти результаты отображаются в формате, показанном ниже:
Как видно из примера выше, есть один запрос в систему и несколько запросов, чтобы получить страницу и отправить форму. Поскольку количество пользователей меньше, нет аварийного переключения.
Теперь давайте увеличим количество запросов до 1000 пользователей с скоростью люка 500 и увидим результаты.
Как мы можем, некоторые из запросов на получение домашней страницы и публикации формы не сбои в этом сценарии по мере увеличения количества пользователей и запросов. Благодаря текущему набору моделируемых пользователей мы получаем отказа 7%.
Наблюдения:
Большинство сбоев находятся в входе в систему. Некоторые из сбоев проистекают из того факта, что приложение предотвращает множественное вход из той же учетной записи в короткие сроки.
Получить запрос на страницы имеет очень низкий уровень отказов – 3%
Запросы на почту имеют более низкие показатели сбоев менее 2%
Мы можем выполнить несколько тестов для различных диапазонов пользователей, и с результатами теста его можно определить в соответствии с тем, сколько напряжения способно выполнять.
Результат дает следующие данные для тестов:
Тип запросов – связанный с каждой задачей, которая должна быть смоделирована.
Имя – Имя задачи/запроса.
Количество запросов – общее количество запросов на задачу.
Количество сбоев – общее количество неудачных запросов.
Средний, средний, максимальный и мин запросов в миллисекундах.
Размер контента – размер запросов данных.
Запрос в секунду.
Мы можем увидеть детали неудачных запросов в вкладке сбоев, которые могут использоваться для неретинирования основной причины повторяющихся сбоев.
Locustio предоставляет возможность загружать результаты на листы, однако нет функции визуализации результатов в форме графиков или диаграмм.
Результаты тестов нагрузки можно просматривать в формате JSON в http://localhost: 8089/stats/requests Анкет Эти запросы могут использоваться в качестве входных данных для визуализации данных, используя различные инструменты, такие как Tableau, Matplotlib и т. Д.
Таким образом, мы можем определить производительность системы в разных конечных точках очень простым и эффективным способом. Мы можем расширить тесты, чтобы добавить больше сценариев для большего количества конечных точек и быстро получить ответы.
Статья первоначально появилась на Apcelent Tech Blog Анкет
Оригинал: “https://dev.to/apcelent/load-testing-a-django-application-using-locustio-1hd0”