Test :: Class测试可以并行运行吗? (或如何分解超类测试)

时间:2013-06-15 22:07:00

标签: perl testing

在我为Test::Class阅读的所有教程中,似乎有一个加载所有类的跑步者脚本。我认为从Test::Harness的角度来看,这只是一个巨大的考验。我不认为它可以并行化跑步者内部的测试。

我的X问题是我试图在测试子类时分解超类行为。每个子类都应该有自己的子类测试(可以并行化),但也要运行从超类继承的行为。那是怎么回事?

编辑:我发现这些来自2007年的帖子似乎暗示我要求的是不兼容/不可能的。从那时起的任何更新?

2 个答案:

答案 0 :(得分:5)

Test::Class并不支持并行化。可能最简单的解决方案是为每个测试类(或测试类的逻辑组)分别使用.t个运行程序,并使用例如prove -j9

如果您真的想要并行运行所有测试,您可以编写一个简单的脚本来为每个测试类自动生成.t文件。您在单个perl解释器中失去了运行多个测试类的性能优势,但并行化可能会补偿额外的启动开销。而且我认为无论Test::Class尝试提供多少测试隔离,都无法保证在Perl中。一旦你开始利用修改符号表进行模拟等目的,你的测试将开始相互干扰,除非你总是得到正确的清理。在单独的perl解释器中运行每个测试是提供有保证隔离的更好方法。

答案 1 :(得分:3)

为了使Test :: Class并行,我使用了以下机制。希望它可以帮到你。

我已经使用 Parallel::ForkManager 模块来调用测试。但是

参数化 TEST_METHOD 环境变量,以便运行所需的测试

在每个帖子中并行

这提供了其他测试之间的隔离,因为每个测试都是独立调用的,并且

管理线程进程以等待所有子进程完成