Tsung — Википедия

Tsung
Тип Средство для нагрузочного тестирования
Разработчик Nicolas Niclausse
Написана на Erlang[1]
Интерфейс командная строка
Операционные системы Linux, UNIX
Последняя версия
Репозиторий github.com/processone/ts…
Лицензия GNU GPL 2
Сайт tsung.erlang-projects.org

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

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

Возможности[править | править код]

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

  • имитировать разные методы (GET, POST и т.д.)[4]
  • управлять куками автоматически и вручную
  • добавлять заголовки (например - 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 для каждого ядра.[источник не указан 2880 дней]

Мониторинг[править | править код]

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

<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. The tsung Open Source Project on Open Hub: Languages Page — 2006.
  2. Release 1.8.0 — 2023.
  3. Nicolas Niclausse. Tsung version 1.2.0 available. Дата обращения: 30 мая 2016. Архивировано из оригинала 4 марта 2016 года.
  4. 1 2 Holt, 2011.
  5. 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.

Ссылки[править | править код]