在php项目开发过程中,测试时间过长是一个常见的问题,特别是对于功能测试。测试时间长达30分钟,这不仅影响了开发效率,也让每次提交变得异常缓慢。在尝试了多种方法后,我发现了liuggio/fastest这个工具,它大大缩短了我的测试时间,将原本30分钟的测试时间缩减到了7分钟。
liuggio/fastest是一个简单而强大的工具,专门用于并行执行测试。它可以根据计算机的核心数自动创建多个进程,从而并行运行测试,显著提高测试速度。以下是如何使用liuggio/fastest来解决测试时间过长的问题:
安装liuggio/fastest
使用composer安装非常简单,只需运行以下命令:
composer require --dev 'liuggio/fastest:^1.6'
配置和使用
liuggio/fastest可以与任何测试工具结合使用,例如PHPUnit或Behat。以下是几种常见的使用方法:
使用ls命令
ls -d test/* | ./vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit {};"
使用find命令
find tests/ -name "*Test.php" | ./vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit {};"
使用phpunit.xml.dist文件
./vendor/liuggio/fastest/fastest -x phpunit.xml.dist "vendor/phpunit/phpunit/phpunit {};"
处理功能测试和数据库
对于功能测试,liuggio/fastest提供了环境变量,使得每个并行进程可以使用不同的数据库。这对于需要并行运行的测试非常有用。例如:
立即学习“PHP免费学习笔记(深入)”;
echo getenv('ENV_TEST_CHANNEL'); // 当前通道号 echo getenv('ENV_TEST_CHANNEL_READABLE'); // 可读的数据库名称 echo getenv('ENV_TEST_CHANNELS_NUMBER'); // 最大通道数 echo getenv('ENV_TEST_ARGUMENT'); // 当前运行的测试文件 echo getenv('ENV_TEST_INC_NUMBER'); // 当前测试的唯一编号 echo getenv('ENV_TEST_IS_FIRST_ON_CHANNEL'); // 是否是通道上的第一个测试
在测试前执行脚本
你还可以使用-b选项在测试前运行脚本,例如初始化数据库 schema 或加载 fixtures:
find tests/ -name "*Test.php" | ./vendor/liuggio/fastest/fastest -b"app/console doc:sch:create -e test" "vendor/phpunit/phpunit/phpunit {};";
生成和合并代码覆盖率
liuggio/fastest还支持生成并合并代码覆盖率报告:
# 安装phpcov composer require --dev phpunit/phpcov # 创建覆盖率文件目录 mkdir -p cov/fastest/ # 生成覆盖率文件 find tests/ -name "*Test.php" | vendor/liuggio/fastest/fastest "vendor/phpunit/phpunit/phpunit -c app {} --coverage-php cov/fastest/{n}.cov;" # 合并覆盖率文件 phpcov merge cov/fastest/ --html cov/merge/fastest/
浏览器测试支持
对于基于浏览器的测试(如Selenium或Mink),liuggio/fastest提供了设置环境变量的方法,以便正确选择数据库:
总结
使用liuggio/fastest显著提高了我的PHP项目的测试效率。通过并行执行测试,我将测试时间从30分钟缩短到了7分钟,这极大地提升了开发和迭代的速度。如果你也在为测试时间过长而苦恼,不妨尝试一下liuggio/fastest这个强大的工具。