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
安装
- 分别安装PHP, Composer(见 Composer)
- 安装PHPUnit,php-code-coverage
- 根据网上指南配置PHPUnit,比如PHPUnit 手册 – 第 1 章 安装 PHPUnit
- 下载Xdebug,见Xdebug: Downloads
- 配置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部分
相关文章:
2023年11月PHP测试覆盖率解决方案
【题记:最近进行了ExcelBDD PHP版的开发,查阅了大量资料,发现PHP测试覆盖率解决方案存在不同的历史版本,让我花费了蛮多时间,为了避免后人浪费时间,整理本文,而且网上没有给出Azure DevOps里面P…...
matlab模糊控制文件m代码实现和基础理论
1、内容简介 略 15-可以交流、咨询、答疑 通过m代码来实现生成模糊文件fis文件 2、内容说明 模糊文件m代码实现和基础理论 matlab模糊控制文件m代码实现和基础理论 模糊文件、m代码和模糊基础理论 3、仿真分析 略 4、参考论文 略 链接:https://pan.baidu.co…...
Java设计模式-创建型模式-单例模式
单例模式 单例模式饿汉式懒汉式 单例模式 解释:一个类只能有一个实例 单例模式可以分为两种 饿汉式 和 懒汉式 饿汉式 也被称为预加载,即 在加载类的时候,就将实例创建出来,加载到内存,不管之后会不会使用这个实例 …...
社区分享|杭银消费金融基于MeterSphere开展接口自动化测试
杭银消费金融有限公司(以下简称“杭银消费金融”)成立于2015年12月,是经中国银保监会批准,由杭州银行作为主发起人,联合滴滴出行、中国银泰等企业组建的持牌消费金融机构,注册资本为25.61亿元。杭银消费金融…...
阿里云2核2G云服务器99元一年!3M带宽的ECS云服务器哦
经济型e实例2核2G3M带宽优惠价99元一年 除了轻量服务器配置,经济型e实例2核2G3M配置也成为了用户关注的焦点。这款云服务器以99元一年的价格,适合个人和普通企业用户搭建网站、开发测试等需求。 我买的是阿里云这款99元的云服务器,活动参与地…...
【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)
硬件平台: 1、firefly安装Ubuntu系统的RK3588; 2、安装Windows系统的电脑一台,其上安装Ubuntu18.04系统虚拟机。 参考手册:《00-Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN》 《RKNN Toolkit Lite2 用户使用指南》 1、文…...
Dockerfile运行容器不立即退出
1. 问题描述 运行容器结束,docker container立即退出。 2. 解决方案 在dockerfile中,添加如下命令, ENTRYPOINT ["tail", "-f", "/dev/null"]...
基因检测技术的发展与创新:安全文件数据传输的重要作用
基因是生命的密码,它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展,我们可以通过对基因进行测序、分析和解读,更深入地认识自己,预防和治疗各种遗传性疾病,甚至实现个性化医疗和精准健康管…...
Flink SQL自定义标量函数(Scalar Function)
使用场景: 标量函数即 UDF,⽤于进⼀条数据出⼀条数据的场景。 开发流程: 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数,名称必须叫做 eval,eval ⽅法签名必须是 p…...
【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象
process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例,因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…...
觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地
11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…...
竞赛 车道线检测(自动驾驶 机器视觉)
0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
128. 最长连续序列
这道题最简单的想法就是排序计数,但是复杂度为O(nlogn),不符合题意 于是采用哈希表的方法 将所有数字存放在哈希表中,然后开始逐个寻找。 比如当前遍历到x,如果x-1也存在哈希表中,那就从x-1开始遍历最长连续序列&#…...
设计模式-设计原则
文章目录 设计模式-设计原则单一职责原则开闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 设计模式-设计原则 单一职责原则 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 有时候类的功能并不…...
MongoDB基础运维
mongodb的基础概念介绍 database #数据库 collection #集合,类似于mysql中的表 filed #类似于mysql中字段 document #每行的记录 连接客户端 mongo ip:port 例如mongo 127.0.0.1:27017 mongo客户端的命…...
侧击雷如何检测预防
侧击雷是一种雷击的形式,指的是雷电从建筑物的侧面打来的直接雷击。侧击雷对高层建筑物的防雷保护提出了更高的要求,因为一般的避雷带或避雷针不能完全保护住建筑物的侧面。侧击雷可能会对建筑物的结构、设备和人员造成严重的损害,甚至引发火…...
检索搜索信息能力
(一)搜索工具的选择 谷歌 > 微信搜一搜 > 抖音等短视频 > 百度 (二)搜索方式 一,搜索内容的分类 信息类学习类工具类 二,谷歌浏览器的搜索技巧 1、“搜索内容” 限定完整出现的词 如下图搜…...
设计大咖亲授:Figma中文环境设置全攻略!
作为UI设计师,你一定很熟悉Figma,Figma是一款专注于UI/UX设计的在线协作工具,使用非常高效方便,不需要下载和安装。它只需要通过浏览器编辑,在国外很受欢迎。但是Figma对于国内的小伙伴来说,使用Figma有一定…...
华为Hcia-数通学习(更改策略)
方法:书籍视频题目训练 书籍:华为HCNA网络技术学习指南。 视频:网络工程师学习路线_哔哩哔哩_bilibili 有过一点基础。考软考网络工程师的时候做了大量笔记,回去复习了一遍。现在准备找工作了,开始学习华为认证的网…...
数据校验:Spring Validation
Spring Validation概述 在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦…...
从混乱到有序:大数据规范性分析的转型之路
从混乱到有序:大数据规范性分析的转型之路 关键词:大数据分析、数据治理、规范性分析、数据质量、ETL流程、数据仓库、数据可视化 摘要:本文深入探讨了大数据分析从混乱无序状态向规范性分析转型的关键路径。文章首先分析了大数据环境下面临的典型数据质量问题,然后系统性地…...
基于DRAMsim3的扩散模型训练加速仿真:内存时延与能耗分析
基于DRAMsim3的扩散模型训练加速仿真:内存时延与能耗分析 摘要 扩散模型在生成式AI领域取得了巨大成功,但其训练过程极其昂贵,主要体现在对内存带宽的巨大需求(尤其是Attention机制和梯度存储)。本文聚焦于利用DRAMsim3模拟器,在系统架构层面仿真扩散模型(如DDPM)训练…...
Windows系统性能优化指南:使用RyTuneX提升系统响应速度
Windows系统性能优化指南:使用RyTuneX提升系统响应速度 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目地…...
5分钟打造个人游戏库:FitGirl Repack Launcher高效管理方案
5分钟打造个人游戏库:FitGirl Repack Launcher高效管理方案 【免费下载链接】Fitgirl-Repack-Launcher An Electron launcher designed specifically for FitGirl Repacks, utilizing pure vanilla JavaScript, HTML, and CSS for optimal performance and customiz…...
用PyTorch从零复现SiamFC:手把手教你搭建自己的单目标跟踪器(附完整代码)
用PyTorch从零复现SiamFC:手把手教你搭建自己的单目标跟踪器(附完整代码) 单目标跟踪是计算机视觉领域的经典问题之一,它的核心任务是在视频序列中持续定位特定目标的位置。想象一下这样的场景:你正在开发一个智能监控…...
G-Helper:轻量级华硕硬件控制的性能优化解决方案
G-Helper:轻量级华硕硬件控制的性能优化解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, a…...
别再只盯着mAP50了!手把手教你修改YOLOv8的best模型保存逻辑(附代码)
突破mAP50局限:YOLOv8模型保存策略深度定制指南 在目标检测领域,mAP50(mean Average Precision at IoU0.5)长期被作为模型性能的黄金标准。但当我们面对工业质检中微米级缺陷识别,或是自动驾驶场景中对行人检测的严苛要…...
保姆级教程:用Python+Socket实现西门子CNC产量数据自动采集(附避坑指南)
PythonSocket实现西门子CNC产量数据自动化采集实战指南 在工业4.0时代,生产数据的实时采集与分析已成为智能制造的核心环节。对于使用西门子数控系统(如828D、840DSL等)的制造企业而言,如何绕过复杂的授权流程,通过编程…...
Cortex-M能否运行Linux?架构与系统需求解析
1. Cortex-M与Linux的兼容性解析作为一名嵌入式开发工程师,我经常被问到"Cortex-M能不能跑Linux"这个问题。要回答这个问题,我们需要从处理器架构和操作系统需求两个维度来分析。Cortex-M系列是ARM公司推出的微控制器内核,主要面向…...
如何在3小时内构建你的第一个炉石传说AI机器人?Hearthrock终极指南
如何在3小时内构建你的第一个炉石传说AI机器人?Hearthrock终极指南 【免费下载链接】hearthrock Hearthstone Bot Engine 项目地址: https://gitcode.com/gh_mirrors/he/hearthrock Hearthrock是一个革命性的炉石传说AI引擎,专为人工智能研究者和…...
