Инструмент для нагрузочного
    тестирования Tsung.

     Калантай Артём
История создания
1. Erlang — был разработан компанией Ericson.
2. Tsung изначально был предназначен для нагрузочного
   тестирования Jabber-а.
3. Tsung поддерживается компнией Process-One
Преимущества Tsung
1. Написан на Erlang — отличительной особенностью языка
   является модель легковесных процессов.
2. Свободно распространяемый.
3. Протоколонезависимый - HTTP (в том числе SOAP),
   WebDAV, Jabber/XMPP, PostgreSQL, LDAP и MySQL.
4. Нагрузка может быть распределена на кластере из
   клиентских машин.
Erlang. Moдель акторов
   Erlang — функциональный язык программирования с
динамической типизацией, предназначенный для создания
распределённых вычислительных систем.
   Модель акторов представляет собой математическую модель
параллельных вычислений, которая трактует понятие «актор» как
универсальный примитив параллельного численного расчёта.
HTTP
1. Запросы GET, POST, PUT, DELETE, HEAD.
2. Автоматическое управление cookies.
3. Поддержка GET If-modified since.
4. Режим прокси для записи сессий с помощью браузера.
5. Поддержка SOAP с помощью HTTP запросов (SOAPAction
   заголовки обрабатываются).
Jabber/XMPP
1. Сообщения о аутентификации, регистрации и присутствии.
2. Чат сообщения для онлайн и оффлайн пользователей.
3. Roster- и get-запросы.
4. Многопользовательский чат: подключение к room-у,
   сообщения в room-e, смена nick-а.
5. Запросы синхронизации пользователей.
Tsung recorder
1. Настроить браузер на прокси Tsung-a (порт 8090).
2. Произвести необходимые действия.
3. Использовать файл созданный recorder-ом для
   дальнейшей конфигурации.
Файл конфигурации tsung.xml
Структура
<?xml version="1.0"?>
<tsung loglevel="info" dumptraffic="false">
  ...
</tsung>
Tsung.xml: Клиенты и серверы
Tsung-кластер:
<clients>
  <client host="test1" weight="1" maxusers="8000">
    <ip value="10.0.2.3"/>
    <ip value="10.0.2.4"/>
  </client>
  <client host="test2" weight="3" maxusers="25000" cpu="2">
    <ip value="10.1.2.5"/>
Tsung.xml: Мониторинг
<monitoring>
  <monitor host="10.1.1.94" type="erlang"/>
  <monitor host="10.1.1.95" type="munin">
    <munin port="8081"/>
  </monitor>
  <monitor host="10.1.1.96" type="snmp">
    <snmp version="v2" community="rwCommunty" port="11161"/>
  </monitor>
Tsung.xml: Наращивание нагрузки
<load>
  <arrivalphase phase="1" duration="10" unit="minute">
<!-- Фаза разогрева -->
     <users interarrival="0.1" unit="second"> </users>
  </arrivalphase>
  <arrivalphase phase="2" duration="60" unit="minute">
<!-- Фаза нагрузки -->
     <users arrivalrate="1000" unit="second"> </users>
Tsung.xml: Наращивание нагрузки (2)
Tsung.xml: User agents
<option type="ts_http" name="user_agent">
  <user_agent probability="60">
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0)
  Gecko/20100101 Firefox/9.0
  </user_agent>
  <user_agent probability="20">
     Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0;
  InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET
Tsung.xml: Наследование свойств
Tsung.xml: Сессии HTTP (1)
<sessions>
  <session name="http-session" probability="70" type="ts_http">
    <request> <http url="/images/logo.gif" method="GET"
  version="1.1" if_modified_since="Mon, 02 Apr 2012 14:13:32
  GMT"/> </request>
     <thinktime value="20" random="true"/>
     <transaction name="index_request">
        <request> <http url="/index.en.html" method="GET"
  version="1.1" /> </request>
Tsung.xml: Сессии HTTP (2)
<http url="/bla" method="POST" contents="bla=blu&amp;name=glop">
  <www_authenticate userid="vasya" passwd="test"/>
  <http_header name="Cache-Control" value="no-cache"/>
