Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Нагрузочное тестирование
с помощью 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...
from locust import HttpLocust, TaskSet, task



class UserBehavior(TaskSet):



@task()

def get_index(self):

self.client...
from locust import HttpLocust, TaskSet, task



class UserBehavior(TaskSet):



@task(1)

def get_index(self):

self.clien...
class UserBehavior(TaskSet): 

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

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

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

self.login()
class UserBehavior(TaskSet): 

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

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

self.login()
def login(self):

s...
class UserBehavior(TaskSet): 

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

task_set = UserBehavior

min_wait=5000

max...
Фича №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)
Сухой остаток
• Все тесты пишутся на питоне
• Удобный веб-интерфейс (можно не использовать)
• Все опенсорсное и хакабельно...
Недостатки
• monkey-patching для записи статистики ramp-up
периода
• ловит не все ошибки (например из on_start() ), но
все...
Полезные ссылки
• locust.io – сайт Locust
• https://github.com/locustio/ - репозиторий
Locust
• getpure.org - Pure, уже на...
Вопросы?
datagreed@gmail.com
Нагрузочное тестирование с помощью locust.io
Нагрузочное тестирование с помощью locust.io
Sie haben dieses Dokument abgeschlossen.
Lade die Datei herunter und lese sie offline.
Nächste SlideShare
Stack Overflow как повседневный инструмент разработчика
Weiter
Nächste SlideShare
Stack Overflow как повседневный инструмент разработчика
Weiter
Herunterladen, um offline zu lesen und im Vollbildmodus anzuzeigen.

Teilen

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

Herunterladen, um offline zu lesen

На примере дейтинга Алексей Стрелков
(GetPure, inc) рассказывает на чем не только модно, но и удобно тестировать высоконагруженные проекты с нетривиальными сценариями взаимодействия с пользователями. И все это не отрываясь от любимого питона.

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

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

  1. 1. Нагрузочное тестирование с помощью locust.io Алексей Стрелков для MoscowDjango, 2015
  2. 2. Кто этот чувак
  3. 3. Помощь зала
  4. 4. 7 комментариев!
  5. 5. 7 комментариев! (Три из них мои)
  6. 6. Существующие инструменты ApacheBench httpperf Tsung JMeter The Grinder Танк тысячи их! (на самом деле нет)
  7. 7. Анти-фича №1 GUI для описания тестов
  8. 8. Анти-фича №2 Декларативность
  9. 9. Анти-фича №3 Дорогое масштабирование (не везде)
  10. 10. Фрустрация
  11. 11. Выход есть!
  12. 12. Locust Создан, чтобы симулировать поведение настоящих пользователей
  13. 13. Фича №1 Тесты описываются на питоне
  14. 14. Пример • API какого-нибудь media-ресурса • /posts/ - все статьи • /posts/{id} - отдельная статья • /login - логин пользователя
  15. 15. Пример $ pip install locustio Создаем locustfile.py
  16. 16. from locust import HttpLocust, TaskSet, task
 
 class UserBehavior(TaskSet):
 
 @task()
 def get_index(self):
 self.client.get("/")
  17. 17. 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()
  18. 18. 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()
  19. 19. class UserBehavior(TaskSet): 
 # <...>
  20. 20. class UserBehavior(TaskSet):
 # <...> def on_start(self):
 """ вызывается при старте"""
 self.login()
  21. 21. class UserBehavior(TaskSet): 
 # <...> def on_start(self):
 """ вызывается при старте"""
 self.login() def login(self):
 self.client.post("/login", {"username":"King Fury", "password":"90s_rule!!"} )
  22. 22. class UserBehavior(TaskSet): 
 # <...> # <...> class AndroidUser(HttpLocust):
 task_set = UserBehavior
 min_wait=5000
 max_wait=9000
  23. 23. Фича №2 Простой и удобный веб-интерфейс
  24. 24. Запускаем $ locust --host http://pentagon.com
  25. 25. Фича №3 Хакáбельный
  26. 26. Хакабельность • опенсорсный • не только HTTP (например XML-RPC) • реакция на события (успех, неудача) • переопределение событий
  27. 27. Фича №4 Распределенный и масштабируемый
  28. 28. --slave --master-host=192.168.1.10
  29. 29. --slave --master-host=192.168.1.10 > 2M пользователей
  30. 30. Дальше будет немного методологической нудятины (совсем чуть-чуть, но это важно)
  31. 31. Не просто тестируйте конечные точки API на прочность
  32. 32. Симулируйте поведение пользователей! Не просто тестируйте конечные точки API на прочность
  33. 33. RPS* ≠ успех *requests per second Успех должен определяться временем ответа и процентом ошибок
  34. 34. Бонус Побочный эффект – функциональные тесты! (на самом деле MATS)
  35. 35. Сухой остаток • Все тесты пишутся на питоне • Удобный веб-интерфейс (можно не использовать) • Все опенсорсное и хакабельное • Легко масштабировать • Вы сами определяете, что считать ошибкой • Смоук-тесты нахаляву :3
  36. 36. Недостатки • monkey-patching для записи статистики ramp-up периода • ловит не все ошибки (например из on_start() ), но все есть в stdout • интервалы между тасками равны интервалам TaskSet.wait() • мелкие баги (запуск с неправильным протоколом)
  37. 37. Полезные ссылки • locust.io – сайт Locust • https://github.com/locustio/ - репозиторий Locust • getpure.org - Pure, уже на iOS, скоро Android (записывайтесь в бета-тестеры!) • theuntitled.net - присылайте ваш стартап на рассмотрение (info@theuntitled.net)
  38. 38. Вопросы? datagreed@gmail.com
  • ssuser4369e8

    Jun. 24, 2015

На примере дейтинга Алексей Стрелков (GetPure, inc) рассказывает на чем не только модно, но и удобно тестировать высоконагруженные проекты с нетривиальными сценариями взаимодействия с пользователями. И все это не отрываясь от любимого питона.

Aufrufe

Aufrufe insgesamt

5.596

Auf Slideshare

0

Aus Einbettungen

0

Anzahl der Einbettungen

4.886

Befehle

Downloads

5

Geteilt

0

Kommentare

0

Likes

1

×