当前位置: 首页 > news >正文

2023年11月PHP测试覆盖率解决方案

【题记:最近进行了ExcelBDD PHP版的开发,查阅了大量资料,发现PHP测试覆盖率解决方案存在不同的历史版本,让我花费了蛮多时间,为了避免后人浪费时间,整理本文,而且网上没有给出Azure DevOps里面PHP测试覆盖率的解决方案,本文一并给出】

版本

  • PHP 8.2.12
  • PHPUnit 10.4.2
  • php-code-coverage 10.1.7

  • Xdebug v3.3.0alpha3
  • 操作系统:Win11

安装

  1. 分别安装PHP, Composer(见 Composer)
  2. 安装PHPUnit,php-code-coverage
  3. 根据网上指南配置PHPUnit,比如PHPUnit 手册 – 第 1 章 安装 PHPUnit
  4. 下载Xdebug,见Xdebug: Downloads
  5. 配置php.ini 在尾部加如下 
[Xdebug]
zend_extension="D:\php\php_xdebug-3.3.0alpha3-8.2-vs16-x86_64.dll"
xdebug.mode=coverage

其中zend_extension是Xdebug的绝对路径

配置

PHPUnit前后版本在phpunit.xml上历经了多次修改,网上能够查到的都是旧版,浪费了我好多时间。如下是最新格式。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php"xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.4/phpunit.xsd"cacheDirectory="testReports/.phpunit.cache"><source><include><directory suffix=".php">src</directory></include></source><coverage><report><cobertura outputFile="testReports/cobertura.xml" /></report></coverage><logging><junit outputFile="testReports/junit.xml" /></logging></phpunit>

网上容易查到的“filter”,“whitelist”已经过时。PHPUnit作者考虑到前后变化,提供了自动改写功能,如下:

phpunit --migrate-configuration

目前PHPUnit支持的覆盖率格式如下

<report><clover outputFile="clover.xml"/><cobertura outputFile="cobertura.xml"/><crap4j outputFile="crap4j.xml" threshold="50"/><html outputDirectory="html-coverage" lowUpperBound="50" highLowerBound="90"/><php outputFile="coverage.php"/><text outputFile="coverage.txt" showUncoveredFiles="false" showOnlySummary="true"/><xml outputDirectory="xml-coverage"/>
</report>

参见 5. The XML Configuration File — PHPUnit 10.4 Manual

测试结果所有选项如下

<logging><junit outputFile="junit.xml"/><teamcity outputFile="teamcity.txt"/><testdoxHtml outputFile="testdox.html"/><testdoxText outputFile="testdox.txt"/>
</logging>

Azure DevOps Pipelines的配置

微软官方没有给出PHP测试覆盖率解决方案,经过摸索,得到如下方案:

在azure-pipelines.yml对应位置,按下修改来准备好环境

- script: |sudo update-alternatives --set php /usr/bin/php$(phpVersion)sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
# 如下这行没有必要,azure的VM已经安装了xdebugsudo apt-get install php8.1-xdebug
# 下行必需,php.ini的位置可以通过 php -i 得到sudo sh -c "echo 'xdebug.mode=coverage' >> /etc/php/8.1/cli/php.ini"php -versiondisplayName: 'Use PHP version $(phpVersion)'

发布测试结果

- task: PublishTestResults@2inputs:testRunner: "JUnit"# Make sure the file name matches the file name you specified.testResultsFiles: "**/testReports/junit.xml"failTaskOnFailedTests: truedisplayName: "Publish Test Results"

发布测试覆盖率

- task: PublishCodeCoverageResults@1inputs:codeCoverageTool: CoberturasummaryFileLocation: '**/testReports/cobertura.xml'

提示:PublishCodeCoverageResults@2达到的效果不如PublishCodeCoverageResults@1。

ExcelBDD PHP版在Azure DevOps配置了CI,见ExcelBDD PHP CI

全部文件见ExcelBDD开源项目PHP部分

http://www.lryc.cn/news/229295.html

相关文章:

  • matlab模糊控制文件m代码实现和基础理论
  • Java设计模式-创建型模式-单例模式
  • 社区分享|杭银消费金融基于MeterSphere开展接口自动化测试
  • 阿里云2核2G云服务器99元一年!3M带宽的ECS云服务器哦
  • 【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)
  • Dockerfile运行容器不立即退出
  • 基因检测技术的发展与创新:安全文件数据传输的重要作用
  • Flink SQL自定义标量函数(Scalar Function)
  • 【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象
  • 觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地
  • 竞赛 车道线检测(自动驾驶 机器视觉)
  • 128. 最长连续序列
  • 设计模式-设计原则
  • MongoDB基础运维
  • 侧击雷如何检测预防
  • 检索搜索信息能力
  • 设计大咖亲授:Figma中文环境设置全攻略!
  • 华为Hcia-数通学习(更改策略)
  • 数据校验:Spring Validation
  • CSS怎么选择除了第一个子元素外的其余同级子元素
  • Mac下eclipse配置JDK
  • 基于springboot实现体育场馆运营平台项目【项目源码】
  • 优雅的Java编程:将接口对象作为方法参数
  • 一文简单聊聊protobuf
  • Unity Meta Quest 一体机开发(五):手势抓取概述
  • 传输层中的TCP和UPD协议
  • 插入排序算法(C++版)
  • Tracking vs. No-Tracking Queries
  • Centos7安装frps实现内网穿透
  • cryptopp Base64Encoder \n问题