perl 如何让Makemaker并行运行测试?

lkaoscv7  于 2022-12-13  发布在  Perl
关注(0)|答案(1)|浏览(193)

我有一个包含MakeMaker生成的Makefile的模块,我想并行运行我的单元测试(make test)。Test::Harness接受例如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并行运行这个项目的测试?

v8wbuo2f

v8wbuo2f1#

看过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

相关问题