测试::类的测试可以并行运行吗?(或如何分离超类测试)

8
在我阅读的所有有关 Test::Class 的教程中,似乎都有一个运行脚本来加载所有类。从 Test::Harness 的角度来看,这只是一个巨大的测试。我认为它无法并行运行运行器内的测试。
我的问题是,当测试子类时,我正在尝试分解超类行为。每个子类都应该有自己的子类测试(可以并行),但也要继承自超类的行为。如何做到这一点?
编辑:我找到了这两篇2007年的帖子,似乎暗示着我所要求的是不兼容/不可能的。自那时以来有任何更新吗?

你可以看一下 forkprove,但我不确定它是否能够正确地与 Test::Class 一起使用。 - Taras
1
显然,Test::Harness确实可以控制并行测试执行:https://dev59.com/tGct5IYBdhLWcg3wmOZN - fenway
当然会。但我正在使用Test::Class,而不是Test::Harness。 - Mark Canlas
2个回答

5
Test::Class本身不支持并行处理。最简单的解决方案可能是为每个测试类(或逻辑测试类组)单独创建.t运行器,并使用例如prove -j9运行。
如果您真的想要并行运行所有测试,可以编写一个简单的脚本来自动生成每个测试类的.t文件。虽然这样做会失去在单个perl解释器中运行多个测试类的性能优势,但并行化可能会弥补额外的启动开销。我认为,无论Test::Class试图提供多少测试隔离,都无法保证在Perl中实现。一旦您开始利用修改符号表进行模拟等操作,除非您总是正确清理,否则您的测试将开始相互干扰。在单独的perl解释器中运行每个测试是提供保证隔离的更好方法。

3
为了使Test::Class并行化,我使用了以下机制。希望这对你有所帮助。
我使用了Parallel::ForkManager模块来调用测试。但我已经将TEST_METHOD环境变量进行了参数化,以便在每个线程中运行所需的测试。
这提供了对其他测试的隔离,因为每个测试都是独立调用的,并且线程进程被管理以等待所有子进程完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接