atk4/ergebnis-phpunit-slow-test-detector

此包已被废弃且不再维护。未建议替代包。

提供检测phpunit/phpunit中慢速测试的功能。

此包尚无发布版本,信息有限。


README

Integrate Merge Release Renew

Code Coverage Type Coverage

Latest Stable Version Total Downloads Monthly Downloads

本项目提供了一个用于检测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.19phpunit/phpunit:^9.0.0phpunit/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.19phpunit/phpunit:^9.0.0 时的 DocBlock 中的 @maximumDuration 注释
  • 使用 phpunit/phpunit:^8.5.19phpunit/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() 方法以及相应的 beforeafter 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