从不同的可执行文件收集单元测试输出的框架?

时间:2013-02-26 22:46:08

标签: unit-testing testing automated-tests

我负责清理旧的单元测试环境。现有环境包含大量可执行文件(1000多个shell脚本,已编译的二进制文件等),每个可返回代码0或1,并根据结果返回一些输出。测试也可能超时。一组PERL脚本通过,运行每个可执行文件,并将结果收集到一个大的XML文件中,该文件被呈现到网页中。这个系统效果很好,但不是很可扩展或快速。

除了清理/加速这个,我想实现并发测试。现在,测试一次运行一个。许多测试需要资源锁(端口,文件等),并且没有列表可以安全地同时运行。这里的一个选项是在某种VM中运行每一个。

是否有针对此类情况设计的框架或工具?如果我必须编写自己的全新系统,最好的方法是什么?我的限制是我无法更改1000多个测试可执行文件。我正在考虑像PyUnit这样的Python单元测试,它使用子进程或类似的方法来执行现有的测试,并将结果转换为Pythonic格式。这有点矫枉过正吗?这样的系统是否支持隔离进程以避免测试之间的死锁和竞争条件?在最糟糕的情况下,我正在考虑使用Python连接到几个VM中的一个来运行测试。

任何帮助或指导都将不胜感激。

编辑:Python并非绝对必要。另一种解决方案可能只是将测试集分成几个M大小的块,并通过SSH在独立的VM中运行每个测试,直到完成所有M大小的块。我希望有一个解决这个问题的工具。

1 个答案:

答案 0 :(得分:0)

没有开箱即用或根据您需要的解决方案进行定制,我知道这些解决方案可以解决您所面临的问题。

看看你的问题,有几个不同的需求很突出:

  • 测试标记
  • 测试执行
  • 测试结果捕获

您需要解决的第一个问题是如何识别和跟踪您可以在给定环境中同时执行的测试等。

如果您使用nose(即对python进行更好的测试),您可以使用Attribute selector plugin标记具有各种属性的测试。

nose还可以帮助您进行测试执行,当与测试标记结合使用时,可以让您并行运行测试等。使用nose,您应该能够运行外部可执行文件并根据其状态代码进行断言。

您面临的最后一个问题是如何以专有格式捕获测试输出并将其转换为可以提取到现成工具的格式。再说一遍,我相信鼻子可以帮到你。您可以构建一个nose plugin,它将采用您的专有格式并将其转换为XUnit格式并以此方式报告结果。

考虑到以上所有因素,我将采用以下方式解决这一问题:

  • 基于nose创建一个测试包装类
    • 可以标记
    • 执行程序并捕获结果输出
    • 将该输出翻译为XUnit
  • 为每个测试创建一个包装器
    • 弄清楚如何自动化这个过程,因为它会很乏味
  • 构建测试执行工具,其中
    • 旋转一个或多个虚拟机
    • 加载并运行测试包装器
    • 捕获结果