Upload
happydev
View
217
Download
1
Embed Size (px)
Citation preview
Провизионинг
Тестируемая система
MZBench API serverCLI Cloud
controllerStatus
ProvisionProvisionProvision
Работа
Тестируемая система
MZBench API serverCLI Cloud
controller
Director Node
Node
Status
Load
Load
Status
Локальный запускCloud controller: dummycloud_plugin
Все компоненты на одной машине:
MZBench server
Director
Node
Запуск сервера
cd ~/mzbench
./bin/mzbench start_server
Зайдите на http://localhost:4800
Запуск сценария
./bin/mzbench start ./examples/ramp.erl
Можно так-же использовать кнопку «New» в dashboard
Компоненты бенчаБенчмарк состоит из двух компонентов:
worker - Набор функций для доступа к трестируемому сервису
сценарий - описывает конкретный бенчмарк
СценарийСценарий описывается Erlang-подобным языком:
[{pool, [ {size, 3}, {worker_type, dummy_worker} ], [ {loop, [{time, {5, min}}, {rate, {1, rps}}], [ {print, «Foo»} ] }]}].
Метрикиmetrics() -> [ [ {"http_ok", counter}, {"http_fail", counter}, {"other_fail", counter} ], {"latency", histogram} ].
Функцииget(State, _Meta, URL) -> StartTime = os:timestamp(), Response = hackney:request(get, list_to_binary(URL), [], <<"">>, []),
case Response of {ok, _, _, BodyRef} -> hackney:skip_body(BodyRef); _ -> ok end,
Latency = timer:now_diff(os:timestamp(), StartTime), mzb_metrics:notify({"latency", histogram}, Latency),
case Response of {ok, 200, _, _} -> mzb_metrics:notify({"http_ok", counter}, 1); {ok, _, _, _} = Reply -> lager:error("GET failed: ~p", [Reply]), mzb_metrics:notify({"http_fail", counter}, 1); E -> lager:error("hackney:request failed: ~p", [E]), mzb_metrics:notify({"other_fail", counter}, 1) end, {nil, State}.
python_http_worker
Листинг доступных шаблонов: ~/mzbench/bin/mzbench list_templates
Создание нового воркера: ~/mzbench/bin/mzbench new_worker --template=python_empty python_http
python_http_workerВалидация сценария:
~/mzbench/bin/mzbench validate examples/python_http.erl
Локальный запуск: ~/mzbench/bin/mzbench run_local examples/python_http.erl
python_http_workerВ начале examples/python_http.erl:
{make_install, [{git, «/root/python_http»}]},
Создаем репозитарий: git initgit add —allgit commit -m «Initial commit»
Пишем сами!Задача: Написать HTTP воркера на Python
Как сделать HTTP реквест: import requestsr = requests.get(«url»)r.status_code == 200
Как посчитать время: import timestart = time.clock()time.clock() - start
Бонус: Выставлять URL отдельной функцией
Базовый сценарий[ {make_install, [{git, «/root/python_http"}]}, {pool, [ {size, 3}, {worker_type, python_http, python} ], [ {loop, [ {time, {3, min}}, {rate, {1, rps}} ], [ {get, "http://localhost:4800"} ]} ]}].
Параметризация
{var, <Name> [, <DefValue>]} - строковая переменная;
{numvar, <Name> [, <DefValue>]} - численная переменная;
Использование: mzbench start --env <Name> = <Value>
ПрактикаЗамените параметрами:
Количество воркеров
Длительность сценария
Скорость
Цель
Бонус: Поиграйтесь с mzbench change_env
ЦиклыСкорость не обязана быть константной:
{ramp, linear, <Start>, <Stop>} - Линейное изменение от <Start> до <Stop> {comb, <Rate1>, <Time1>, <Rate2>, <Time2>} - Скорость <Rate1> в течении <Time1>, потом скорость <Time2> и т.д.
РесурсыВнешний файл (например json): [«url1», «url2», «url3»]
Импортируем в сценарий: {include_resource, <Name>, «<File>», json}
Используем: {resource, <Name>}