我有一个带有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(