【问题标题】:Framework for collecting unit test output from disparate executables?从不同的可执行文件收集单元测试输出的框架?
【发布时间】:2013-02-26 22:46:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 虽然我还没有完全解决您概述的问题,但我已经解决了很多类似的问题。如果您想进一步讨论此问题,请随时与我联系。

标签: unit-testing testing automated-tests


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 感谢您的提示。我一直在研究鼻子。为了清楚起见,您提到的测试类将能够运行任何通用测试,例如使用子流程,对吗?那么包装器会为每个测试提供一个类的实例吗?我也对标签有点困惑。我将如何使用它?需要明确的是,我的计划是在独立的 VM 上运行每个测试,以避免检查冲突。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2012-05-11
  • 2018-06-17
相关资源
最近更新 更多