Рубрики
Без рубрики

Загрузка тестирования приложения Django с использованием locustio

Комплексное нагрузочное тестирование приложения Django с использованием Locustio. Tagged с Python, Django, Testing, Locustio.

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%.

Наблюдения:

  1. Большинство сбоев находятся в входе в систему. Некоторые из сбоев проистекают из того факта, что приложение предотвращает множественное вход из той же учетной записи в короткие сроки.

  2. Получить запрос на страницы имеет очень низкий уровень отказов – 3%

  3. Запросы на почту имеют более низкие показатели сбоев менее 2%

Мы можем выполнить несколько тестов для различных диапазонов пользователей, и с результатами теста его можно определить в соответствии с тем, сколько напряжения способно выполнять.

Результат дает следующие данные для тестов:

  1. Тип запросов – связанный с каждой задачей, которая должна быть смоделирована.

  2. Имя – Имя задачи/запроса.

  3. Количество запросов – общее количество запросов на задачу.

  4. Количество сбоев – общее количество неудачных запросов.

  5. Средний, средний, максимальный и мин запросов в миллисекундах.

  6. Размер контента – размер запросов данных.

  7. Запрос в секунду.

Мы можем увидеть детали неудачных запросов в вкладке сбоев, которые могут использоваться для неретинирования основной причины повторяющихся сбоев.

Locustio предоставляет возможность загружать результаты на листы, однако нет функции визуализации результатов в форме графиков или диаграмм.

Результаты тестов нагрузки можно просматривать в формате JSON в http://localhost: 8089/stats/requests Анкет Эти запросы могут использоваться в качестве входных данных для визуализации данных, используя различные инструменты, такие как Tableau, Matplotlib и т. Д.

Таким образом, мы можем определить производительность системы в разных конечных точках очень простым и эффективным способом. Мы можем расширить тесты, чтобы добавить больше сценариев для большего количества конечных точек и быстро получить ответы.

Статья первоначально появилась на Apcelent Tech Blog Анкет

Оригинал: “https://dev.to/apcelent/load-testing-a-django-application-using-locustio-1hd0”