🏠 | 💻 IT | Программирование Code | Python |

Нагрузочное тестирование на Python с помощью Locust

Содержание статьи
Введение
Установка
Добавить Locust в Pycharm
Пробный запуск
Опции запуска (--help)
Начало работы
Ошибки

Введение

В этом цикле статей вы узнаете как организовать нагрузочное тестирование на Python 3 с помощью библиотеки Locust.

Подразумевается, что вы работаете в Ubuntu Linux

У меня прописаны алиасы python - python3 и pip - pip3, поэтому я не пишу тройку в конце. Статья про это называется «Bash Python alias»

Установка

Активируйте ваше виртуальное окружение и установите locust командой

pip install locust

Изучите список установленных модулей

python3 -m pip list

Package Version ---------- --------- Package Version ---------------- --------- certifi 2020.6.20 chardet 3.0.4 click 7.1.2 ConfigArgParse 1.2.3 Flask 1.1.2 Flask-BasicAuth 0.2.0 gevent 20.9.0 geventhttpclient 1.4.4 greenlet 0.4.17 idna 2.10 itsdangerous 1.1.0 Jinja2 2.11.2 locust 1.3.1 MarkupSafe 1.1.1 msgpack 1.0.0 pip 20.2.3 psutil 5.7.3 pyzmq 19.0.2 requests 2.24.0 setuptools 50.3.1 six 1.15.0 urllib3 1.25.11 Werkzeug 1.0.1 wheel 0.35.1 zope.event 4.5.0 zope.interface 5.1.2

locust подтягивает за собой очень много, как видите, даже Flask уже здесь. Всё кроме pip, setuptools и wheel установилось вместе с locust.

Проверить куда установился locust в этом окружении можно командой

python -m pip show locust

Name: locust Version: 1.3.1 Summary: Developer friendly load testing framework Home-page: https://locust.io/ Author: None Author-email: None License: MIT Location: /home/andrei/python/virtualenvs/locust1_env/lib/python3.8/site-packages Requires: Flask-BasicAuth, msgpack, gevent, psutil, pyzmq, requests, ConfigArgParse, flask, geventhttpclient, Werkzeug Required-by:

Quick Start

Чтобы запустить простейший вариант создайте файл locustfile.py и скопируйте в него следюущий код ( источник )

import time from locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 2) @task def index_page(self): self.client.get("/hello") self.client.get("/world") @task(3) def view_item(self): for item_id in range(10): self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})

Перейдите в ту же директорию где лежит файл locustfile.py и запустите командой

locust

[2020-10-27 11:33:44,124] andrei-ubuntu/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces) [2020-10-27 11:33:44,133] andrei-ubuntu/INFO/locust.main: Starting Locust 1.3.1

Если locust жалуется:

[2020-10-27 11:33:16,969] andrei-ubuntu/WARNING/locust.main: System open file limit '1024' is below minimum setting '10000'. It's not high enough for load testing, and the OS didn't allow locust to increase it by itself. See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-number-of-open-files-limit for more info.

Прочитатйте решение здесь

Запуск теста

Ошибки

System open file limit '1024' is below minimum setting

Вы выполняете команду

locust

И получаете следующее предупреждение

[2020-10-27 10:36:12,176] andrei-ubuntu/WARNING/locust.main: System open file limit '1024' is below minimum setting '10000'. It's not high enough for load testing, and the OS didn't allow locust to increase it by itself. See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-number-of-open-files-limit for more info.

[2020-10-27 10:36:12,177] andrei-ubuntu/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces) [2020-10-27 10:36:12,194] andrei-ubuntu/INFO/locust.main: Starting Locust 1.3.1

Минимальное количество одновременно открытых файлов должно быть от 10 000. Иначе locust не может нормально работать

Проверить предел для вашей Linux можно командой

cat /proc/sys/fs/file-max

9223372036854775807

9223372036854775807 - это мой абсолютный потолок. Но нас интересуюте ограничения для сторонних программ

Изучить лимиты можно командой ulimit флаги -Hn для жёсткого лимита и -Sn для мягкого setrlimit

ulimit -Sn

1024

1024 это как раз то значение, на которое жаловалася locust

Поднимем лимит

ulimit -Sn 10001

ulimit -Sn

10001

locust

[2020-10-27 11:33:44,124] andrei-ubuntu/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces) [2020-10-27 11:33:44,133] andrei-ubuntu/INFO/locust.main: Starting Locust 1.3.1

locust: error: unrecognized arguments: --no-web

Вы пытаетесь запусть тест без UI и выполняете команду

locust -f locustfile.py --host=https://my-site.com --no-web -u 100 -r 10

И получаете следующее предупреждение

locust: error: unrecognized arguments: --no-web

Нужно заменить --no-web на --headless

Если остались вопросы - смело задавайте их в комментариях.

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: