Генератор и валидатор трафика протокола Megaco. Инструмент для автоматизированного тестирования.
pip3 install jsonschema lxml scapy
Для запуска MegacoTester требуется запустить его файл main.py с конфигурационным файлом формата json, описывающим структуру стенда тестирования и одним или несколькими файлами с тестовыми сценариями (оформляются в формате xml):
main.py -c config.json -t scenario1.xml scenario2.xml
Пример конфигурационного файла:
"LogDirectory" : "/home/admin/",
"Nodes" : [
{
"id" : 0,
"name" : "Call Agent",
"ip_address" : "192.168.0.137",
"port" : 2944,
"encoding" : "full_text"
},
{
"id" : 1,
"name" : "TAU-36.IP",
"ip_address" : "192.168.0.173",
"port" : 2944,
"mid" : "tau36",
"encoding" : "full_text"
}
],
"Connections" : [
{
"id" : 0,
"name" : "Link between Call Agent and TAU-36.IP",
"from_node" : 0,
"to_node" : 1
}
]
Параметр LogDirectory указывает путь к директории, в которую будут выводиться результаты работы утилиты. В секции Nodes приводятся характеристики сетевых узлов стенда, между которыми будет вестись обмен сообщениями по протоколу Megaco/H.248. Секция Connections описывает взаимосвязи между сетевыми узлами, объявленными в секции Nodes. В данном случае имеем один линк между сервером Call Agent и абонентским шлюзом TAU-36.IP.
Пример оформления сценария регистрации шлюза Megaco на устройстве Call Agent:
<scenario name="TP_MG_AM_BV_01">
<recv connection="0" timeout="5000">
<actions>
<catch regexp="MEGACO/1\s*([A-Za-z0-9/_]+)" assign_to="gw_name"/>
<catch regexp="Transaction\s*=\s*(\d+)" assign_to="transaction_id"/>
<catch regexp="Context\s*=\s*([0-9-\$\*]+)" assign_to="context_id"/>
<catch regexp="ServiceChange\s*=\s*([A-Za-z0-9_/\-\$\*]+)" assign_to="termination_id"/>
<catch regexp="Method\s*=\s*([A-Za-z]+)" assign_to="method"/>
</actions>
</recv>
<nop>
<actions>
<compare first="[$gw_name],[$context_id],[$termination_id],[$method]" second="[$$Nodes.1.mid],-,ROOT,Restart">
<exit status="failure" info="Test is unsuccessfully completed"/>
</compare>
</actions>
</nop>
<send connection="0">
<![CDATA[
MEGACO/1 [$$Nodes.0.mid]
Reply = [$transaction_id] { Context = [$context_id] { ServiceChange = [$termination_id] } }
]]>
</send>
</scenario>
Алгоритм тестового сценария описывается в теле инструкции scenario и состоит из трех последовательных действий:
- recv – прием сообщения Megaco/H.248 из соединения с идентификатором "0" в течение 5000 мс. Данная инструкция содержит блок actions, внутри которого описаны действия выделения из принятого текстового сообщения данных, необходимых для его валидации согласно требованиям тестового кейса. Информационные элементы сообщения, выделенные посредством синтаксиса регулярных выражений, записываются в переменные локального пространства имен для последующего использования.
- nop – описывает последовательность действий, не связанных с протоколом Megaco/H.248. В данном случае, включает инструкцию compare, которая используется для сравнения информационных элементов принятого сообщения со значениями, определенными требованиями тестового кейса. В случае, если это равенство не достигается, осуществляется завершение работы тестового сценария со статусом ошибки.
- send – формирование и отправка ответа на запрос ServiceChange, подтверждающая успешное выполнение тестового сценария.
По завершении выполнения тестовых сценариев приложение MegacoTester создает внутри директории, указанной в параметре LogDirectory конфигурационного файла, каталог с результатами своей работы. Имя каталога формируется согласно следующему шаблону:
- MegacoTester_Results_dd.mm.yyyy_xxh-yym-zzs, где dd.mm.yyyy – дата, в которой dd - день месяца, mm - номер месяца, yyyy - номер года.
В данную директорию записываются:
- Лог работы синтаксического анализатора тестовых сценариев, записанный в файле Test_Parser.log. В нем содержится информация о парсинге каждого тестового сценария и статус выполнения данной операции.
- Логи выполнения инструкций тестовых сценариев, которые записываются в подкаталог Log. Имя файла тестового лога формируется по следующему шаблону:
- Test_n_name.log, где n - номер теста в порядке его исполнения приложением, name - имя теста, описанное в сценарии.
- Дампы сетевого трафика для каждого тестового сценария, которые записываются в подкаталог Dump в формате pcap.