A zero-configuration parallel test runner for PHPUnit that speeds up test suites by running tests concurrently.
ParaTest is a parallel test runner for PHPUnit that executes PHPUnit tests concurrently across multiple processes. It solves the problem of slow test suites by leveraging parallelization to reduce overall test execution time, requiring no changes to existing test code.
PHP developers and teams using PHPUnit for testing who want to accelerate their test suite execution, particularly those with large or slow-running test collections in CI/CD pipelines.
Developers choose ParaTest for its zero-configuration approach, seamless integration with existing PHPUnit tests, and reliable combined code coverage reporting, making it the simplest way to add parallel testing to PHP projects.
:computer: Parallel testing for PHPUnit
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Works immediately with existing PHPUnit tests after installation; no additional bootstrap or configuration needed, as emphasized in the README's 'Zero Configuration' feature.
Supports parallelization by TestCase or by individual Test via the --functional flag, allowing granular control over test execution based on suite structure.
Aggregates code coverage reports from all parallel processes into a single report, simplifying integration with CI/CD tools without manual merging.
Provides TEST_TOKEN and UNIQUE_TEST_TOKEN environment variables for isolating resources like databases per test, preventing interference as detailed in the README examples.
Only actively maintains compatibility with the latest PHPUnit version, which can break projects using older versions, as admitted in the Versions section due to reliance on PHPUnit internals.
Does not support constants, static methods, or shared variables between test classes, requiring refactoring for dependent tests, as noted in the Caveats section.
Requires manual filesystem locking patterns for one-time setup across processes, adding complexity compared to PHPUnit's sequential execution, as explained in the Initial setup section.