SlideShare a Scribd company logo
1 of 35
Download to read offline
Python инструменты для
нагрузочного тестирования
Гребенщиков Иван
БАРС Груп
iv.grebenschikov@gmail.com
О себе
● В тестировании 2 года.
● С недавних пор присоединился к числу
разработчиков.
● Интересуюсь веб-разработкой, инструментами
для тестирования и автоматизации.
О компании
● БАРС Груп - ведущий российский разработчик
решений для государственного и
корпоративного секторов.
● С 2016 г. присоединились к структуре
госкорпорации «Ростех».
О нагрузочном тестировании
Вид автоматизированного тестирования,
имитирующее работу определенного количества
пользователей продукта.
Показатели
● Емкость
● Время ответа
● Надежность
● Масштабируемость
● Критический ресурс
На что обратить внимание при
тестировании
● Корректность отправки запроса
● Корректность отправки данных
● Корректность принятых данных
● Анализ ошибок
На что обратить внимание при выборе
инструмента
● Тип создаваемых тестов
● Возможность сбора метрик
● Возможность формирования результатов
тестирования
Об инструментах
Яндекс.Танк
Яндекс.Танк
Это инструмент для нагрузочного тестирования и
анализа производительности веб-сервисов и
приложений.
Яндекс.Танк
● Является оберткой над генераторами
нагрузки.
● В качестве генераторов нагрузки могут
выступать: Phantom, JMeter, BFG, Pandora.
● Имеет большое количество плагинов для
сбора метрик, анализа и формирования
результатов.
● Расширяем путем написания и подключения
собственных плагинов.
Яндекс.Танк Установка
$ pip install yandextank
Яндекс.Танк Конфигурация
# conf.ini
[tank]
plugin_phantom=
plugin_bfg=yandextank.plugins.Bfg
[bfg]
instances = 1
gun_type = ultimate
ammofile=ammos.log
rps_schedule=const(1, 1m) # step(a, b, step, dur) line(a, b, dur)
[ultimate_gun]
module_path = /home/test/workspace/tank_load
module_name = loadtest
init_param = Started
Яндекс.Танк Конфигурация
# ammos.log
case1<TAB>http://base-test-address.ru/fias/
case2<TAB>http://base-test-address.ru/spyne-smev/
Яндекс.Танк Тест
# loadtest.py
import logging
import requests
log = logging.getLogger(__name__)
class LoadTest(object):
def __init__(self, gun):
self.gun = gun
def setup(self, param):
log.info("Setting up LoadTest: %s", param)
Яндекс.Танк Тест
# Продолжение class LoadTest
def case1(self, missile):
with self.gun.measure("case1"):
log.info("Shoot case 1: %s", missile)
requests.get(missile)
with self.gun.measure("case1_step2") as sample:
log.info("Shoot case 1, step 2: %s", missile)
sample["proto_code"] = 500
def case2(self, missile):
with self.gun.measure("case2"):
log.info("Shoot case 2: %s", missile)
requests.get(missile)
Яндекс.Танк Запуск
$ yandex-tank -c conf.ini
Яндекс.Танк Результаты
https://overload.yandex.net/
Яндекс.Танк Резюме
● Поддерживает как сценарный тип тестов, так
и hit-based
● Сборка метрик подключается плагином из
поставки
● Полученные данные отправляются в Overload,
формируя отчет
locust.io
locust.io
Инструмент для нагрузочного тестирования,
позволяющий описывать поведение
пользователей на python.
locust.io
● Пользовательское поведение описывается в
коде.
● Поддерживает запуск в распределенном
режиме.
● Минималистичный веб-интерфейс.
● Расширяем путем добавления обработчиков
событий.
locust.io Установка
$ pip install locustio
locust.io Тест
# locustfile.py
from locust import HttpLocust, TaskSet
def login(l):
l.client.post(
"/login",
{"username":"test", "password":"test"}
)
def index(l):
l.client.get("/")
def profile(l):
l.client.get("/profile")
locust.io Тест
# locustfile.py продолжение
class UserBehavior(TaskSet):
tasks = {index: 2, profile: 1}
def on_start(self):
login(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
host = “http://base-test-address.ru”
min_wait = 5000
max_wait = 9000
stop_timeout = 60
locust.io Тест
class UserBehavior(TaskSet):
@task(2)
def index(self):
l.client.get("/")
@task(1)
def profile(self):
l.client.get("/profile")
locust.io Запуск
$ locust -f locustfile.py --no-web -c 2 -r 1
-f - имя файла с тестами
--no-web - запуск без веб-сервера locust
-с - количество пользователей
-r - время появления пользователей
locust.io Результаты
Name # reqs # fails Avg Min Max | Median req/s
-------------------------------------------------------------------------------
GET / 769 0(0.00%) 2 2 8 | 3 13.30
POST /login 0 0(0.00%) 0 0 0 | 0 0.00
GET /profile 355 0(0.00%) 2 2 7 | 3 5.90
-------------------------------------------------------------------------------
Total 1124 0(0.00%) 19.20
Percentage of the requests completed within given times
Name # reqs 50% 66% 75% 80% 90% 95% 98% 99% 100%
----------------------------------------------------------------------------------
GET / 769 3 3 3 3 3 4 5 6 8
GET /profile 355 3 3 3 3 3 4 5 6 7
----------------------------------------------------------------------------------
locust.io События
● request_success
● request_failure
● locust_error
● report_to_master
● slave_report
● hatch_complete
● quitting
● locust(master)_start_hatching
● locust(master)_stop_hatching
locust.io События
from locust import events
def my_success_handler(
request_type, name,
response_time, response_length):
print u"Успешно выполнен: %s" % (name)
events.request_success += my_success_handler
locust.io Резюме
● Поддерживает как сценарный тип тестов, так и
hit-based
● Сборка метрик возможна путем использования
дополнительных приложений/скриптов
● Полученные данные могут быть сформированы в
отчет отдельными приложениями/скриптами*
Итог
Полезные ссылки
● Яндекс.Танк:
○ https://tech.yandex.ru/tank/
○ https://yandextank.readthedocs.io/en/latest/
○ https://github.com/yandex/yandex-tank
● locust.io:
○ http://locust.io/
○ http://docs.locust.io/en/latest/index.html
○ https://github.com/locustio/locust
Спасибо за внимание!

More Related Content

What's hot

Яндекс-маркетинг
Яндекс-маркетингЯндекс-маркетинг
Яндекс-маркетингAlexei Fedotov
 
HSEsun2016: "Хитрости эффективной экспертной сессии"
HSEsun2016: "Хитрости эффективной экспертной сессии"HSEsun2016: "Хитрости эффективной экспертной сессии"
HSEsun2016: "Хитрости эффективной экспертной сессии"Business incubator HSE
 
Как работать в калифорнийском стартапе, не уезжая из России
Как работать в калифорнийском стартапе, не уезжая из РоссииКак работать в калифорнийском стартапе, не уезжая из России
Как работать в калифорнийском стартапе, не уезжая из РоссииSam Faktorovich
 
Orlov qa leadership
Orlov qa leadershipOrlov qa leadership
Orlov qa leadershipAlexei Lupan
 
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QAFest
 
Sqa days. Отдел автоматизации DIY
Sqa days. Отдел автоматизации DIYSqa days. Отдел автоматизации DIY
Sqa days. Отдел автоматизации DIYMaxim Boguslavsky
 
Отдел автоматизации своими руками
Отдел автоматизации своими рукамиОтдел автоматизации своими руками
Отдел автоматизации своими рукамиSQALab
 
Большая фича - маленький спринт. Советы для успеха
Большая фича - маленький спринт. Советы для успехаБольшая фича - маленький спринт. Советы для успеха
Большая фича - маленький спринт. Советы для успехаSQALab
 
Истинная сила тестировщика - информация.
Истинная сила тестировщика - информация.Истинная сила тестировщика - информация.
Истинная сила тестировщика - информация.Igor Goldshmidt
 
Как учиться в вузе, заниматься предпринимательством и не умереть в процессе
Как учиться в вузе, заниматься предпринимательством и не умереть в процессеКак учиться в вузе, заниматься предпринимательством и не умереть в процессе
Как учиться в вузе, заниматься предпринимательством и не умереть в процессеMIkhail Neverov
 
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid them
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid themIce Age Testing. Mistakes that testers do since Ice Age and how to avoid them
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid themGleb Rybalko
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информацияSQALab
 
Ice Age Testing
Ice Age TestingIce Age Testing
Ice Age TestingSQALab
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 

What's hot (14)

Яндекс-маркетинг
Яндекс-маркетингЯндекс-маркетинг
Яндекс-маркетинг
 
HSEsun2016: "Хитрости эффективной экспертной сессии"
HSEsun2016: "Хитрости эффективной экспертной сессии"HSEsun2016: "Хитрости эффективной экспертной сессии"
HSEsun2016: "Хитрости эффективной экспертной сессии"
 
Как работать в калифорнийском стартапе, не уезжая из России
Как работать в калифорнийском стартапе, не уезжая из РоссииКак работать в калифорнийском стартапе, не уезжая из России
Как работать в калифорнийском стартапе, не уезжая из России
 
Orlov qa leadership
Orlov qa leadershipOrlov qa leadership
Orlov qa leadership
 
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
 
Sqa days. Отдел автоматизации DIY
Sqa days. Отдел автоматизации DIYSqa days. Отдел автоматизации DIY
Sqa days. Отдел автоматизации DIY
 
Отдел автоматизации своими руками
Отдел автоматизации своими рукамиОтдел автоматизации своими руками
Отдел автоматизации своими руками
 
Большая фича - маленький спринт. Советы для успеха
Большая фича - маленький спринт. Советы для успехаБольшая фича - маленький спринт. Советы для успеха
Большая фича - маленький спринт. Советы для успеха
 
Истинная сила тестировщика - информация.
Истинная сила тестировщика - информация.Истинная сила тестировщика - информация.
Истинная сила тестировщика - информация.
 
Как учиться в вузе, заниматься предпринимательством и не умереть в процессе
Как учиться в вузе, заниматься предпринимательством и не умереть в процессеКак учиться в вузе, заниматься предпринимательством и не умереть в процессе
Как учиться в вузе, заниматься предпринимательством и не умереть в процессе
 
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid them
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid themIce Age Testing. Mistakes that testers do since Ice Age and how to avoid them
Ice Age Testing. Mistakes that testers do since Ice Age and how to avoid them
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информация
 
Ice Age Testing
Ice Age TestingIce Age Testing
Ice Age Testing
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 

More from PyNSK

Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1PyNSK
 
Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2PyNSK
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данныхPyNSK
 
Python для GameDev
Python для GameDevPython для GameDev
Python для GameDevPyNSK
 
Python, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPython, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPyNSK
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!PyNSK
 
Питон в малине
Питон в малинеПитон в малине
Питон в малинеPyNSK
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?PyNSK
 
Во внутренности Kivy
Во внутренности KivyВо внутренности Kivy
Во внутренности KivyPyNSK
 
Зоопарк python веб-фреймворков
Зоопарк python веб-фреймворковЗоопарк python веб-фреймворков
Зоопарк python веб-фреймворковPyNSK
 
Как Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойКак Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойPyNSK
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 
Ctypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonCtypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonPyNSK
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Python инструменты решения типичных задач
Python  инструменты решения типичных задачPython  инструменты решения типичных задач
Python инструменты решения типичных задачPyNSK
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
JSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенJSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенPyNSK
 
TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.PyNSK
 

More from PyNSK (20)

Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1
 
Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данных
 
Python для GameDev
Python для GameDevPython для GameDev
Python для GameDev
 
Python, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPython, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системы
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!
 
Питон в малине
Питон в малинеПитон в малине
Питон в малине
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?
 
Во внутренности Kivy
Во внутренности KivyВо внутренности Kivy
Во внутренности Kivy
 
Зоопарк python веб-фреймворков
Зоопарк python веб-фреймворковЗоопарк python веб-фреймворков
Зоопарк python веб-фреймворков
 
Как Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойКак Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикой
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
Ctypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonCtypes в игровых приложениях на python
Ctypes в игровых приложениях на python
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Python инструменты решения типичных задач
Python  инструменты решения типичных задачPython  инструменты решения типичных задач
Python инструменты решения типичных задач
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
JSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенJSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобен
 
TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.
 

Python инструменты для нагрузочного тестирования