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

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

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

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

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

Avatar for Moscow Python Meetup

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])