2

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

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

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

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

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

4

1 回答 1

0

没有开箱即用的或根据您的需求定制的解决方案,我知道它可以解决您面临的问题。

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

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

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

如果您使用nose(即对python 进行更好的测试),您将能够使用属性选择器插件来标记具有各种属性的测试。

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

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

考虑到以上所有因素,我将如何处理这种情况:

  • 基于鼻子创建一个测试包装类
    • 可以标记
    • 执行程序并捕获结果输出
    • 将该输出转换为 XUnit
  • 为每个测试创建一个包装器
    • 弄清楚如何自动化这个过程,因为它会很乏味
  • 构建一个测试执行工具,它
    • 启动一个或多个虚拟机
    • 加载并运行测试包装器
    • 捕获结果
于 2013-02-26T23:26:37.547 回答