如何针对一组文件单次运行PHPUnit并生成Clover覆盖率报告?
解决方案
直接调整circleci tests run的--command参数,让xargs将整个测试文件列表一次性传递给PHPUnit,而非逐个执行:
TESTS_TO_RUN=$(./vendor/bin/phpunit-finder) echo "$TESTS_TO_RUN" | circleci tests run --command="XDEBUG_MODE=coverage xargs -d\" \" ./vendor/bin/phpunit --coverage-clover clover.xml" --verbose --split-by=timings
关键修改说明
- 移除
xargs的-I{}选项:该选项会让xargs逐个替换并执行命令,导致每个测试文件单独触发PHPUnit,覆盖率文件反复被覆盖。 - 保留
-d" ":指定空格作为文件列表的分隔符,确保CircleCI拆分后的测试文件能被xargs正确解析为多个参数。 - 移除PHPUnit命令中的
{}:现在PHPUnit会接收xargs传递的所有测试文件作为参数,一次性运行整个分组的测试并生成一份完整的clover.xml。
额外提示
如果你的测试文件名包含空格(不推荐),可将分隔符改为换行符,调整命令如下:
TESTS_TO_RUN=$(./vendor/bin/phpunit-finder) echo "$TESTS_TO_RUN" | circleci tests run --command="XDEBUG_MODE=coverage xargs -n 1000 ./vendor/bin/phpunit --coverage-clover clover.xml" --verbose --split-by=timings
-n 1000表示一次性传递所有参数(只要参数数量不超过1000,通常足够覆盖分组内的测试文件数量)。
内容的提问来源于stack exchange,提问作者ikoolik
相关产品推荐
相关产品推荐

