【问题标题】:How to have code coverage report with pcov?如何使用 pcov 获得代码覆盖率报告?
【发布时间】:2021-08-19 12:05:06
【问题描述】:

我使用 PHP 8.0.5、PHPUnit 9.5.4、PHPStorm 2021.1.2。 什么时候,在我的 XML 配置文件中,我使用这个:

<coverage pathCoverage="true">
  <report>
    <clover outputFile="./coverage.xml"/>
  </report>
</coverage>

(这只是我文件的相关部分)

...并从 PHPStorm 启动命令“Run with coverage”,它不会生成覆盖率报告。

我已停用 XDebug。 PHPStorm 向我展示了:

警告:必须设置 XDEBUG_MODE=coverage 或 xdebug.mode=coverage

我不知道为什么它提到 XDebug,因为我想使用 pcov,因为我在“运行/调试配置”弹出窗口中设置了它。 我尝试将报告放在另一个文件夹中,尝试生成 HTML 报告...通过终端启动命令...这些都不起作用。我在 Google 上没有找到任何关于我的问题的信息。

编辑

我尝试了根本没有加载 XDebug 和这个简化的配置(使用 --generate-configuration 参数创建)并添加了之前的代码(没有路径覆盖)。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
         bootstrap="TestBootstrap.php"
         cacheResultFile=".phpunit.cache/test-results"
         executionOrder="depends,defects"
         forceCoversAnnotation="true"
         beStrictAboutCoversAnnotation="true"
         beStrictAboutOutputDuringTests="true"
         beStrictAboutTodoAnnotatedTests="true"
         failOnRisky="true"
         failOnWarning="true"
         verbose="true">
    <testsuites>
        <testsuite name="default">
            <directory suffix="Test.php">./src/BlocksTest.php</directory>
        </testsuite>
    </testsuites>

    <coverage cacheDirectory=".phpunit.cache/code-coverage"
              processUncoveredFiles="true">
        <include>
            <directory suffix=".php">../src</directory>
        </include>
        <report>
            <clover outputFile="./coverage.xml"/>
        </report>
    </coverage>
</phpunit>

即使图书馆说它仍然不起作用:

生成 Clover XML 格式的代码覆盖率报告 ...

【问题讨论】:

  • 关于 XDEBUG_MODE 的警告表明 xdebug 的 phpunit 代码覆盖驱动程序正在加载。也许是这样:stackoverflow.com/a/57730778/367456 - 确保未加载 xdebug 扩展。该警告还表明它已加载 (via)
  • 我知道我启用了 XDebug,但我认为使用 XDebug 禁用代码覆盖就足够了......我会尝试不使用它,但是,XDebug 对于代码覆盖的其他目的也很有用,如果我们想要使用 XDebug 的其他功能?我们必须每次都切换吗?
  • 当我禁用 XDebug 并且 php -m | grep "pcov" 按预期显示 pcov 时,它显示“没有可用的路径覆盖支持的代码覆盖驱动程序”。那么......我错过了什么?
  • 我可以想象这很令人费解,但仅从该评论也很难说。请找到一种方法,您可以在命令行上增加 PHP 配置,从没有配置到运行 phpunit 并选择代码覆盖范围(包括 pcov 的示例):stackoverflow.com/a/67912759/367456 - 这个可能会为您提供您正在寻找的见解,并帮助您解决此处的问题。
  • 我不知道新警告中的“路径覆盖支持”是什么意思。不知道 pcov 是否支持它。也许这是 phpunit XML 配置文件中的一些配置?您可以禁用它以进行故障排除以找出答案。

标签: phpunit pcov


【解决方案1】:

当然有很多方法可以回答这个问题,在我们找出答案的同时,我留下了一些初稿。


您的 Phpunit XML 配置:

<coverage pathCoverage="true">
  <report>
    <clover outputFile="./coverage.xml"/>
  </report>
</coverage>

具有pathCoverage 属性true 值。

[In Phpunit 9.5] The pathCoverage Attribute [...] 当设置为 true [..] 这需要支持路径覆盖的代码覆盖驱动程序。 Path Coverage 目前仅由 Xdebug 实现。

所以你不能用 pcov 得到这个代码覆盖率报告。

您的 Phpunit 配置不兼容。


当 Phpunit(通过 sebastianbergman/php-code-coverage)显示此警告时:

警告:必须设置 XDEBUG_MODE=coverage 或 xdebug.mode=coverage

这意味着它检测到 xdebug 扩展可用但未配置为使用它,因此提示要更改哪些参数。

如果您在命令行 (CLI) 上使用 xdebug 模式环境参数重放最后一个命令,通常最容易进行测试运行:

$ XDEBUG_MODE=coverage !! # press enter

否则这两个选项中的任何一个都适用于 PHP,请适当配置运行作业。

但是如果你关心的不是 xdebug 而是 pcov

我不知道为什么它提到了 XDebug,因为我想使用 pcov,因为我在“运行/调试配置”弹出框 [in PhpStorm] 中设置了它。

关于 xdebug 配置的警告讲述了一个不同的故事:xdebug and pcov are exclusive 和

如果您想使用 PCOV 作为 php-code-coverage 的驱动程序,不得加载 Xdebug。

这意味着 - 正如原始警告显示 Xdebug 已已加载 - 它必须首先被卸载。

PhpStorm 可以不为配置的 PHP 版本卸载扩展。它的作用是根据您的选择添加扩展和配置设置。

在与命令行 (CLI) 类似的 PhpStorm 中,您可以控制环境参数以及 PHP 可执行文件的命令行参数。

如果系统上 php 可执行文件的现有配置已经加载过多,作为最后的手段,您可以先使用-n 开关禁用所有扩展,然后根据需要添加扩展。

像 xdebug 这样的一些扩展需要作为 zend 扩展加载:

有关 PHP 命令行选项的说明,请参阅Command line options[DOCS]。

有关各种配置选项的说明,请参阅:

  • PHP 发行版附带的注释 php.ini 文件
  • PHP 手册中的相应页面(它也有一个List of php.ini directives[DOCS])
  • 扩展作者的附加文档,例如Xdebug Homepage 通常有详细的配置说明并涵盖所有 ini 设置。

【讨论】:

  • 我看到 Sebastian Bergmann 的项目phpcov 有关于路径覆盖的参数。不是同一个司机吗? github.com/sebastianbergmann/phpcov 如果这确实不一样......我们如何才能同时拥有速度和路径覆盖?
  • 我刚刚在没有`pathCoverage="true"`的情况下进行了测试,但仍然没有生成报告。
  • @lionelp:先减少特征集。禁用pathCoverage,例如例如,删除该属性。然后冲洗并重复。
猜你喜欢
  • 2014-09-09
  • 2020-12-21
  • 2020-09-07
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2013-09-12
相关资源
最近更新 更多