Модульное / интеграционное тестирование Конфигурация Asterisk - PullRequest
5 голосов
/ 01 февраля 2010

Единичное и интеграционное тестирование обычно выполняется как часть процесса разработки. Я ищу способы использования этой методологии в конфигурации существующей системы, в данном случае Asterisk soft PBX .

В случае Asterisk файл конфигурации является таким же языком программирования, как и все остальное, с циклами, переходами, условными обозначениями и т. Д. И может быть довольно сложным. Изменения в конфигурации часто страдают от тех же проблем, что и изменения в сложном программном продукте - может быть трудно предвидеть все эффекты без проведения испытаний. Это усугубляется тем, что природа системы заключается в связи с внешними объектами, то есть совершать телефонные звонки.

У меня есть несколько идей о тестировании системы с использованием файлов вызовов (для создания определенных вызовов между расширениями) при просмотре интерфейса менеджера для сгенерированных событий. Затем тест может отслеживать ожидаемый результат, т. Е. Набор * 99 # должен привести к вызову приложения голосовой почты.

Недостатки очевидны - он не проверяет фактический результат, только то, что система считает результатом, и, вероятно, требует некоторой модификации тестируемой системы. Также очень сложно написать эти тесты достаточно надежно, чтобы запускать только ожидаемый вывод, особенно если система используется (то есть выполняются другие вызовы).

Что я хочу, система тестирования для Asterisk, невозможна? Если нет, есть ли у вас какие-либо идеи о том, как сделать это разумным образом? Я готов потратить немало времени на разработку и выпустить результат под дружественной лицензией, но я не уверен, как лучше к нему подойти.

Ответы [ 4 ]

3 голосов
/ 01 февраля 2010

Ну, это зависит от того, что вы тестируете. Существует множество способов справиться с подобными вещами. Я предпочитаю использовать файлы вызовов Asterisk, связанные с кодом набора номера. Например: создайте файл вызова для набора какого-либо общедоступного номера, после получения ответа вернитесь в указанный контекст плана набора и выполните всю мою логику тестирования (воспроизведение звуковых файлов, прослушивание нажатий клавиш и т.

Я написал библиотеку файлов вызовов Asterisk, которая чрезвычайно облегчает такое тестирование. Там тоже много документации / примеров, посмотрите здесь: http://pycall.org/. Это может вам помочь.

Удачи!

2 голосов
/ 05 января 2012

Это, очевидно, старый вопрос, поэтому есть большая вероятность, что, когда здесь были опубликованы оригинальные ответы, Asterisk не поддерживал модульное / интеграционное тестирование в той степени, в которой это происходит сегодня (хотя API Unit Test Framework вступил в силу 12 / 22/09, чтобы, по крайней мере, существовал).

Среда модульного тестирования (электронное письмо Дэвида из списка разработчиков здесь ) позволяет выполнять модульные тесты непосредственно в Asterisk. Тесты зарегистрированы в рамках и могут быть выполнены / просмотрены через CLI. Поскольку это все часть Asterisk, тесты компилируются в исполняемый файл. Вам необходимо настроить Asterisk с параметром --enable-dev-mode и пометить тесты для компиляции с помощью инструмента menuselect (некоторые приложения, такие как app_voicemail, автоматически регистрируют тесты - но их меньшинство).

Написание модульных тестов довольно простое - и хотя оно (очевидно) не так полно, как коммерческая среда модульных тестов, оно выполняет свою работу и может быть улучшено по мере необходимости.

Скорее всего, это не то, что хочет использовать большинство пользователей Asterisk - хотя разработчикам Asterisk настоятельно рекомендуется проверить это. Как пользователи, так и разработчики, вероятно, заинтересованы в интеграционных тестах, которые предоставляет Asterisk Test Suite . По своей сути Test Suite представляет собой сценарий python, который выполняет другие сценарии - будь то lua, python и т. Д. Test Suite поставляется с набором библиотек python и lua, которые помогают организовать и выполнить несколько экземпляров Asterisk. Разработчики тестов могут использовать сторонние приложения, такие как интерфейсы SIPp или Asterisk (AMI, AGI) или их комбинации, для тестирования размещенных экземпляров Asterisk.

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

Обратите внимание, что установка Test Suite может быть немного сложнее - Лейф написал хороший пост в блоге о настройке Test Suite здесь .

0 голосов
/ 14 августа 2015

Модульное тестирование в отличие от интеграционного тестирования означает, что ваш код должен быть сконструирован таким образом, чтобы сама логика была изолирована от внешних зависимостей. Вы сказали, что «файл конфигурации - такой же язык программирования, как и все остальное», но в этом-то и дело - настоящие языки имеют не только поток управления, но и возможности абстракции, которые позволяют вам писать логику так, чтобы ее можно было тестировать модулем. Вот почему я держу логику как можно дальше от звездочки.

Для тестирования интеграции, сценарий linphonec для управления вашим приложением и grep консоли звездочки, чтобы увидеть, что он делает. Вы можете использовать Docker и запускать временные экземпляры звездочек для каждого теста.

0 голосов
/ 01 февраля 2010

Вы можете создать набор конкретных сценариев и использовать команду MixMonitor от Asterisk для записи этих вызовов.Это позволит вам установить набор звуковых записей, которые были бы нормативными для вашей системы для этих тестов, и использовать инструмент автоматического сравнения звуковых файлов (возможно, что-то из сравнение-звуковых файлов-если-не-полностью-идентичных ?), Чтобы изучить результаты.Просто идея.

...