SpeedTrap 直接在控制台中报告运行缓慢的 PHPUnit 测试。
许多因素会影响测试执行时间。未正确隔离可变延迟(数据库、网络等)的测试,甚至测试机器上的基本负载都会导致测试执行时间波动。
SpeedTrap 有助于识别缓慢的测试,但无法解释这些测试缓慢的原因。考虑使用 Blackfire.io 来分析测试套件以专门识别缓慢的代码。
SpeedTrap 使用 Composer 安装。将其添加为require-dev
依赖项:
composer require --dev johnkary/phpunit-speedtrap
通过将以下代码添加到项目的phpunit.xml
文件中来启用所有默认值:
<phpunit bootstrap="vendor/autoload.php"> ... <扩展名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </扩展名> </phpunit>
现在运行测试套件。如果一项或多项测试执行超过缓慢阈值(默认为 500 毫秒),SpeedTrap 将在所有测试完成后在控制台中报告这些测试。
SpeedTrap 还支持以下参数:
SlowThreshold - 测试被视为“慢”时的毫秒数(默认值:500ms)
reportLength - 报告中包含的慢速测试数量(默认值:10 个测试)
每个参数都在phpunit.xml
中设置:
<phpunit bootstrap="vendor/autoload.php"><!-- ...其他套件配置在这里... --><extensions> <扩展类=“JohnKaryPHPUnitExtensionSpeedTrap”> <参数> <数组> <元素键=“慢阈值”> <整数>500</整数> </元素> <元素键=“报告长度”> <整数>10</整数> </元素> </数组> </参数> </扩展名> </扩展名> </phpunit>
有些项目有一些复杂的测试,需要很长时间才能运行。可以为各个测试用例设置不同的慢度阈值。
注解@slowThreshold
可以为每个测试用例设置自定义的慢度阈值。该数字可能高于或低于默认阈值,并且用于代替该特定测试的默认阈值。
类 SomeTestCase 扩展 PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */公共函数 testLongRunningProcess() {// 执行时间较长的代码} }
设置@slowThreshold 0
永远不会将该测试报告为慢。
在 phpunit.xml 中启用时,用于缓慢测试的 SpeedTrap 配置文件。但是使用名为PHPUNIT_SPEEDTRAP
的环境变量可以启用或禁用该扩展:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI 很流行将新代码推送到存储库后在云中运行测试。
步骤 1) 在 phpunit.xml 中启用 SpeedTrap,但设置PHPUNIT_SPEEDTRAP="disabled"
以在运行测试时禁用分析。
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="禁用" /> </php> <扩展名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </扩展名> </phpunit>
步骤 2) 使用PHPUNIT_SPEEDTRAP="enabled"
配置.travis.yml
,以分析在 Travis CI 上运行时的缓慢测试:
语言: php php: - 7.3环境: - PHPUNIT_SPEEDTRAP="启用"
步骤 3) 查看 Travis CI 构建输出并阅读控制台中打印的缓慢度报告。
Travis CI 文档 - 环境变量
步骤 1) 在 phpunit.xml 中启用 SpeedTrap。缓慢报告将在所有测试套件执行期间输出。
<phpunit bootstrap="vendor/autoload.php"> ... <扩展名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </扩展名> </phpunit>
步骤 2) 使用PHPUNIT_SPEEDTRAP="disabled"
配置.travis.yml
以在 Travis CI 上运行时关闭分析:
语言: php php: - 7.3环境: - PHPUNIT_SPEEDTRAP="禁用"
步骤 3) 查看 Travis CI 构建输出并确认控制台中未打印速度慢报告。
当您只想偶尔分析一次缓慢的测试时很有用。
步骤 1) 设置 phpunit.xml 以启用 SpeedTrap,但通过设置PHPUNIT_SPEEDTRAP="disabled"
来禁用慢速分析,如下所示:
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="禁用" /> </php> <扩展名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </扩展名> </phpunit>
步骤 2) 从命令行执行phpunit
时,仅通过传递环境变量PHPUNIT_SPEEDTRAP="enabled"
来启用慢速分析,如下所示:
$ PHPUNIT_SPEEDTRAP=启用 ./vendor/bin/phpunit
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> <扩展名> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </扩展名> </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 许可证下使用。