johnkary/phpunit-speedtrap

在您的PHPUnit测试套件中查找并报告缓慢的测试

v4.0.1 2022-10-17 00:56 UTC

README

Integrate

SpeedTrap在控制台中报告缓慢运行的PHPUnit测试。

许多因素会影响测试执行时间。如果一个测试没有正确地与变量延迟(数据库、网络等)隔离,甚至测试机器的基本负载也会导致测试执行时间波动。

SpeedTrap有助于识别缓慢的测试,但不能解释为什么这些测试会变慢。考虑使用Blackfire.io来对测试套件进行性能分析,以专门识别缓慢的代码。

Screenshot of terminal using SpeedTrap

安装

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.ymlPHPUNIT_SPEEDTRAP="enabled",在Travis CI上运行时对缓慢测试进行分析。

language: php

php:
  - 7.3

env:
  - PHPUNIT_SPEEDTRAP="enabled"

步骤3)查看Travis CI构建输出并阅读控制台中打印的缓慢报告。

Travis CI文档 - 环境变量

用例:在开发中启用分析,但在Travis CI中禁用

步骤1)在phpunit.xml中启用SpeedTrap。缓慢报告将在所有测试套件执行期间输出。

<phpunit bootstrap="vendor/autoload.php">
...
    <extensions>
        <extension class="JohnKary\PHPUnit\Extension\SpeedTrap" />
    </extensions>
</phpunit>

步骤2)配置.travis.ymlPHPUNIT_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 许可证下可用。