2010-01-31 18 views
5

Las pruebas de unidad y de integración se suelen realizar como parte de un proceso de desarrollo, por supuesto. Estoy buscando maneras de utilizar esta metodología en configuración de un sistema existente, en este caso el Asterisk soft PBX.Prueba de unidad/integración Configuración de asterisco

En el caso de Asterisk, el archivo de configuración es tanto un lenguaje de programación como cualquier otra cosa, completo con bucles, saltos, condicionales, etc., y puede volverse bastante complejo. Los cambios en la configuración a menudo adolecen de los mismos problemas que los cambios en un producto de software complejo; puede ser difícil prever todos los efectos sin pruebas en su lugar. Se empeora por el hecho de que la naturaleza del sistema es comunicarse con entidades externas, es decir, hacer llamadas telefónicas.

Tengo algunas ideas para probar el sistema usando los archivos de llamadas (para crear llamadas específicas entre extensiones) mientras miro la interfaz del administrador para los eventos generados. Una prueba podría entonces buscar un resultado esperado, es decir, marcar * 99 # debería dar como resultado que se llamara a la aplicación Voicemail.

Los defectos son obvios: no prueba el resultado real, solo lo que el sistema piensa es el resultado, y probablemente requiera alguna modificación del sistema bajo prueba. También es muy difícil escribir estas pruebas con la robustez suficiente como para activar solo la salida esperada, especialmente si el sistema está en uso (es decir, hay otras llamadas en curso).

¿Es lo que quiero, un sistema de prueba para Asterisk, imposible? Si no es así, ¿tiene alguna idea sobre cómo hacer esto de manera razonable? Estoy dispuesto a dedicarle una buena cantidad de tiempo de desarrollo y publicar el resultado bajo una licencia amiga, pero no estoy seguro de la mejor manera de abordarlo.

Respuesta

2

Obviamente, esta es una vieja pregunta, por lo que hay muchas posibilidades de que cuando Asterisk no admitió las pruebas de unidad/integración en la medida en que lo hace hoy (aunque la API de Unit Test Framework entró en 22/12/09, por lo que, al menos, existió).

El marco de prueba de la unidad (el correo electrónico de David de la lista de desarrolladores here) le permite ejecutar pruebas unitarias directamente dentro de Asterisk. Las pruebas se registran en el marco y se pueden ejecutar/ver a través de la CLI. Como todo esto es parte de Asterisk, las pruebas se compilan en el archivo ejecutable. Tienes que configurar Asterisk con la opción --enable-dev-mode, y marcar las pruebas para la compilación usando la herramienta menuselect (algunas aplicaciones, como app_voicemail, registran pruebas automáticamente, pero son la minoría).

Las pruebas de unidad de escritura son bastante sencillas, y aunque (obviamente) no está tan completo como un marco de pruebas de unidad comercial, hace el trabajo y puede mejorarse según sea necesario.

Lo más probable es que no sea lo que la mayoría de los usuarios de Asterisk querrán usar, aunque los desarrolladores de Asterisk están muy animados a que lo comprueben. Tanto los usuarios como los desarrolladores probablemente estén interesados ​​en las pruebas de integración, que ofrece el Asterisk Test Suite. En esencia, el Test Suite es un script de Python que ejecuta otros scripts, ya sean lua, python, etc. El Test Suite viene con un conjunto de bibliotecas de python y lua que ayudan a organizar y ejecutar múltiples instancias de Asterisk. Los escritores de prueba pueden usar aplicaciones de terceros como SIPp o Asterisk (AMI, AGI) o una combinación de las mismas para probar las instancias alojadas de Asterisk.

Actualmente, hay cerca de 200 pruebas en el conjunto de pruebas, y se agregan más de forma regular. Obviamente, podría escribir sus propias pruebas que ejerzan su configuración de Asterisk y que el conjunto de pruebas las administre. Si son lo suficientemente genéricas, también puede enviarlas para su inclusión en el paquete de pruebas.

