我有一个包含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并行运行这个项目的测试?
1条答案
按热度按时间v8wbuo2f1#
看过MakeMaker的代码后,似乎没有一种方法可以明确地告诉MakeMaker(总是)并行运行测试。它只是将问题中提到的行输出到makefile,唯一可配置的内容是冗长的,以及要运行的测试文件。
然而,如果您只想为单个测试运行设置一个环境变量,那么
HARNESS_OPTIONS
可以很好地满足此目的,只需在运行之前在终端中设置它即可这将使该选项对于该终端会话或仅对于单个命令持久存在,
make HARNESS_OPTIONS=j4 test
将作为oneliner工作。(我最初是在自己寻找同样的东西时发现这个问题的,但忽略了问题中的
HARNESS_OPTIONS
,所以我在这里留下这个作为参考:https://perldoc.perl.org/Test::Harness#HARNESS_OPTIONS