如何告诉Makemaker并行运行测试



我有一个带有MakeMaker生成的Makefile的模块,我想并行运行我的单元测试(make test(。测试::线束接受例如HARNESS_OPTIONS=j4使用4个螺纹。但我不知道如何调整MakeMaker的测试目标来设置这个变量。

现在我可以在我的~/.bashrc中导出HARNESS_OPTIONS=j4,但在每次使用test::Harness的测试运行中强制导出似乎很奇怪。如果我有不应该在另一个项目中并行运行的测试,该怎么办?

使用make -j4 test,我看不到任何改进。make test运行

PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/*/*.t

所以我想,即使make将使用多个线程,Test::Harness也可能不支持这一点,或者make可能不会将此信息传递给Test::Harness。

目前这只是为了加快我的测试。我的模块是一个内部模块,我不太担心将此选项强加给该模块的任何用户。然而,如果我可以在例如一个我不提供的配置文件中定义这个选项,那也会起作用。

说到配置文件:我可以并行运行prove -j4 t/和测试。因此,可以选择告诉MakeMaker使用prove运行测试,但我也看不到配置方法。

如何告诉MakeMaker并行运行该项目的测试?

查看了MakeMaker的代码后,似乎没有办法明确告诉MakeMaker(始终(并行运行测试。它只是将问题中提到的行输出到makefile,其中唯一可配置的内容是详细的,以及要运行的测试文件。

然而,如果您只是想为单个测试运行设置一个环境变量,那么HARNESS_OPTIONS就可以很好地实现这一目的,只需在运行之前在终端中设置即可

export HARNESS_OPTIONS=j4
make test

这将使该选项在该终端会话中保持不变,或者对于仅一个命令,make HARNESS_OPTIONS=j4 test将作为一个oneliner工作。

(我最初是在自己寻找同样的东西时发现这个问题的,但在问题中忽略了HARNESS_OPTIONS,所以我把这个留给其他人参考:https://perldoc.perl.org/Test::Harness#HARNESS_OPTIONS(

最新更新