Tenga en cuenta que el Test Suite puede ser un poco complicado de configurar: Leif escribió una buena publicación en el blog sobre la configuración del Test Suite here.

+0

Corrígeme si me equivoco, pero el Test Suite es para que los desarrolladores de Asterisk prueben Asterisk, mientras que la pregunta era sobre probar un sistema construido sobre Asterisk – nafg

+0

Se puede usar para una variedad de propósitos. Asterisk Test Suite orquesta una instancia de Asterisk, utilizando la configuración de la máquina + algunas sustituciones. Eso incluye manejar Asterisk con llamadas simuladas, verificar eventos, etc. Varias personas lo usan para verificar su configuración entre actualizaciones; basado en la pregunta de OP, parecía ser una posibilidad. –

3

Bueno, depende de lo que está probando. Hay muchas maneras de manejar este tipo de cosas. Mi preferencia es usar los archivos de llamadas de Asterisk incluidos con el código de marcado. EG: Crear un archivo de llamadas para marcar un número público, una vez que se responde, volver al contexto de plan de marcado especificado y realizar toda mi lógica de prueba (reproducir archivos de sonido, escuchar presionar teclas, etc.)

Escribí una llamada de Asterisk biblioteca de archivos que hace que este tipo de pruebas sea extremadamente fácil. También tiene mucha documentación/ejemplos, compruébalo aquí: http://pycall.org/. Eso puede ayudarte.

¡Buena suerte!

+1

Esa no es una mala biblioteca. La mayoría de las pruebas que imagino son del tipo "el usuario llama a este número corto, verifica que se realiza una llamada a este otro número en la línea troncal" o "el usuario llama a este número, verifica que la llamada se conteste, se reproduce un archivo de sonido" y una entrada de base de datos creada ". Los efectos secundarios son (relativamente) fáciles de verificar, la experiencia del usuario no tanto. :/ –

+0

En ese caso, querrá usar AMI (Asterisk Manager Interface), ya que puede recuperar eventos de estado en tiempo real para ver si la llamada se realizó correctamente, etc. Consulte los documentos aquí: http: //www.voip-info.org/wiki/view/Asterisk+manager+API – rdegges

0

Puede crear un conjunto de escenarios específicos y usar el comando MixMonitor de Asterisk para grabar estas llamadas. Esto le permitiría establecer un conjunto de grabaciones de sonido que fueran normativas para su sistema para estas pruebas, y usar una herramienta de comparación automática de archivos de sonido (¿Quizás algo de comparing-sound-files-if-not-completely-identical?) Para examinar los resultados. Solo una idea.

+0

Eso no funcionará. Hay muchas variables cuando se trata de sonido en llamadas. La estática, el tiempo y otros problemas harán que esto sea casi imposible. – rdegges

+0

No tengo mucha experiencia con las huellas dactilares de audio, y no tengo idea de la granularidad con la que operaría la comparación. Sin embargo, si llama desde un cuadro de asterisco a un cuadro de asterisco en una red local, que es lo que imagino que usaría para las pruebas unitarias, supongo que muchas de las variables que sugiere serían más parecidas a las constantes. Dicho esto, yo también no estoy seguro de cuán efectivo sería este tipo de pruebas unitarias, solo dando sugerencias. : -). –

0

Pruebas unitarias en lugar de pruebas de integración significa que se supone que su código debe ser arquitectónico, por lo que la lógica está aislada de las dependencias externas. Usted dijo "el archivo de configuración es tanto un lenguaje de programación como cualquier otra cosa", pero esa es la cuestión: los lenguajes reales no solo tienen flujo de control sino también capacidades de abstracción, que le permiten escribir la lógica de una manera que puede ser probada por unidades. Es por eso que mantengo la lógica fuera del asterisco tanto como sea posible.

Para realizar pruebas de integración, ejecute la secuencia de comandos linphonec y guíe la consola del asterisco para ver qué está haciendo. Puede usar la ventana acoplable y activar instancias de asterisco temporales para cada prueba.

Cuestiones relacionadas