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

На пути к достижению этого исключительного состояния вы должны каждый раз без каких-либо оправданий измерять производительность вашего продукта при различных нагрузках, прежде чем вводить какую-либо новую функцию. Теперь не имеет значения, являетесь ли вы разработчиком или QA, если вам нужно это сделать, вам понадобится инструмент, и есть прекрасный инструмент Python под названием Locust.

Подождите, а почему Locust? Это единственный инструмент для тестирования производительности и нагрузки? Если нет, то это лучший инструмент для этой цели?

Что ж, есть несколько популярных инструментов, среди которых JMeter. Этот инструмент довольно популярен в мире Java. Итак, теперь давайте сосредоточимся на «почему Locust»?

Самая первая причина в том, что вы, как и я, настоящий любитель Python. Помимо этой эмоциональной причины, есть еще несколько причин практического характера. Locust полностью основан на кодировании, нет графического интерфейса для написания тестов, что само по себе является большим преимуществом. У вас больше гибкости, лучший контроль, более быстрое обслуживание тестов, а также вы можете использовать систему контроля версий. К этому добавлю еще одно: саранча очень легкая. Так что у нас достаточно причин для выбора Locust.

Теперь совершенно очевидно, что для использования инструмента вам необходимо установить его в свою систему, если это не веб-инструмент. В случае Locust вам также необходимо установить его.

Locust можно установить с помощью pip:

$ pip install locustio

Отлично, в вашей системе установлен Locust!

Теперь, чтобы написать свой первый тест производительности, вам должно быть интересно, что это за файл? каким будет расширение типичного файла Locust. Что ж, вы должны быть счастливы услышать, что в этом нет ничего удивительного, и файл Locust - это не что иное, как простой файл Python (например, mylocustfile.py) с некоторыми предопределенными классами и атрибутами в нем.

Вот как может выглядеть ваш первый сценарий исполнения:

from locust import HttpLocust, TaskSet, task, between

class TestCases(TaskSet):
    def on_start(self):
        self.payload = {"email": "[email protected]", "password":123}
        self.login()

    def on_stop(self):
        self.logout()

    def login(self):
        self.client.post("/login", self.payload)

    def logout(self):
        self.client.post("/logout", self.payload)

    @task(2)
    def visit_count(self):
        self.client.get("/visit")

    @task(1)
    def profile(self):
        self.client.get("/profile")

class LocustUsers(HttpLocust):
    task_set = TestCases
    wait_time = between(5, 9)

Теперь давайте разберемся с каждым элементом этого скрипта.

HttpLocust:. Проще говоря, он предоставляет вам экземпляр HttpSession, с помощью которого вы сможете совершать Http-вызовы на свой сервер приложений.

TaskSet:. Каждый тест производительности (который в Locust называется задачами) собирается в этом классе TaskSet как атрибут, и Locust выполнит их все во время своей тестовой сессии. Вы можете понять это как набор тестов производительности.

задача:. По сути, это декоратор, который преобразует простой метод в метод тестирования производительности или тестовый пример при использовании в качестве декоратора. Другими словами, не все методы или определения в сценарии считаются тестовыми примерами или методами тестирования. В тот момент, когда вы добавляете декоратор @task над любым методом, он становится тестовым методом (как тестовый пример) для Locust. Иногда вы можете захотеть написать метод просто для повторного использования их в ваших тестах на саранчу. В этом случае вы не добавляете @task над своим методом, и этот метод не будет вызываться / выполняться в сеансе Locust, пока вы не вызовете их явно внутри любого тестового примера или тестового метода .

между: Это необязательно. Рассмотрим случай, когда у вас есть 10 задач в вашем скрипте, и вы хотите, чтобы Locust ждал определенное время между выполнением этих задач одну за другой, тогда вы можете использовать этот метод Locust. Требуется два аргумента, например between (2, 5), что означает, что Locust будет ждать случайное время от 2 до 5 секунд, но выбранное ожидание будет одинаковым на протяжении всего сеанса.

TestCases: необходимо определить класс, который будет наследовать класс TaskSet. Вы можете дать этому классу любое имя.

on_start (self): Этот метод предоставляется Locust, который будет выполнен до того, как будет запущена какая-либо последовательность задач. Вы увидите это также в отчете о тестировании производительности, как и любую другую задачу, но вам не нужно вызывать это явно как задачу.

on_stop (self): Опять же, это похоже на метод on_start по своей природе, но, как видно из названия, он будет вызываться и выполняться после завершения выполнения последовательности задач. например вы можете захотеть выйти из системы в конце каждого потока установки задачи.

LocustUsers: Когда вы закончите писать все свои задачи, вам нужно определить другой класс, подобный этому. Я определил класс под названием LocustUsers, но вы можете выбрать любое имя по своему усмотрению. Вы можете считать, что этот класс действует как настоящий пользователь, который будет выполнять все задачи одну за другой и воздействовать на ваш сервер приложений. Вы должны унаследовать класс HttpLocust, предоставленный самой Locust.

задача (1), задача (2): заметили эти числа внутри метода задачи? Смысл этих чисел в том, что задача (2) будет выполняться дважды при каждом выполнении задачи (1). Вы можете оставить этот номер в соответствии с вашими требованиями. Это дает вам возможность выполнять задачи так, как вы хотите.

Все готово и теперь можно приступить к выполнению этого сценария. Чтобы запустить сценарий тестирования производительности Locust, выполните эту команду:

locust -f mylocustfile.py -- host= https://www.example.com/

Учитывая, что в вашем скрипте нет синтаксических ошибок, в системной консоли вы увидите что-то вроде этого:

Теперь откройте любой браузер и перейдите по адресу http: // localhost: 8089. Вы увидите такую ​​страницу:

В этом пользовательском интерфейсе вы можете указать общее количество пользователей, которые будут постоянно использовать ваше приложение (Количество пользователей для моделирования), и количество пользователей, активируемых в секунду (Скорость вывода ). Например, если вы укажете количество пользователей для моделирования как 100, а скорость вывода - как 10, тогда все 100 пользователей будут активированы в течение 10 секунд. После того, как вы нажмете на Starts Swarming, вы должны увидеть такой интерфейс:

По завершении тестирования вы можете остановить сеанс, нажав кнопку Стоп в правом верхнем углу, а затем загрузить различные отчеты в формате CSV для дальнейшего анализа.

Удачного тестирования!