Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Алексей Стрелков

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

Moscow Python Meetup

May 25, 2015
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Пример • API какого-нибудь media-ресурса • /posts/ - все статьи

    • /posts/{id} - отдельная статья • /login - логин пользователя
  2. from locust import HttpLocust, TaskSet, task
 
 class UserBehavior(TaskSet):
 


    @task()
 def get_index(self):
 self.client.get("/")
  3. 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()
  4. 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()
  5. class UserBehavior(TaskSet): 
 # <...> def on_start(self):
 """ вызывается при

    старте"""
 self.login() def login(self):
 self.client.post("/login", {"username":"King Fury", "password":"90s_rule!!"} )
  6. Хакабельность • опенсорсный • не только HTTP (например XML-RPC) •

    реакция на события (успех, неудача) • переопределение событий
  7. Сухой остаток • Все тесты пишутся на питоне • Удобный

    веб-интерфейс (можно не использовать) • Все опенсорсное и хакабельное • Легко масштабировать • Вы сами определяете, что считать ошибкой • Смоук-тесты нахаляву :3
  8. Недостатки • monkey-patching для записи статистики ramp-up периода • ловит

    не все ошибки (например из on_start() ), но все есть в stdout • интервалы между тасками равны интервалам TaskSet.wait() • мелкие баги (запуск с неправильным протоколом)
  9. Полезные ссылки • locust.io – сайт Locust • https://github.com/locustio/ -

    репозиторий Locust • getpure.org - Pure, уже на iOS, скоро Android (записывайтесь в бета-тестеры!) • theuntitled.net - присылайте ваш стартап на рассмотрение ([email protected])