代码之家  ›  专栏  ›  技术社区  ›  Jakob Borg

单元/集成测试星号配置

  •  5
  • Jakob Borg  · 技术社区  · 15 年前

    当然,单元和集成测试通常作为开发过程的一部分进行。我正在寻找将这种方法应用于教学的方法 配置 Asterisk soft PBX .

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

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

    思考 这是结果,可能需要对测试中的系统进行一些修改。编写这些测试的健壮性也很难只触发预期的输出,特别是在系统正在使用的情况下(即,有其他调用正在进行)。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Matt Jordan    13 年前

    这显然是一个老问题,所以当原始答案发布在这里时,Asterisk很有可能没有像今天这样支持单元/集成测试(尽管单元测试框架API于2009年12月22日发布,因此至少确实存在)。

    单元测试框架(dev列表中David的电子邮件) here )允许您直接在星号内执行单元测试。测试在框架中注册,可以通过CLI执行/查看。因为这都是Asterisk的一部分,所以测试被编译到可执行文件中。您必须使用--enable dev mode选项配置星号,并使用menuselect工具标记要编译的测试(一些应用程序,如app_voicemail,会自动注册测试,但它们是少数)。

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

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

    请注意,测试套件的设置可能有点棘手-Leif写了一篇关于设置测试套件的好博客文章 here .

        2
  •  3
  •   rdegges    15 年前

    嗯,这取决于你在测试什么。处理这类事情有很多方法。我的首选是使用与拨号计划代码捆绑在一起的星号呼叫文件。例如:创建一个callfile来拨打某个公共号码,一旦应答,跳回指定的拨号计划上下文并执行我的所有测试逻辑(播放声音文件、监听按键等)

    http://pycall.org/ . 那可能对你有帮助。

    祝你好运

        3
  •  1
  •   Community CDub    8 年前

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

        4
  •  1
  •   nafg    9 年前

    与集成测试相反,单元测试意味着您的代码应该是结构化的,因此逻辑本身与外部依赖性是隔离的。您说过“配置文件和其他任何东西一样都是一种编程语言”,但事实就是如此——真正的语言不仅具有控制流,而且具有抽象功能,允许您以可以进行单元测试的方式编写逻辑。这就是为什么我尽可能把逻辑排除在星号之外。

    linphonec 来驱动你的应用程序,并grep星号控制台来查看它在做什么。 您可以使用docker,并为每个测试启动临时星号实例。