NAME
forkprove - forking prove
SYNOPSIS
forkprove -MMoose -MCatalyst -MDBIx::Class -j8 -lr t
DESCRIPTION
forkprove is a forking version of prove that allows you to preload
modules with "-M" and then run each test after forking, potentially
makes most of the tests to run faster without an overhead of loading the
same modules again and again, while having an isolated, clean testing
environment with a fork.
It works well with parallel testing as well, combined with "-j" option.
CONFIGURATION
You can specify an environment variable "PERL_FORKPROVE_IGNORE" to
contain a regular expression to ignore files to test with forkprove.
PERL_FORKPROVE_IGNORE=no-preload forkprove -lr t
This will run the tests with "/no-preload/" in its filenames and
directory and run with the standard perl execution via prove.
CAVEATS
Test::More
Do not try to preload Test::Builder and friends because doing so will
not output clean TAP.
Known patterns to fail
Following kind of tests might fail when tested under forkprove. There
are workarounds in forkprove to detect/fix some of them, so don't be
surprised if your tests still pass :)
* Tests that rely on the value of $FindBin::Bin.
* Tests that relies on "CHECK" and "INIT" block to run correctly.
WHY
Test::Aggregate allows you to create a nested TAP output by running a
whole bunch of ".t" files from a directory.
forkprove shares the basic idea, but it creates a whole new test
environment by making a copy of the process with fork for each test,
which means it could run your tests that rely on the singleton state
etc. without modifying the code to run with Test::Aggregate.
PERFORMANCE
Your mileage might vary, if forkprove runs your tests faster or not. For
lightweight modules, we've found that using forkprove doesn't make any
siginificant difference, due to the fact that fork overhead nullifies
the benefit of preloading modules.
On the other hand, test suite with Moose, Catalyst and Dist::Zilla seems
to run 80-100% faster with forkprove and "-jN" option.
AUTHOR
Tatsuhiko Miyagawa
SEE ALSO
prove, TAP::Parser