phpunit-parallel

command module
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 23, 2026 License: Unlicense Imports: 1 Imported by: 0

README

phpunit-parallel

License Release Homebrew Go Version CI CD GitHub issues GitHub pulls

A CLI tool to run PHPUnit tests in parallel, with a beautiful terminal UI.

Features

  • Parallel test execution - Distributes tests across multiple workers using round-robin scheduling
  • Interactive terminal UI - Real-time progress bars, per-worker status, and ETA powered by Bubble Tea
  • Rerun failed tests - Press r to rerun only failures, or a to rerun all tests, without leaving the UI
  • Deprecation tracking - Parses and displays PHPUnit deprecation warnings with source locations
  • Lifecycle hooks - Run custom commands before/after test runs and before/after each worker
  • Docker support - Run each worker in its own container using hooks and the {} placeholder
  • TeamCity output - Native TeamCity format for CI integration (JetBrains TeamCity, GitHub Actions, etc.)
  • Runner configuration file - Define reusable settings in phpunit-parallel.xml
  • PHPUnit compatible - Reads your existing phpunit.xml / phpunit.xml.dist and preserves all settings
  • Test filtering - Filter tests with --filter, --group, and --exclude-group
  • Copy errors to clipboard - Copy individual or all errors/deprecations with keyboard shortcuts
  • IDE integration - Included PHP wrapper script for PhpStorm interop
  • Cross-platform - Pre-built binaries for Linux and macOS (amd64/arm64)

Installation

brew install alexdempster44/tap/phpunit-parallel
Using Go
go install github.com/alexdempster44/phpunit-parallel@latest
From Releases

Download the pre-built binary for your platform from the releases page.

Usage

# Run with default settings (uses phpunit.xml in current directory)
phpunit-parallel

# Specify number of workers
phpunit-parallel -w 4

# Specify PHPUnit configuration file
phpunit-parallel -c phpunit.xml.dist

# Filter tests
phpunit-parallel --filter testLogin
phpunit-parallel --group integration
phpunit-parallel --exclude-group slow

# Use TeamCity output format (for CI)
phpunit-parallel --teamcity
CLI Flags
Flag Short Default Description
--workers -w CPU count - 2 Number of parallel workers
--configuration -c phpunit.xml PHPUnit configuration file
--runner-config Runner configuration file (phpunit-parallel.xml)
--teamcity false Output in TeamCity format
--filter Filter which tests to run (passed to PHPUnit)
--group Only run tests from the specified group(s)
--exclude-group Exclude tests from the specified group(s)
--test-suffix Test.php File suffix for test discovery
--config-build-dir .phpunit-parallel Directory for generated per-worker configs
--before Command to run once before all workers start
--before-worker Command to run before each worker starts
--run-worker vendor/bin/phpunit Command to run PHPUnit for each worker
--after-worker Command to run after each worker completes
--after Command to run once after all workers complete
--version Display version
Environment Variables
Variable Description
PHPUNIT_PARALLEL_WORKERS Override the number of workers (lower precedence than --workers)

The following environment variables are exposed to hooks and workers:

Variable Description
PARALLEL Always 1 when running under phpunit-parallel
PROJECT Project directory name
RUNNER_PID PID of the runner process
WORKER_ID Worker identifier (per-worker hooks and run-worker only)
WORKER_COUNT Total number of workers

Terminal UI

The interactive TUI features a three-panel layout:

  • Top-left - Running tests panel (switches to a summary after completion)
  • Bottom-left - Per-worker progress bars with percentage and test counts
  • Right - Error and deprecation panel with expandable details
Keyboard Shortcuts
Key Action
Tab Switch between panels
Up / k Navigate up
Down / j Navigate down
Enter / Space Toggle expand/collapse
Right / l Expand error details
Left / h Collapse error details
PgUp / PgDn Page up/down
c Copy selected error to clipboard
C Copy all errors/deprecations (opens modal)
r Rerun failed tests (after completion)
a Rerun all tests (after completion)
q / Ctrl+C Quit

When piped or redirected, output falls back to a plain-text format automatically.

Runner Configuration File

For reusable or complex setups, create a phpunit-parallel.xml file:

<runner>
    <workers>4</workers>
    <configuration>phpunit.xml</configuration>
    <config-build-dir>.phpunit-parallel</config-build-dir>
    <test-suffix>Test.php</test-suffix>
    <before>echo "Starting test run"</before>
    <before-worker>echo "Setting up worker $WORKER_ID"</before-worker>
    <run-worker>vendor/bin/phpunit</run-worker>
    <after-worker>echo "Cleaning up worker $WORKER_ID"</after-worker>
    <after>echo "Test run complete"</after>
</runner>

Use it with:

phpunit-parallel --runner-config phpunit-parallel.xml

If phpunit-parallel.xml exists in the current directory, it is loaded automatically.

Docker Example

Run each worker in its own Docker container:

<runner>
    <workers>4</workers>
    <before-worker>docker run -d --name "phpunit-worker-$WORKER_ID" -v "$(pwd)":/app -w /app php:8.3-cli sleep infinity</before-worker>
    <run-worker>docker exec "phpunit-worker-$WORKER_ID" php vendor/bin/phpunit {}</run-worker>
    <after-worker>docker rm -f "phpunit-worker-$WORKER_ID"</after-worker>
</runner>

The {} placeholder in run-worker is replaced with the generated PHPUnit arguments (configuration path, flags, filters, etc.).

Output Modes

Mode When Description
Interactive TUI Terminal (default) Full UI with progress bars, panels, and keyboard navigation
Plain text Piped/redirected output Structured [worker N] and [summary] lines
TeamCity --teamcity flag TeamCity service messages for CI integration

Building from Source

# Clone the repository
git clone https://github.com/alexdempster44/phpunit-parallel.git
cd phpunit-parallel

# Build
go build -o bin/phpunit-parallel .

# Or using just
just build

License

This is free and unencumbered software released into the public domain. See the LICENSE file for details.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL