如何解决PHP项目测试时间过长的问题?使用liuggio/fastest可以!

可以通过一下地址学习composer学习地址

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提供了设置环境变量的方法,以便正确选择数据库:

  1. 在测试开始时设置Cookie、GET参数或http头部。
  2. 在应用入口点配置环境变量。

总结

使用liuggio/fastest显著提高了我的PHP项目的测试效率。通过并行执行测试,我将测试时间从30分钟缩短到了7分钟,这极大地提升了开发和迭代的速度。如果你也在为测试时间过长而苦恼,不妨尝试一下liuggio/fastest这个强大的工具。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享