Locust — это инструмент тестирования производительности/нагрузки с открытым исходным кодом для HTTP и других протоколов. Его удобный для разработчиков подход позволяет определять тесты в обычном коде Python.
Тесты Locust можно запускать из командной строки или с помощью веб-интерфейса. Пропускную способность, время отклика и ошибки можно просматривать в режиме реального времени и/или экспортировать для последующего анализа.
Вы можете импортировать в свои тесты обычные библиотеки Python, а благодаря подключаемой архитектуре Locust их можно бесконечно расширять. В отличие от большинства других инструментов, ваш дизайн теста никогда не будет ограничен графическим интерфейсом или языком, специфичным для предметной области.
Чтобы сразу начать работу, перейдите к документации.
Если вы хотите, чтобы ваши пользователи запускали цикл, выполняли какое-то условное поведение или выполняли какие-то вычисления, вы просто используете обычные программные конструкции, предоставляемые Python. Locust запускает каждого пользователя внутри своего гринлета (облегченного процесса/сопрограммы). Это позволяет вам писать тесты как обычный (блокирующий) код Python вместо использования обратных вызовов или какого-либо другого механизма. Поскольку ваши сценарии — это «просто Python», вы можете использовать обычную IDE и контролировать версии своих тестов как обычный код (в отличие от некоторых других инструментов, использующих XML или двоичные форматы).
из импорта саранчи HttpUser, задача, между классом QuickstartUser(HttpUser):wait_time = Between(1, 2)def on_start(self):self.client.post("/login", json={"username":"foo", " пароль":"bar"})@taskdef hello_world(self):self.client.get("/hello")self.client.get("/world")@task(3)def view_item(self):для item_id в диапазоне(10):self.client. get(f"/item?id={item_id}", name="/item")
Locus упрощает запуск нагрузочных тестов, распределенных по нескольким машинам. Он основан на событиях (с использованием gevent), что позволяет одному процессу обрабатывать многие тысячи одновременных пользователей. Хотя могут существовать и другие инструменты, способные выполнять больше запросов в секунду на данном оборудовании, низкие накладные расходы каждого пользователя Locust делают его очень подходящим для тестирования высокопараллельных рабочих нагрузок.
Locust имеет удобный веб-интерфейс, который показывает ход вашего теста в режиме реального времени. Вы даже можете изменить нагрузку во время выполнения теста. Его также можно запустить без пользовательского интерфейса, что упрощает его использование для тестирования CI/CD.
Несмотря на то, что Locust в основном работает с веб-сайтами/сервисами, его можно использовать для тестирования практически любой системы или протокола. Просто напишите клиент для того, что вы хотите протестировать, или изучите клиент, созданный сообществом.
Кодовая база Locust намеренно сохранена небольшой и не решает все проблемы «из коробки». Вместо этого мы стараемся облегчить адаптацию к любой ситуации, с которой вы можете столкнуться, используя обычный код Python. Вам ничто не мешает:
Отправляйте данные отчетов в реальном времени в TimescaleDB и визуализируйте их в Grafana.
Оберните вызовы для обработки особенностей вашего REST API.
Используйте полностью пользовательскую форму/профиль нагрузки
...
Документация: docs.locust.io.
Поддержка/Вопросы: StackOverflow
Обсуждения на Github: Обсуждения на Github
Чат/обсуждение: Slack (регистрация)
Сопровождающий: Ларс Хольмберг
Пользовательский интерфейс: Эндрю Болдуин
Автор оригинала: Джонатан Хейман
Огромное спасибо всем нашим участникам
Открытый исходный код распространяется по лицензии MIT (подробности см. в файле LICENSE ).