esi/phpunit-coverage-check

使用PHPUnit的Clover报告检查代码覆盖率。

2.0.0 2024-04-21 06:33 UTC

This package is auto-updated.

Last update: 2024-09-22 11:34:37 UTC


README

Build Status Code Coverage Scrutinizer Code Quality Continuous Integration SymfonyInsight Latest Stable Version Downloads per Month License

PHPUnit Coverage Check - 使用PHPUnit的Clover报告检查代码覆盖率。

此PHP脚本将读取PHPUnit的Clover XML报告并计算覆盖率得分。根据给定的阈值,如果覆盖率高于阈值,则脚本将正常退出;如果覆盖率低于阈值,则脚本将以代码1退出。

此脚本可用于您的持续部署环境或例如添加到预提交钩子。

GitHub Action

已为该库创建GitHub Action,可在PHPUnit Coverage Check Action存储库或GitHub Marketplace中找到。

致谢/信用

此库是基于rregeer/phpunit-coverage-check的分支,由Richard Regeer创建。

此库的大部分内容都是从零开始重写的,以替换和改进原始库的大部分功能。总体思路和计算的关键部分归功于原始库。感谢Richard Regeer的出色工作。

有关更多信息,请参阅许可LICENSE文件。

有关此库相对于Richard Regeer原始库所做的更改的更多信息,请参阅CHANGELOG文件。

使用Box处理Phar生成。我的coverage:check命令的实现,使用Symfony\Console,受到了SensioLabs Security Checker的启发。

重要说明

此项目在任何方式上都不是官方的PHPUnit项目。这意味着它 neither 与 nor 由 PHPUnit 项目或其作者 Sebastian Bergmann 联系或认可。

安装

Composer

可以使用composer安装此脚本。将此存储库作为依赖项添加到composer.json文件中。

$ composer require --dev esi/phpunit-coverage-check:^2.0

要在PHP 8.1上使用PHPUnit Coverage Check,请使用版本1.0.0(并检查1.x的readme,因为用法略有不同)

$ composer require --dev esi/phpunit-coverage-check:^1.0

Phar

从可用的发布版中下载phpunit-coverage-check.phar。建议在从GitHub Release(使用phpunit-coverage-check.phar.asc)下载Phar时检查签名。

# Adjust the URL based on the latest release
wget -O phpunit-coverage-check.phar "https://github.com/ericsizemore/phpunit-coverage-check/releases/download/2.0.0/phpunit-coverage-check.phar"
wget -O phpunit-coverage-check.phar.asc "https://github.com/ericsizemore/phpunit-coverage-check/releases/download/2.0.0/phpunit-coverage-check.phar.asc"

# Check that the signature matches
gpg --verify phpunit-coverage-check.phar.asc phpunit-coverage-check.phar

# Check the issuer (the ID can also be found from the previous command)
gpg --keyserver hkps://keys.openpgp.org --recv-keys F8367C6E9D7A7028292144AAC9D8B66FF3C06696

rm phpunit-coverage-check.phar.asc
chmod +x phpunit-coverage-check.phar

PHPUnit覆盖率检查的Phar文件使用与[email protected].关联的公钥进行签名。您可以在keys.openpgp.org查询与此电子邮件地址关联的密钥(s)

使用Phive安装

您还可以使用Phive安装PHPUnit覆盖率检查Phar。

如果您还没有使用Phive,您可以在此了解更多信息,包括Phive的安装用法

用法

该脚本有两个参数是必需的,才能返回代码覆盖率。

  1. clover xml文件的位置,该文件由PHPUnit生成。
  2. 可接受的覆盖率阈值。最小值 = 1,最大值 = 100

使用PHPUnit生成clover.xml文件

$ php vendor/bin/phpunit --coverage-clover clover.xml

您还可以将覆盖率报告生成添加到PHPUnit配置文件中(例如phpunit.xml.dist)。您需要在<coverage>标签内添加以下行

    <report>
        <clover outputFile="clover.xml"/>
    </report>

