atk4 / ergebnis-phpunit-slow-test-detector
提供检测phpunit/phpunit中慢速测试的功能。
此包尚无发布版本,信息有限。
README
本项目提供了一个用于检测phpunit/phpunit
中慢速测试的composer
包和一个Phar存档。
此扩展与以下版本的phpunit/phpunit
兼容
安装
使用 composer 安装
运行
composer require --dev ergebnis/phpunit-slow-test-detector
以将 ergebnis/phpunit-slow-test-detector
作为 composer
包安装,当使用 phpunit/phpunit:^8.5.19
、phpunit/phpunit:^9.0.0
或 phpunit/phpunit:^10.0.0
时。
作为 Phar 安装
当使用 phpunit/phpunit:^10.0.0
时,从最新发布版下载 phpunit-slow-test-detector.phar
。
使用方法
初始化扩展
在扩展可以检测 phpunit/phpunit
中的慢速测试之前,您需要对其进行初始化。初始化机制取决于您使用的 phpunit/phpunit
版本。
当使用 phpunit/phpunit:^8.5.19
时,将扩展作为 composer 包初始化
要使用 phpunit/phpunit:^8.5.19
将扩展作为 composer 包初始化,请调整您的 phpunit.xml
配置文件并配置 extensions
元素
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > + <extensions> + <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
当使用 phpunit/phpunit:^9.0.0
时,将扩展作为 composer 包初始化
要使用 phpunit/phpunit:^9.0.0
将扩展作为 composer 包初始化,请调整您的 phpunit.xml
配置文件并配置 extensions
元素
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > + <extensions> + <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
当使用 phpunit/phpunit:^10.0.0
时,将扩展作为 composer 包初始化
要使用 phpunit/phpunit:^10.0.0
将扩展作为 composer 包初始化,请调整您的 phpunit.xml
配置文件并配置 extensions
元素
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > + <extensions> + <bootstrap class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
使用 PHAR 启动扩展时配置 PHAR 作为单元测试
要使用 phpunit/phpunit:^10.0.0
启动扩展为 PHAR,调整您的 phpunit.xml
配置文件并配置 extensionsDirectory
属性,该属性位于 <phpunit>
元素
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" + extensionsDirectory="directory/where/you/saved/the/extension/phars" > + <extensions> + <bootstrap class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
配置扩展
您可以在 phpunit.xml
配置文件中使用以下选项来配置扩展
maximum-count
,一个int
,应报告的慢速测试的最大数量,默认为10
maximum-duration
,一个int
,在扩展将其视为慢速测试之前,测试的最大持续时间(毫秒),默认为500
配置机制取决于您使用的 phpunit/phpunit
版本。
使用 phpunit/phpunit:^8.5.19
配置扩展
以下示例在 phpunit/phpunit:^8.5.19
中配置慢速测试的最大数量为三个,所有测试的最大持续时间为 250 毫秒
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > <extensions> - <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"> + <arguments> + <array> + <element key="maximum-count"> + <integer>3</integer> + </element> + <element key="maximum-duration"> + <integer>250</integer> + </element> + </array> + </arguments> + </extension> </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
使用 phpunit/phpunit:^9.0.0
配置扩展
以下示例在 phpunit/phpunit:^9.0.0
中配置慢速测试的最大数量为三个,所有测试的最大持续时间为 250 毫秒
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > <extensions> - <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + <extension class="Ergebnis\PHPUnit\SlowTestDetector\Extension"> + <arguments> + <array> + <element key="maximum-count"> + <integer>3</integer> + </element> + <element key="maximum-duration"> + <integer>250</integer> + </element> + </array> + </arguments> + </extension> </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
使用 phpunit/phpunit:^10.0.0
配置扩展
以下示例在 phpunit/phpunit:^10.0.0
中配置慢速测试的最大数量为三个,所有测试的最大持续时间为 250 毫秒
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" > <extensions> - <bootstrap class="Ergebnis\PHPUnit\SlowTestDetector\Extension"/> + <bootstrap class="Ergebnis\PHPUnit\SlowTestDetector\Extension"> + <parameter name="maximum-count" value="3"/> + <parameter name="maximum-duration" value="250"/> + </bootstrap> </extensions> <testsuites> <testsuite name="unit"> <directory>test/Unit/</directory> </testsuite> </testsuites> </phpunit>
配置每个测试用例的最大持续时间
您可以使用以下方法配置单个测试用例的最大持续时间
- 使用
phpunit/phpunit:^10.0.0
时的Attribute\MaximumDuration
属性 - 使用
phpunit/phpunit:^8.5.19
或phpunit/phpunit:^9.0.0
时的 DocBlock 中的@maximumDuration
注释 - 使用
phpunit/phpunit:^8.5.19
或phpunit/phpunit:^9.0.0
时的 DocBlock 中的@slowThreshold
注释
以下示例将单个测试用例的最大持续时间配置为 5.000 ms、4.000 ms 和 3.000 ms
<?php declare(strict_types=1); use PHPUnit\Framework; use Ergebnis\PHPUnit\SlowTestDetector; final class ExtraSlowTest extends Framework\TestCase { /** */ #[SlowTestDetector\Attribute\MaximumDuration(5000)] public function testExtraExtraSlow(): void { // ... } /** * @maximumDuration 4000 */ public function testAlsoQuiteSlow(): void { // ... } /** * @slowThreshold 3000 */ public function testQuiteSlow(): void { // ... } }
注意
对 @slowThreshold
注释的支持仅用于帮助您从 johnkary/phpunit-speedtrap
迁移。它将在不久的将来被弃用并删除。
运行测试
当您已启动扩展时,您可以像通常一样运行您的测试
vendor/bin/phpunit
当扩展检测到慢速测试时,它将报告它们
PHPUnit 10.0.0 by Sebastian Bergmann and contributors. Runtime: PHP 8.1.0 Configuration: test/EndToEnd/Default/phpunit.xml Random Seed: 1676103726 ............. 13 / 13 (100%) Detected 11 tests that took longer than expected (500 ms). 1. 1.604 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#9 2. 1.505 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#8 3. 1.403 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#7 4. 1.303 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#6 5. 1.205 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#5 6. 1.103 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#4 7. 1.005 s Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#3 8. 905 ms Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#2 9. 805 ms Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#1 10. 705 ms Ergebnis\PHPUnit\SlowTestDetector\Test\EndToEnd\Default\SleeperTest::testSleeperSleepsLongerThanDefaultMaximumDurationWithDataProvider#0 There is 1 additional slow test that is not listed here. Time: 00:12.601, Memory: 8.00 MB OK (13 tests, 13 assertions)
理解测量的测试持续时间
测量 PHPUnit\Framework\TestCase::runBare()
方法的持续时间。
测量的持续时间包括在 PHPUnit\Framework\TestCase::setUp()
和 PHPUnit\Framework\TestCase::tearDown()
方法以及相应的 before
和 after
PHPUnit 测试钩子中花费的时间。
调用 PHPUnit\Framework\TestCase::setUpBeforeClass()
和 PHPUnit\Framework\TestCase::tearDownAfterClass()
方法时的时间不被测量,因为这不是针对每个测试,而是针对每个测试类。一个例外是在单独进程中运行的测试,在这种情况下,TestCase::setUpBeforeClass()
和 TestCase::tearDownAfterClass()
的持续时间被测量,因为这些方法在 TestCase::runBare()
方法中对每个测试执行](https://github.com/sebastianbergmann/phpunit/blob/10.0.0/src/Framework/TestRunner.php#L101)。
变更日志
此项目的维护者在 变更日志 中记录了此项目的显著更改。
贡献
此项目的维护者建议遵循 贡献指南。
行为准则
此项目的维护者要求贡献者遵守 行为准则。
一般支持政策
此项目的维护者提供有限的支持。
您可以通过赞助 @localheinz 或 为此项目相关的服务请求发票来支持此项目的维护。
PHP 版本支持政策
此项目支持具有 活动和安全支持 的 PHP 版本。
此项目的维护者在 PHP 版本首次发布后添加对其的支持,并在其达到安全支持结束时停止对其的支持。
安全政策
此项目有一个 安全政策。
许可
此项目使用 MIT 许可证。
鸣谢
本软件包受到 johnkary/phpunit-speedtrap
的启发,最初由 John Kary 以 MIT 许可协议发布。
社交
关注 Twitter 上的 @localheinz 和 @ergebnis。