Interested Article - Tsung
- 2020-09-09
- 1
Tsung (от англ. Tsunami-Next Generation , ранее известный как IDX-Tsunami ) — распределённая система нагрузочного и стресс-тестирования , написанная на языке Erlang . Разработку системы начал Nicolas Niclauss e в 2001 году. Изначально это была распределённая система для нагрузочного тестирования jabber для внутренних нужд компании IDEALX (сейчас - OpenTrust ). Через несколько месяцев проект развился в открытый мультипротокольный инструмент для нагрузочного тестирования. Поддержка HTTP была добавлена в 2003 году.
Tsung может использоваться для тестирования различных протоколов HTTP (в том числе SOAP ), WebDAV , Jabber , LDAP , а также PostgreSQL и MySQL , а также дает возможность эмулировать кластер из клиентских машин .
Возможности
Для протокола HTTP система позволяет:
- имитировать разные методы (GET, POST и т.д.)
- управлять куками автоматически и вручную
- добавлять заголовки (например - 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 для каждого ядра. [ источник не указан 2787 дней ]
Мониторинг
Tsung поддерживает несколько вариантов мониторинга: родной агент мониторинга на Erlang , или SNMP . Агент должен быть установлен на стороне сервера . Если нагрузка создаётся для кластера серверов, можно применять разные агенты для разных серверов.
<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>
Примечания
- — 2006.
- — 2023.
- Nicolas Niclausse. . Дата обращения: 30 мая 2016. Архивировано из 4 марта 2016 года.
- ↑ .
- , p. 54.
Литература
- Bradley Holt. Chapter 6. Distributed Load Testing // . — O'Reilly Media, Inc., 2011. — 72 p. — ISBN 978-1-4493-0343-3 .
Ссылки
- 2020-09-09
- 1