Яндекс.Метрика

Курс Zabbix: мониторинг Asterisk и VoIP

Курс Zabbix: мониторинг Asterisk и VoIP с 8 сентября по 12 сентября

Количество
свободных мест

8 Записаться

Дистанционные курсы по Asterisk

Дистанционные курсы по Asterisk с 18 августа по 24 августа

Количество
свободных мест

2 Записаться

Курсы по Mikrotik MTCRE

Курсы по Mikrotik MTCRE с 8 декабря по 11 декабря

Количество
свободных мест

6 Записаться
SIPssert в CI/CD Pipeline: Тестирование VoIP приложений
10
Мастер-класс
Ярослав Нападайло
SIPssert в CI/CD Pipeline: Тестирование VoIP приложений
скачать презентацию

SIPssert в CI/CD Pipeline: Тестирование VoIP приложений

В рамках деятельности компании «Колёса Групп» (Казахстан) создаются продукты и сервисы, предназначенные для покупки и продажи автомобилей, недвижимости и других товаров. Одним из направлений работы является разработка и сопровождение VoIP-приложений и инфраструктуры телефонии. Значительная часть этих приложений интегрируется с Asterisk через интерфейс ARI и выполняет функции создания и удаления каналов, добавления мостов, проигрывания аудио-анонсов и другие операции.

При функциональном тестировании приложений, например, написанных на Go, используются готовые библиотеки и пакеты, что обеспечивает удобство и надёжность. Однако при тестировании взаимодействия с внешними системами, такими как Asterisk, возникает проблема отсутствия автоматизации. Традиционный подход — ручная проверка работы, например, для приложения автодозвона — требует значительных затрат времени и подвержен человеческим ошибкам.

Необходимость устранения ручного тестирования и автоматизации интеграционных проверок привела к поиску подходящего инструмента. В ходе анализа было найдено решение — фреймворк SIPCERT, изначально разработанный для тестирования конфигураций и функциональности OpenSIPS, но подходящий для автоматизации интеграционных тестов в проектах с Asterisk.

Проблематика интеграционного тестирования

Существует несколько подходов к интеграционному тестированию VoIP-систем:

  1. Мок Asterisk внутри приложения — позволяет эмулировать работу сервера, но не выявляет проблем, которые могут возникнуть при обновлениях или изменениях конфигураций в рабочей среде.
  2. Тестовое окружение на виртуальной машине — ограничено одной версией и сложнее в автоматизации.
  3. Docker Compose — даёт возможность контейнеризировать все сервисы и запускать их вместе с тестами, но требует значительной доработки.

Фреймворк SIPCERT

SIPCERT (анонсирован в апреле 2023 года на blog.opensips.org) предназначен для:

  • Conformance Testing — проверка соответствия стандартам.
  • Валидации конфигураций — проверка корректности загрузки и работы заданных настроек.
  • Интеграционного тестирования — запуск сценариев с участием нескольких компонентов.

Особенности фреймворка:

  • Написан на Python, сценарии и настройки описываются в YAML.
  • Компоненты поставляются в виде Docker-образов: SIP-прокси, RTP-прокси, PBX (в том числе Asterisk), пользовательские агенты, базы данных и клиенты, консольные утилиты.
  • Гибкое управление порядком запуска компонентов (разделение на демоны и одноразовые задачи).
  • Единый сбор логов и pcap-дампов.
  • Автоматическое монтирование конфигураций в контейнеры.
  • Поддержка переменных и их наследования на разных уровнях (глобально, для набора тестов, для сценария).

Организация тестов

Тесты группируются в наборы (test sets), внутри которых хранятся сценарии (scenarios).
Каждый сценарий состоит из:

  • YAML-файла сценария.
  • Конфигураций компонентов (Asterisk, OpenSIPS, пользовательские агенты и др.).
  • Скриптов, необходимых для проверки.

Общие параметры компонентов и переменные выносятся в конфигурационные файлы config и defines, что позволяет переиспользовать настройки между сценариями. В самих сценариях указываются только используемые компоненты и порядок их запуска.

Пример: тестирование автодозвона

Задача: проверить сценарий исходящего вызова, при котором приложение автодозвона:

  1. Инициирует звонок на абонента.
  2. Выполняет бизнес-логику.
  3. Соединяет абонента с оператором.

Реализация:

  • Запуск Asterisk.
  • Подключение AMI-клиента для отслеживания событий.
  • Регистрация двух пользовательских агентов: для эмуляции звонка с транка и для оператора.
  • Запуск тестируемого приложения.
  • Проверка корректности последовательности событий.

Управление порядком запуска компонентов

В SIPCERT задачи делятся на:

  • Daemon — постоянно работающие сервисы (Asterisk, OpenSIPS, RTP-прокси).
  • Non-daemon — одноразовые задачи (тестовые клиенты, скрипты).

Для задания зависимостей используются параметры after, require и др., аналогичные Docker Compose, но с расширенной логикой, учитывающей тип компонента.

Интеграция с CI/CD

Фреймворк легко встраивается в пайплайны CI/CD. Пример для GitHub Actions:

  1. Клонирование репозитория с проектом.
  2. Сборка тестируемого Docker-образа.
  3. Установка SIPCERT.
  4. Запуск тестов.
  5. Вывод результатов в summary.

Для унификации используется собственный GitHub Action с параметрами:

  • Путь к тестам.
  • Путь установки SIPCERT.
  • Набор тестов и список сценариев.
  • Доступ к приватному Docker Registry.
  • Дополнительные переменные (ExtraVars) для подстановки в конфигурации.

Расширение функционала SIPCERT

Возможны три подхода:

  1. Fork и контрибуция — для открытых компонентов.
  2. Приватный форк — для закрытых решений.
  3. Generic task — для быстрого добавления простых компонентов без написания Python-кода.

В рамках доработок для компании были реализованы:

  • Компонент Asterisk.
  • Пользовательский агент с поддержкой WebRTC (CipXer).
  • AMI-клиент для проверки порядка и содержания событий от Asterisk.

Логирование и отладка

Логи можно:

  • Собирать в директорию logs (структурированы по запускам).
  • Выводить в консоль при помощи параметров logging.console: true на глобальном или уровне сценария.

Также сохраняются pcap-дампы трафика.

Ограничения

  • SIPCERT требует контейнеризации всех тестируемых компонентов.
  • Для проверки существующей инфраструктуры её необходимо воспроизвести в Docker-среде.

Заключение

Фреймворк SIPCERT позволяет:

  • Автоматизировать интеграционное тестирование VoIP-приложений.
  • Обеспечить изоляцию тестового окружения.
  • Сократить трудозатраты на ручные проверки.
  • Гибко интегрировать тесты в CI/CD.
  • Расширять функционал под нужды конкретного проекта.

Применение SIPCERT на примере тестирования автодозвона и входящих вызовов показало, что инструмент эффективно решает задачу автоматизации и может быть адаптирован для разных сценариев в Asterisk и OpenSIPS.

Ежегодная конференция по Asterisk 2025!

Билеты уже в продаже!

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все