SlideShare a Scribd company logo
Нагрузочное тестирование
с помощью locust.io
Алексей Стрелков для MoscowDjango, 2015
Кто этот чувак
Помощь зала
7 комментариев!
7 комментариев!
(Три из них мои)
Существующие
инструменты
ApacheBench httpperf
Tsung
JMeter
The Grinder
Танк
тысячи их!
(на самом деле нет)
Анти-фича №1
GUI
для описания тестов
Анти-фича №2
Декларативность
Анти-фича №3
Дорогое
масштабирование
(не везде)
Фрустрация
Выход есть!
Locust
Создан, чтобы симулировать поведение
настоящих пользователей
Фича №1
Тесты описываются
на питоне
Пример
• API какого-нибудь media-ресурса
• /posts/ - все статьи
• /posts/{id} - отдельная статья
• /login - логин пользователя
Пример
$ pip install locustio
Создаем locustfile.py
from locust import HttpLocust, TaskSet, task



class UserBehavior(TaskSet):



@task()

def get_index(self):

self.client.get("/")
from locust import HttpLocust, TaskSet, task



class UserBehavior(TaskSet):



@task()

def get_index(self):

self.client.get("/")
@task()

def read_all_posts(self):

response = self.client.get("/posts")

posts = response.json().get('items')



for item in posts:

url= "/posts/{}".format(item['id'])

self.client.get(url)
self.wait()
from locust import HttpLocust, TaskSet, task



class UserBehavior(TaskSet):



@task(1)

def get_index(self):

self.client.get("/")
@task(2)

def read_all_posts(self):

response = self.client.get("/posts")

posts = response.json().get('items')



for item in posts:

url= "/posts/{}".format(item['id'])

self.client.get(url)
self.wait()
class UserBehavior(TaskSet): 

# <...>
class UserBehavior(TaskSet):

# <...>
def on_start(self):

""" вызывается при старте"""

self.login()
class UserBehavior(TaskSet): 

# <...>
def on_start(self):

""" вызывается при старте"""

self.login()
def login(self):

self.client.post("/login",
{"username":"King Fury",
"password":"90s_rule!!"}
)
class UserBehavior(TaskSet): 

# <...>
# <...>
class AndroidUser(HttpLocust):

task_set = UserBehavior

min_wait=5000

max_wait=9000
Фича №2
Простой и удобный
веб-интерфейс
Запускаем
$ locust --host http://pentagon.com
Фича №3
Хакáбельный
Хакабельность
• опенсорсный
• не только HTTP (например XML-RPC)
• реакция на события (успех, неудача)
• переопределение событий
Фича №4
Распределенный
и масштабируемый
--slave --master-host=192.168.1.10
--slave --master-host=192.168.1.10
> 2M пользователей
Дальше будет немного
методологической нудятины
(совсем чуть-чуть, но это важно)
Не просто тестируйте
конечные точки API
на прочность
Симулируйте поведение
пользователей!
Не просто тестируйте
конечные точки API
на прочность
RPS* ≠ успех
*requests per second
Успех должен определяться
временем ответа
и процентом ошибок
Бонус
Побочный эффект –
функциональные тесты!
(на самом деле MATS)
Сухой остаток
• Все тесты пишутся на питоне
• Удобный веб-интерфейс (можно не использовать)
• Все опенсорсное и хакабельное
• Легко масштабировать
• Вы сами определяете, что считать ошибкой
• Смоук-тесты нахаляву :3
Недостатки
• monkey-patching для записи статистики ramp-up
периода
• ловит не все ошибки (например из on_start() ), но
все есть в stdout
• интервалы между тасками равны интервалам
TaskSet.wait()
• мелкие баги (запуск с неправильным
протоколом)
Полезные ссылки
• locust.io – сайт Locust
• https://github.com/locustio/ - репозиторий
Locust
• getpure.org - Pure, уже на iOS, скоро Android
(записывайтесь в бета-тестеры!)
• theuntitled.net - присылайте ваш стартап на
рассмотрение (info@theuntitled.net)
Вопросы?
datagreed@gmail.com

More Related Content

What's hot

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Анализ указателей в программах с вызовами библиотечных функций
Анализ указателей в программах с вызовами библиотечных функцийАнализ указателей в программах с вызовами библиотечных функций
Анализ указателей в программах с вызовами библиотечных функций
Alex Markin
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Minsk Linux User Group
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
Python Meetup
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
7bits
 
Нескучное тестирование с pytest
Нескучное тестирование с pytestНескучное тестирование с pytest
Нескучное тестирование с pytest
Roman Imankulov
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Python Meetup
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
PyNSK
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть II
Python Meetup
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
PyNSK
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
Maxim Kulsha
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golang
DefconRussia
 

