单元/集成测试Asterisk配置

时间:2010-01-31 21:41:36

标签: unit-testing configuration integration-testing asterisk

单元和集成测试通常是作为开发过程的一部分执行的。我正在寻找在现有系统的配置中使用此方法的方法,在本例中为Asterisk soft PBX

对于Asterisk,配置文件与其他任何编程语言一样多,包括循环,跳转,条件等,并且可能变得非常复杂。对配置的更改通常会遇到与复杂软件产品更改相同的问题 - 如果没有测试,很难预见所有效果。由于系统的性质是与外部实体通信,即拨打电话,情况变得更糟。

我有一些关于使用调用文件测试系统的想法(在扩展之间创建特定调用),同时观察生成事件的管理器界面。然后,测试可以观察预期结果,即拨打* 99#会导致语音邮件应用程序被调用。

缺陷很明显 - 它不测试实际结果,只测试系统认为的结果,并且可能需要对被测系统进行一些修改。要足够强大地编写这些测试以仅触发预期输出也是非常困难的,尤其是在系统正在使用中时(即正在进行其他调用)。

我想要的是Asterisk的测试系统,不可能吗?如果没有,您是否有任何关于如何以合理的方式解决这个问题的想法?我愿意花费相当多的开发时间并在友好许可下发布结果,但我不确定最好的方法。

3 个答案:

答案 0 :(得分:3)

嗯,这取决于你在测试什么。有很多方法可以处理这类事情。我的偏好是使用与拨号方案代码捆绑在一起的Asterisk Call Files。 EG:创建一个调用文件来拨打一些公共号码,一旦被应答,跳回指定的拨号方案上下文并执行我的所有测试逻辑(播放声音文件,听取按键等)。

我写了一个Asterisk调用文件库,这使得这种测试非常简单。它也有很多文档/示例,请在此处查看:http://pycall.org/。这可能对你有帮助。

祝你好运!

答案 1 :(得分:2)

这显然是一个老问题,因此很有可能在这里发布原始答案时,Asterisk不支持单位/集成测试到今天的程度(虽然单元测试框架API已经进入12 / 22/09,至少确实存在。)

单元测试框架(来自开发人员列表here的David的电子邮件)允许您直接在Asterisk中执行单元测试。测试在框架中注册,可以通过CLI执行/查看。由于这是Asterisk的全部内容,因此测试将编译为可执行文件。您必须使用--enable-dev-mode选项配置Asterisk,并使用menuselect工具标记测试以进行编译(某些应用程序,如app_voicemail,自动注册测试 - 但它们是少数)。

编写单元测试非常简单 - 虽然它(显然)不像商业单元测试框架那样功能齐全,但它可以完成工作并可以根据需要进行增强。

很可能不是大多数Asterisk用户想要使用的东西 - 尽管强烈鼓励Asterisk开发人员查看它。用户和开发人员可能都对Asterisk Test Suite提供的集成测试感兴趣。测试套件的核心是执行其他脚本的python脚本 - 无论是lua,python等.Test Suite附带了一组python和lua库,可帮助编排和执行多个Asterisk实例。测试编写者可以使用第三方应用程序(如SIPp或Asterisk接口(AMI,AGI)或其组合)来测试托管的Asterisk实例。

测试套件中现在有近200个测试,并且会定期添加更多测试。显然,您可以编写自己的测试来执行Asterisk配置并让它们由Test Suite管理 - 如果它们足够通用,您也可以提交它们以包含在Test Suite中。

请注意,测试套件设置起来有点棘手--Leif写了一篇关于设置测试套件here的好文章。

答案 2 :(得分:0)

您可以创建一组特定方案,并使用Asterisk的MixMonitor命令记录这些调用。这将使您能够为这些测试建立一套对您的系统具有规范性的录音,并使用自动声音文件比较工具(可能来自comparing-sound-files-if-not-completely-identical?)来检查结果。只是一个想法。