Перейти к содержанию

Tsung

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Tsung
Тип Средство для нагрузочного тестирования
Разработчик Nicolas Niclausse
Интерфейс командная строка
Операционная система Linux, UNIX

Tsung (от англ. Tsunami-Next Generation[1], ранее известный как IDX-Tsunami) — распределённая система нагрузочного и стресс-тестирования, написанная на языке Erlang. Разработку системы начал Nicolas Niclausse в 2001 году. Изначально это была распределённая система для нагрузочного тестирования jabber для внутренних нужд компании IDEALX (сейчас - OpenTrust). Через несколько месяцев проект развился в открытый мультипротокольный инструмент для нагрузочного тестирования. Поддержка HTTP была добавлена в 2003 году.

Tsung может использоваться для тестирования различных протоколов HTTP (в том числе SOAP), WebDAV, Jabber, LDAP, а также PostgreSQL и MySQL, а также дает возможность эмулировать кластер из клиентских машин[2].

Возможности

Для протокола HTTP система позволяет:

  • имитировать разные методы (GET, POST и т.д.)[2]
  • управлять куками автоматически и вручную
  • добавлять заголовки (например - SOAP)
  • производить базовую аутентификацию
  • имитировать разных пользовательских агентов
  • записывать действия пользователя с помощью рекордера

В рамках протокола Jabber/XMPP могут тестироваться сообщения об аутентификации, регистрации присутствия, сообщения в чате, работа со списком пользователей, комнатами, а также настройка синхронизации пользователей.

Структура

Файл конфигурации Tsung — это XML файл. Основным тегом является тег <tsung>, в котором заключается вся конфигурация. Тег имеет два свойства: loglevel и dumptraffic. loglevel регулирует подробность лога, а dumtraffic используется для отладки. При параметре dumptraffic=true создается файл лога dump.log, в который подробно записывается каждый ответ от сервера. В последней версии Tsung, есть варианты dumptrafic=light — первые 44 байта ответа сервера и dumptrafic=protocol — только следующие данные date;pid;id;http method;host;URL;HTTP status;size;match;error.

 <?xml version="1.0"?>
 <tsung loglevel="info" dumptraffic="false">
     ...
 </tsung>

Клиенты и серверы

При тестировании можно использовать несколько виртуальных IP-адресов, что крайне полезно в случае, когда балансировщик нагрузки на сервере использует сетевой адрес клиента для распределения сетевого трафика в кластере серверов.

<clients>
     <client host="test1" weight="1" maxusers="500">
          <ip value="10.0.2.3"/>
          <ip value="10.0.2.4"/>
     </client>
     <client host="test2" weight="3" maxusers="250" cpu="2">
          <ip value="10.1.2.5"/>
     </client>
</clients>
<server host="10.2.2.10" port="8081" type="tcp"/>

Виртуальная машина Erlang может работать с несколькими ядрами - для клиентов Tsung более эффективно использовать одну VM на ядро. Параметр cpu должен быть равным количеству ядер на узлах.

В данном примере вторая машина используется в кластере Tsung с большим «весом» и двумя ядрами. По умолчанию нагрузка равномерно распределена на все ядра (одно ядро на клиент по умолчанию). Параметр weight (integer) может быть использован для настройки приоритетности машины клиента. В частности, если у одного клиента вес 1, а у другого 2, второй запустит в два раза больше пользователей, чем первый (пропорции будут 1/3 и 2/3). В приведенном примере, где у второго клиента cpu=2 и weight=3, вес равен 1,5 для каждого ядра.[источник не указан 3541 день]

Мониторинг

Tsung поддерживает несколько вариантов мониторинга: родной агент мониторинга на Erlang, Munin или SNMP. Агент должен быть установлен на стороне сервера[3]. Если нагрузка создаётся для кластера серверов, можно применять разные агенты для разных серверов.

<monitoring>
     <monitor host="10.1.1.94" type="erlang"/>
     <monitor host="10.1.1.94" type="munin">
          <munin port="8081"/>
     </monitor>
     <monitor host="10.1.1.94" type="snmp">
          <snmp version="v2" community="rwCommunity" port="11161"/>
     </monitor>
</monitoring>

Фазы нагрузки

Нагрузку можно разбить на несколько фаз. В настройках можно задать длительность каждой фазы и очерёдность выполнения фаз. В каждой фазе можно установить количество одновременных пользователей двумя способами: задать количество пользователей за промежуток времени, например 100 пользователей в секунду, либо задать частоту создания пользователей, например, один пользователь каждые 0,01 секунд. В стабильную нагрузку можно вставить специфическую сессию в определенное время для имитации какой-либо проверки или запуска некоторого сервиса.

<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>
     </arrivalphase>
<!-- Специальные сессии -->
     <user session="addManyProducts" start_time="20" unit="minute"/>
     <user session="checkOrders" start_time="25" unit="minute"/>
</load>

Пользовательские агенты

В следующем примере настройки для имитации различных браузеров устанавливается процентное соотношение между пользовательскими агентами. Этот процент определяет вероятность присвоения сессии пользователя одного из указанных агентов (по умолчанию присваивается — tsung):

<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 CLR 3.0.04506.30)
     </user_agent>
     <user_agent probability="20">
          Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21
     </user_agent>
</option>

Примечания

  1. Nicolas Niclausse. Tsung version 1.2.0 available (недоступная ссылка). Дата обращения: 30 мая 2016. Архивировано 4 марта 2016 года.
  2. 2,0 2,1 Holt, 2011.
  3. Holt, 2011, p. 54.

Литература

  • Bradley Holt. Chapter 6. Distributed Load Testing // Scaling CouchDB. — O'Reilly Media, Inc., 2011. — 72 p. — ISBN 978-1-4493-0343-3.

Ссылки