What's hot (12)

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Анализ указателей в программах с вызовами библиотечных функций
Анализ указателей в программах с вызовами библиотечных функцийАнализ указателей в программах с вызовами библиотечных функций
Анализ указателей в программах с вызовами библиотечных функций
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
 
Нескучное тестирование с pytest
Нескучное тестирование с pytestНескучное тестирование с pytest
Нескучное тестирование с pytest
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть II
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golang
 

Viewers also liked

Stack Overflow как повседневный инструмент разработчика
Stack Overflow как повседневный инструмент разработчикаStack Overflow как повседневный инструмент разработчика
Stack Overflow как повседневный инструмент разработчика
Grigory Petrov
 
Micro(Lightweight) Django
Micro(Lightweight) DjangoMicro(Lightweight) Django
Micro(Lightweight) Django
Grigory Petrov
 
Нагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.ioНагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.io
Alexey Strelkov
 
Как скачать статистику игроков World of Tanks за одну ночь
Как скачать статистику игроков World of Tanks за одну ночьКак скачать статистику игроков World of Tanks за одну ночь
Как скачать статистику игроков World of Tanks за одну ночь
Pavel Perestoronin
 
Управляемые набеги саранчи, или нагрузочное тестирование с Locust
Управляемые набеги саранчи, или нагрузочное тестирование с LocustУправляемые набеги саранчи, или нагрузочное тестирование с Locust
Управляемые набеги саранчи, или нагрузочное тестирование с Locust
Aleksey Derkach
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
Vladimir Rudnyh
 
SQL. Django, начало
SQL. Django, началоSQL. Django, начало
SQL. Django, началоpelid
 
Рефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на GoРефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на Go
Andrew Minkin
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
django+python + nginx + gunicorn
django+python + nginx + gunicorn django+python + nginx + gunicorn
django+python + nginx + gunicorn
hojung kang
 

Viewers also liked (10)

Stack Overflow как повседневный инструмент разработчика
Stack Overflow как повседневный инструмент разработчикаStack Overflow как повседневный инструмент разработчика
Stack Overflow как повседневный инструмент разработчика
 
Micro(Lightweight) Django
Micro(Lightweight) DjangoMicro(Lightweight) Django
Micro(Lightweight) Django
 
Нагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.ioНагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.io
 
Как скачать статистику игроков World of Tanks за одну ночь
Как скачать статистику игроков World of Tanks за одну ночьКак скачать статистику игроков World of Tanks за одну ночь
Как скачать статистику игроков World of Tanks за одну ночь
 
Управляемые набеги саранчи, или нагрузочное тестирование с Locust
Управляемые набеги саранчи, или нагрузочное тестирование с LocustУправляемые набеги саранчи, или нагрузочное тестирование с Locust
Управляемые набеги саранчи, или нагрузочное тестирование с Locust
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
SQL. Django, начало
SQL. Django, началоSQL. Django, начало
SQL. Django, начало
 
Рефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на GoРефакторинг монолита в микросервисы на Go
Рефакторинг монолита в микросервисы на Go
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
django+python + nginx + gunicorn
django+python + nginx + gunicorn django+python + nginx + gunicorn
django+python + nginx + gunicorn
 

Similar to Нагрузочное тестирование с помощью locust.io

Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Kirill Chebunin
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
Nikolay Samokhvalov
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
 
Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016
Sergey Soldatov
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
Andrey Bibichev
 
Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософия
Paul Klimov
 
Telegram Bot
Telegram BotTelegram Bot
Telegram Bot
Andrey Ivanov
 
Delegates and events in C#
Delegates and events in C#Delegates and events in C#
Delegates and events in C#
Mikhail Shcherbakov
 
Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...
Volodymyr Hotsyk
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
Anatoly Sharifulin
 
Разработка ПО. Введение в специальность 3. Требования
 Разработка ПО. Введение в специальность 3. Требования Разработка ПО. Введение в специальность 3. Требования
Разработка ПО. Введение в специальность 3. Требования
Pavel Egorov
 
ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)Anatoly Yumashev
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
SQALab
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
PyNSK
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin
 

Similar to Нагрузочное тестирование с помощью locust.io (20)

Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Ф'Yii'лософия
Ф'Yii'лософияФ'Yii'лософия
Ф'Yii'лософия
 
Telegram Bot
Telegram BotTelegram Bot
Telegram Bot
 
Delegates and events in C#
Delegates and events in C#Delegates and events in C#
Delegates and events in C#
 
Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
 
Разработка ПО. Введение в специальность 3. Требования
 Разработка ПО. Введение в специальность 3. Требования Разработка ПО. Введение в специальность 3. Требования
Разработка ПО. Введение в специальность 3. Требования
 
ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)ППП (Пишем Плагины Правильно)
ППП (Пишем Плагины Правильно)
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Invisible
InvisibleInvisible
Invisible
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 

Нагрузочное тестирование с помощью locust.io