我使用 Hudson 来自动化测试一个非常重要的产品。我希望我的测试主机能够运行理论上支持的尽可能多的并发构建,但 excel 测试除外,它必须在任何时候每台机器运行一个。可以同时运行任意数量的非 excel 测试,但是每台机器一次最多只能运行一个 excel 测试。
背景:
我的大多数测试都是普通的单元测试——我可以轻松地并行运行这种东西。不幸的是,我的单元测试计划中的一个重要且耗时的部分包括已在 Excel 中实现的测试。
您可能认为在 Excel 中实现测试很疯狂——实际上有一个重要原因:我们的大多数用户通过 Excel 访问我们的系统。Excel 有自己古怪的数据处理方式,因此保证我们的东西适用于 Excel 用户的唯一方法是从字面上实现我们的 reg-test 我们的应用程序 Excel。
我编写了一个测试运行工具,它可以让我轻松启动一组 excel 测试:每个测试都是一个 .xls 文件。每个组都是一个充满 excel 文件的文件夹。我有大约 30 个组需要运行以进行端到端测试。我的工具将每个测试的结果转换为 Hudson 能够理解的 JUnit 样式 XML。测试使用 pywin32com 库来自动化 excel。当它们自己运行时,它们是可靠的。
我有一组专门用于运行测试的计算机。每台机器都是四核的,理论上可以同时运行很多东西。不幸的是,我发现 COM 不能用于一次安全地控制每台机器超过 1 个 excel。
也就是说,如果第二个构建星尝试通过 COM 与 Excel 对话,它可能会干扰已经运行的构建并导致两个测试都失败。
我可以在机器允许的范围内运行尽可能多的其他非 excel 进程,但我需要找到一种方法,以便 Hudson 不会尝试在任何一台机器上同时启动超过 1 个需要 excel 的进程。