johnkary / phpunit-speedtrap
在您的PHPUnit测试套件中查找并报告缓慢的测试
Requires
- php: >=7.1
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0
This package is auto-updated.
Last update: 2024-09-20 15:41:14 UTC
README
SpeedTrap在控制台中报告缓慢运行的PHPUnit测试。
许多因素会影响测试执行时间。如果一个测试没有正确地与变量延迟(数据库、网络等)隔离,甚至测试机器的基本负载也会导致测试执行时间波动。
SpeedTrap有助于识别缓慢的测试,但不能解释为什么这些测试会变慢。考虑使用Blackfire.io来对测试套件进行性能分析,以专门识别缓慢的代码。
安装
SpeedTrap通过Composer安装。将其添加为require-dev
依赖项
composer require --dev johnkary/phpunit-speedtrap
用法
通过将以下代码添加到项目的phpunit.xml
文件中启用所有默认设置
<phpunit bootstrap="vendor/autoload.php"> ... <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" /> </extensions> </phpunit>
现在运行测试套件。如果一个或多个测试执行超过缓慢阈值(默认为500ms),在所有测试完成后,SpeedTrap将在控制台中报告这些测试。
配置参数
SpeedTrap还支持以下参数
- slowThreshold - 测试被认为是“缓慢”的毫秒数(默认:500ms)
- reportLength - 报告中包含的缓慢测试数量(默认:10个测试)
每个参数都设置在phpunit.xml
中
<phpunit bootstrap="vendor/autoload.php"> <!-- ... other suite configuration here ... --> <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap"> <arguments> <array> <element key="slowThreshold"> <integer>500</integer> </element> <element key="reportLength"> <integer>10</integer> </element> </array> </arguments> </extension> </extensions> </phpunit>
每个测试用例的定制缓慢阈值
某些项目有几个复杂测试,运行时间较长。可以为单个测试用例设置不同的缓慢阈值。
注解@slowThreshold
可以为每个测试用例设置自定义的缓慢阈值。这个数字可能高于或低于默认阈值,并用于替代该特定测试的默认阈值。
class SomeTestCase extends PHPUnit\Framework\TestCase { /** * @slowThreshold 5000 */ public function testLongRunningProcess() { // Code that takes a longer time to execute } }
设置@slowThreshold 0
将永远不会报告该测试为缓慢。
使用环境变量禁用缓慢分析
当在phpunit.xml中启用时,SpeedTrap会对缓慢测试进行分析。但使用名为PHPUNIT_SPEEDTRAP
的环境变量可以启用或禁用扩展
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
用例:在开发中禁用分析,但在Travis CI中启用分析
Travis CI在将新代码推送到存储库后,在云端运行测试很受欢迎。
步骤1)在phpunit.xml中启用SpeedTrap,但设置PHPUNIT_SPEEDTRAP="disabled"
以在运行测试时禁用分析。
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" /> </extensions> </phpunit>
步骤2)配置.travis.yml
为PHPUNIT_SPEEDTRAP="enabled"
,在Travis CI上运行时对缓慢测试进行分析。
language: php php: - 7.3 env: - PHPUNIT_SPEEDTRAP="enabled"
步骤3)查看Travis CI构建输出并阅读控制台中打印的缓慢报告。
用例:在开发中启用分析,但在Travis CI中禁用
步骤1)在phpunit.xml中启用SpeedTrap。缓慢报告将在所有测试套件执行期间输出。
<phpunit bootstrap="vendor/autoload.php"> ... <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" /> </extensions> </phpunit>
步骤2)配置.travis.yml
为PHPUNIT_SPEEDTRAP="disabled"
,在Travis CI上运行时关闭分析。
language: php php: - 7.3 env: - PHPUNIT_SPEEDTRAP="disabled"
步骤3)查看Travis CI构建输出并确认控制台中没有打印缓慢报告。
用例:仅通过命令行按需启用SpeedTrap
当您只想偶尔分析缓慢测试时很有用。
步骤1)设置phpunit.xml以启用SpeedTrap,但通过设置PHPUNIT_SPEEDTRAP="disabled"
禁用缓慢分析,如下所示
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" /> </extensions> </phpunit>
步骤2)从命令行执行phpunit
时,仅为此次运行启用缓慢分析,通过传递环境变量PHPUNIT_SPEEDTRAP="enabled"
,如下所示
$ PHPUNIT_SPEEDTRAP=enabled ./vendor/bin/phpunit
与Symfony框架一起使用
Symfony 框架附带了一个名为 symfony/phpunit-bridge 的包,该包会安装它自己的 PHPUnit 版本,并 忽略 在您的项目的 composer.json 或 composer.lock 文件中定义的内容。使用命令 ls vendor/bin/.phpunit/
查看它安装的 PHPUnit 版本。
symfony/phpunit-bridge 允许通过环境变量 SYMFONY_PHPUNIT_REQUIRE
在安装 phpunit 时定义额外的依赖。
为脚本 simple-phpunit
设置环境变量的最简单方法是使用 phpunit.xml.dist。
<phpunit bootstrap="vendor/autoload.php"> <php> <env name="SYMFONY_PHPUNIT_REQUIRE" value="johnkary/phpunit-speedtrap:^4"/> <env name="SYMFONY_PHPUNIT_VERSION" value="9"/> </php> <extensions> <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" /> </extensions> </phpunit>
按照上述示例,现在运行 vendor/bin/simple-phpunit
将会安装最新的 PHPUnit 9 版本,并要求安装最新的 phpunit-speedtrap v4。
开发
按照以下步骤添加新功能或开发您自己的分支:
# Get source code (or replace with your fork URL)
$ git checkout https://github.com/johnkary/phpunit-speedtrap.git phpunit-speedtrap
# Install dev dependencies
$ cd phpunit-speedtrap
$ composer install
# Run test suite to verify code runs as expected
$ vendor/bin/phpunit
灵感
SpeedTrap 是受 RSpec 的 --profile
选项的启发,该选项显示关于慢速测试的反馈。
许可证
phpunit-speedtrap 在 MIT 许可证下可用。