dave-liddament / test-splitter
将 PHPUnit 测试分割成多个部分,以便可以并行运行(例如在 GitHub Actions 上)
0.1.1
2021-09-28 18:30 UTC
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.1
- php-parallel-lint/php-parallel-lint: ^1.3
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.16.1
- vimeo/psalm: ^4.10
README
如果你的测试套件运行缓慢,现有的测试并行化工具(例如 paratest)不适合你,因为你需要独立的数据库实例呢?
如果是这样,PHPUnit 测试用例分割器可能有所帮助。它以确定性的方式将测试分割成批次。每个测试批次都可以在独立的实例中运行(例如,通过在 GitHub Actions 中使用矩阵)。
用法
要使用,请安装
composer require --dev dave-liddament/test-splitter
测试分割器(tsplit
)需要两个参数:批次和批次数。测试列表通过 stdin
传入。
要将测试分割成 4 个批次并运行第一个批次,你可以这样做
vendor/bin/phpunit --filter `vendor/bin/phpunit --list-tests | vendor/bin/tsplit 1 4`
要运行第二个批次,你可以这样做
vendor/bin/phpunit --filter `vendor/bin/phpunit --list-tests | vendor/bin/tsplit 2 4`
GitHub Actions
将此添加到你的 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`
这将把测试分割成 4 个不同的作业。