esi / phpunit-coverage-check
使用PHPUnit的Clover报告检查代码覆盖率。
Requires
- php: ^8.2 <8.5
- ext-libxml: *
- ext-simplexml: *
- symfony/console: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.54
- phpstan/phpstan: ^1.11
- phpstan/phpstan-deprecation-rules: ^1.2
- phpstan/phpstan-phpunit: ^1.4
- phpstan/phpstan-strict-rules: ^1.6
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2024-09-22 11:34:37 UTC
README
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的出色工作。
有关此库相对于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的安装和用法。
用法
该脚本有两个参数是必需的,才能返回代码覆盖率。
- clover xml文件的位置,该文件由PHPUnit生成。
- 可接受的覆盖率阈值。最小值 = 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 许可证下授权。