Skip to content

mll-lab/test-splitter

 
 

Repository files navigation

PHPUnit test case splitter

PHP versions: 8.1|8.2|8.3|8.4 Latest Stable Version License Total Downloads

Continuous Integration Psalm level 1

Have you got a slow running test suite? Are existing test parallelisation tools (e.g. paratest) not suitable as you need separate database instances?

If so PHPUnit test case splitter might help. This splits tests into batches in a deterministic way. Each batch of tests can run in separate instances (e.g. by using a matrix in github actions).

Usage

To use. Install:

composer require --dev dave-liddament/test-splitter

Test splitter (tsplit) takes two arguments: batch, and number of batches. The list of tests is piped into stdin.

To split the tests into 4 batches and run the first batch you can do:

vendor/bin/phpunit --filter `vendor/bin/phpunit --list-tests | vendor/bin/tsplit 1 4`

To run the second batch you'd use:

vendor/bin/phpunit --filter `vendor/bin/phpunit --list-tests | vendor/bin/tsplit 2 4`

Github actions

Add this to your github actions:

jobs:
  tests:
  
    strategy:
      fail-fast: false
      matrix: 
        test-batch: [1, 2, 3, 4]

    steps: 
      # Steps to checkout code, setup environment, etc

      - name: "Tests batch ${{ matrix.test--batch }}"
        run: vendor/bin/phpunit --filter `vendor/bin/phpunit --list-tests | vendor/bin/tsplit ${{ matrix.test-batch }} 4`

This will split the tests over 4 different jobs.

Additional documentation

About

Splits PHPUnit tests into batches

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 91.7%
  • Dockerfile 4.5%
  • Shell 3.8%