</http>
<http url='product_page' method='POST' contents_from_file='/tmp/myfile' />
<http url="/" method="GET" version="1.1">
  <add_cookie key="test" value="new"/>
  <add_cookie key="id" value="548"/>
</http>
Tsung.xml: Сессии Jabber/XMPP
<sessions>
  <session probability="100" name="jabber-example"
  type="ts_jabber">
     <request> <jabber type="connect" ack="local" /> </request>
     <thinktime value="2"/>
     <transaction name="authenticate">
       <request> <jabber type="auth_get" ack="local"/> </request>
       <request> <jabber type="auth_set_plain"
  ack="local"></jabber> </request>
Tsung.xml: Сессии смешанного типа
<request>
  <jabber type="chat" ack="no_ack" size="16" destination="offline"/>
</request>
<thinktime value="3"/>
<change_type new_type="ts_http" host="foo.bar" port="80" server_type="tcp"
   store="true"/>
<request> <http url="http://foo.bar/"/> </request>
<request> <http url="/favicon"/> </request>
<change_type new_type="ts_jabber" host="localhost" port="5222" server_type="tcp"
   restore="true"/>
Tsung.xml: Чтение из внешнего файла
Определить местоположение файла:
<options>
  <option name="users_file" id="users" value="/path/params.csv"/>
</options>
Присвоить результаты переменным:
<setdynvars sourcetype="file" fileid="users" delimiter=";"
   order="iter">
  <var name="param1" />
  <var name="param2" />
Tsung.xml: Вставка Elang кода
Для расширения функциональности Tsung-а можно использовать
  вставки Erlang кода:
<setdynvars sourcetype="file" fileid="md5" delimiter=";" order="iter">
  <var name="md5data"/>
</setdynvars>
<setdynvars sourcetype="eval"
         code="fun({Pid, DynVars})->
             {ok, Val}=ts_dynvars:lookup(md5data, DynVars),
                ts_digest:md5hex(Val) end.">
Tsung.xml Response parsing(HTTP)
Regexp:
<request>
   <dyn_variable name="mytitlevar"
  re="&lt;title&gt;(.*)&lt;/title&gt;"/>
   <http url="/testtsung.html" method="GET"
  version="1.0"/>
</request>
Tsung.xml Response parsing(SQL)

<request>
  <dyn_variable name="user_pass"
  pgsql_expr="data_row[2][3]"/>
  <dyn_variable name="user_id"
  pgsql_expr="data_row[2].user_id"/>
  <pgsql type="sql">SELECT * from users LIMIT
Tsung.xml: Loops, If, Foreach
<for var="1" from="" to="100">
   <request>
      <dyn_variable name="free_games"
  xpath="/root/games/slot/@free_games"/>
      <http url="/slot.jsp" method="GET"
  version="1.1"/>
Java GC domosti.ru под нагрузкой
Подведем итоги
1. Эффективен для высоконагруженных проектов.
2. Подходит для тестирования многих видов клиент-
   серверных приложений.
3. Может использоваться всего на одной машине.
Недостатки Tsung
1. Отсутствует GUI
2. Не работает под Windows
Полезные ссылки
http://tsung.erlang-projects.org - официальный сайт

http://www.process-one.net – поддержка

http://www.erlang.org - официальный сайт Erlang

http://tsung.erlang-projects.org/user_manual.html – руководство
http://www.opentrust.ru/
Вопросы?
Приложение 1: Установка и запуск
1. apt-get install gnuplot-nox libtemplate-perl libhtml-template-perl
   libhtml-template-expr-perl
2. Скачать последнюю версию tsung-1.4.1.tar.gz.
3. Распаковать tar -zxvf tsung-1.4.1 .tar.gz
4. Установить ./configure && make && make install
5. Создать каталог с именем .tsung в root-директории и
   конфигурационный файл tsung.xml в ней
Приложение 2: Параметры запуска
 tsung <options> start|stop|debug|status
 Options:
   -f <file> set configuration file (default is
   ~/.tsung/tsung.xml)
               (use - for standard input)
   -l <logdir> set log directory (default is
   ~/.tsung/log/YYYYMMDD-HHMM/)
   -i <id>      set controller id (default is empty)

Инструмент для нагрузочного тестирования Tsung (Артём Калантай)

  • 1.
    Инструмент для нагрузочного тестирования Tsung. Калантай Артём
  • 2.
    История создания 1. Erlang— был разработан компанией Ericson. 2. Tsung изначально был предназначен для нагрузочного тестирования Jabber-а. 3. Tsung поддерживается компнией Process-One
  • 3.
    Преимущества Tsung 1. Написанна Erlang — отличительной особенностью языка является модель легковесных процессов. 2. Свободно распространяемый. 3. Протоколонезависимый - HTTP (в том числе SOAP), WebDAV, Jabber/XMPP, PostgreSQL, LDAP и MySQL. 4. Нагрузка может быть распределена на кластере из клиентских машин.
  • 4.
    Erlang. Moдель акторов Erlang — функциональный язык программирования с динамической типизацией, предназначенный для создания распределённых вычислительных систем. Модель акторов представляет собой математическую модель параллельных вычислений, которая трактует понятие «актор» как универсальный примитив параллельного численного расчёта.
  • 5.
    HTTP 1. Запросы GET,POST, PUT, DELETE, HEAD. 2. Автоматическое управление cookies. 3. Поддержка GET If-modified since. 4. Режим прокси для записи сессий с помощью браузера. 5. Поддержка SOAP с помощью HTTP запросов (SOAPAction заголовки обрабатываются).
  • 6.
    Jabber/XMPP 1. Сообщения оаутентификации, регистрации и присутствии. 2. Чат сообщения для онлайн и оффлайн пользователей. 3. Roster- и get-запросы. 4. Многопользовательский чат: подключение к room-у, сообщения в room-e, смена nick-а. 5. Запросы синхронизации пользователей.
  • 7.
    Tsung recorder 1. Настроитьбраузер на прокси Tsung-a (порт 8090). 2. Произвести необходимые действия. 3. Использовать файл созданный recorder-ом для дальнейшей конфигурации.
  • 8.
    Файл конфигурации tsung.xml Структура <?xmlversion="1.0"?> <tsung loglevel="info" dumptraffic="false"> ... </tsung>
  • 9.
    Tsung.xml: Клиенты исерверы Tsung-кластер: <clients> <client host="test1" weight="1" maxusers="8000"> <ip value="10.0.2.3"/> <ip value="10.0.2.4"/> </client> <client host="test2" weight="3" maxusers="25000" cpu="2"> <ip value="10.1.2.5"/>
  • 10.
    Tsung.xml: Мониторинг <monitoring> <monitor host="10.1.1.94" type="erlang"/> <monitor host="10.1.1.95" type="munin"> <munin port="8081"/> </monitor> <monitor host="10.1.1.96" type="snmp"> <snmp version="v2" community="rwCommunty" port="11161"/> </monitor>
  • 11.
    Tsung.xml: Наращивание нагрузки <load> <arrivalphase phase="1" duration="10" unit="minute"> <!-- Фаза разогрева --> <users interarrival="0.1" unit="second"> </users> </arrivalphase> <arrivalphase phase="2" duration="60" unit="minute"> <!-- Фаза нагрузки --> <users arrivalrate="1000" unit="second"> </users>
  • 12.
  • 13.
    Tsung.xml: User agents <optiontype="ts_http" name="user_agent"> <user_agent probability="60"> Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0 </user_agent> <user_agent probability="20"> Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET
  • 14.
  • 15.
    Tsung.xml: Сессии HTTP(1) <sessions> <session name="http-session" probability="70" type="ts_http"> <request> <http url="/images/logo.gif" method="GET" version="1.1" if_modified_since="Mon, 02 Apr 2012 14:13:32 GMT"/> </request> <thinktime value="20" random="true"/> <transaction name="index_request"> <request> <http url="/index.en.html" method="GET" version="1.1" /> </request>
  • 16.
    Tsung.xml: Сессии HTTP(2) <http url="/bla" method="POST" contents="bla=blu&amp;name=glop"> <www_authenticate userid="vasya" passwd="test"/> <http_header name="Cache-Control" value="no-cache"/> </http> <http url='product_page' method='POST' contents_from_file='/tmp/myfile' /> <http url="/" method="GET" version="1.1"> <add_cookie key="test" value="new"/> <add_cookie key="id" value="548"/> </http>
  • 17.
    Tsung.xml: Сессии Jabber/XMPP <sessions> <session probability="100" name="jabber-example" type="ts_jabber"> <request> <jabber type="connect" ack="local" /> </request> <thinktime value="2"/> <transaction name="authenticate"> <request> <jabber type="auth_get" ack="local"/> </request> <request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
  • 18.
    Tsung.xml: Сессии смешанноготипа <request> <jabber type="chat" ack="no_ack" size="16" destination="offline"/> </request> <thinktime value="3"/> <change_type new_type="ts_http" host="foo.bar" port="80" server_type="tcp" store="true"/> <request> <http url="http://foo.bar/"/> </request> <request> <http url="/favicon"/> </request> <change_type new_type="ts_jabber" host="localhost" port="5222" server_type="tcp" restore="true"/>
  • 19.
    Tsung.xml: Чтение извнешнего файла Определить местоположение файла: <options> <option name="users_file" id="users" value="/path/params.csv"/> </options> Присвоить результаты переменным: <setdynvars sourcetype="file" fileid="users" delimiter=";" order="iter"> <var name="param1" /> <var name="param2" />
  • 20.
    Tsung.xml: Вставка Elangкода Для расширения функциональности Tsung-а можно использовать вставки Erlang кода: <setdynvars sourcetype="file" fileid="md5" delimiter=";" order="iter"> <var name="md5data"/> </setdynvars> <setdynvars sourcetype="eval" code="fun({Pid, DynVars})-> {ok, Val}=ts_dynvars:lookup(md5data, DynVars), ts_digest:md5hex(Val) end.">
  • 21.
    Tsung.xml Response parsing(HTTP) Regexp: <request> <dyn_variable name="mytitlevar" re="&lt;title&gt;(.*)&lt;/title&gt;"/> <http url="/testtsung.html" method="GET" version="1.0"/> </request>
  • 22.
    Tsung.xml Response parsing(SQL) <request> <dyn_variable name="user_pass" pgsql_expr="data_row[2][3]"/> <dyn_variable name="user_id" pgsql_expr="data_row[2].user_id"/> <pgsql type="sql">SELECT * from users LIMIT
  • 23.
    Tsung.xml: Loops, If,Foreach <for var="1" from="" to="100"> <request> <dyn_variable name="free_games" xpath="/root/games/slot/@free_games"/> <http url="/slot.jsp" method="GET" version="1.1"/>
  • 24.
    Java GC domosti.ruпод нагрузкой
  • 25.
    Подведем итоги 1. Эффективендля высоконагруженных проектов. 2. Подходит для тестирования многих видов клиент- серверных приложений. 3. Может использоваться всего на одной машине.
  • 26.
    Недостатки Tsung 1. ОтсутствуетGUI 2. Не работает под Windows
  • 27.
    Полезные ссылки http://tsung.erlang-projects.org -официальный сайт http://www.process-one.net – поддержка http://www.erlang.org - официальный сайт Erlang http://tsung.erlang-projects.org/user_manual.html – руководство http://www.opentrust.ru/
  • 28.
  • 29.
    Приложение 1: Установкаи запуск 1. apt-get install gnuplot-nox libtemplate-perl libhtml-template-perl libhtml-template-expr-perl 2. Скачать последнюю версию tsung-1.4.1.tar.gz. 3. Распаковать tar -zxvf tsung-1.4.1 .tar.gz 4. Установить ./configure && make && make install 5. Создать каталог с именем .tsung в root-директории и конфигурационный файл tsung.xml в ней
  • 30.
    Приложение 2: Параметрызапуска tsung <options> start|stop|debug|status Options: -f <file> set configuration file (default is ~/.tsung/tsung.xml) (use - for standard input) -l <logdir> set log directory (default is ~/.tsung/log/YYYYMMDD-HHMM/) -i <id> set controller id (default is empty)