如果使用Composer安装

$ php vendor/bin/coverage-check /path/to/clover.xml 100
$ php vendor/bin/coverage-check /path/to/clover.xml 100 --only-percentage
# -O for only-percentage works as well
$ php vendor/bin/coverage-check /path/to/clover.xml 100 -O
# -F or show-files will display coverage per file, formatted in a table
$ php vendor/bin/coverage-check /path/to/clover.xml 100 -F

如果您愿意,您也可以直接使用API。我创建了一个名为nonConsoleCall的函数,它将处理并返回数据,类似于控制台应用程序的显示方式。

    /**
     * Processes the coverage data with the given clover file and threshold, and returns the information
     * similar to how the Console application will.
     *
     * This is mainly useful for those that may wish to use this library outside the CLI/Console or PHAR.
     */
    public function nonConsoleCall(string $cloverFile, int $threshold = 100, bool $onlyPercentage = false): string

示例用法

use Esi\CoverageCheck\CoverageCheck;

$check = new CoverageCheck();
$results = $check->nonConsoleCall(__DIR__ . '/tests/fixtures/clover.xml', 90);

echo $results; // Total code coverage is 90.32%

如果使用Phar

$ php phpunit-coverage-check.phar /path/to/clover.xml 100
$ php phpunit-coverage-check.phar /path/to/clover.xml 100 --only-percentage
# -O for only-percentage works as well
$ php phpunit-coverage-check.phar /path/to/clover.xml 100 -O
# -F or show-files will display coverage per file, formatted in a table
$ php phpunit-coverage-check.phar /path/to/clover.xml 100 -F

如果启用了--only-percentage(或-O),CLI命令将只返回结果覆盖率百分比。

--show-files

如果启用了--show-files(或-F),则忽略--only-percentage。此选项解析clover文件,为项目/包中的每个文件解析覆盖率信息,确定覆盖率,并以表格形式显示信息。例如

传递覆盖率
$ php coverage-check build/logs/clover.xml 90 -F

 ------------------------------------------------------------------- -------------------------- ----------
  File                                                                Elements (Covered/Total)   Coverage
 ------------------------------------------------------------------- -------------------------- ----------
  [...]\phpunit-coverage-check\src\Application.php                    12/12                      100.00%
  [...]\phpunit-coverage-check\src\Command\CoverageCheckCommand.php   94/94                      100.00%
  [...]\phpunit-coverage-check\src\CoverageCheck.php                  80/80                      100.00%
  [...]\phpunit-coverage-check\src\Style\CoverageCheckStyle.php       12/12                      100.00%
  [...]\phpunit-coverage-check\src\Utils.php                          39/39                      100.00%
 ------------------------------------------------------------------- -------------------------- ----------
  Overall Totals                                                      237/237                    100.00%
 ------------------------------------------------------------------- -------------------------- ----------
混合通过/失败覆盖率
$ php coverage-check tests/fixtures/clover.xml 90 -F

 ----------------------------- -------------------------- ----------
  File                          Elements (Covered/Total)   Coverage
 ----------------------------- -------------------------- ----------
  /tmp/Example/String.php       36/38                      94.74%
  /tmp/Example/StringList.php   20/24                      83.33%
 ----------------------------- -------------------------- ----------
  Overall Totals                56/62                      89.04%
 ----------------------------- -------------------------- ----------

关于

要求

  • PHPUnit覆盖率检查与PHP 8.2.0或更高版本兼容。

提交错误和功能请求

错误和功能请求在GitHub上跟踪

问题是最快报告错误的方式。如果您发现错误或文档错误,请首先检查以下内容

  • 是否有关于错误的已打开问题
  • 问题是否已经被解决(例如在已关闭的问题中)

贡献

请参阅CONTRIBUTING

向后兼容承诺

作者

Eric Sizemore - [email protected] - https://www.secondversion.com

许可证

PHPUnit覆盖率检查在MIT 许可证下授权。