写点什么

基于 php-code-coverage 的增量代码覆盖率实现

  • 2022 年 9 月 08 日
    北京
  • 本文字数:992 字

    阅读完需:约 3 分钟

代码覆盖率作为一个指导性指标,可以一定程度上反应测试的完备程度,虽然100%覆盖的代码并不意味着100%无bug的应用,但是较高的覆盖率一般情况下也意味着更少的bug。近期笔者参与的一个项目代码量不断膨胀,但是自动化测试还不够完备,单纯依赖人工测试很容易出现旧功能受影响或测试遗漏的情况。为了降低测试对人力的消耗,尝试引入自动化测试对部分功能进行覆盖,并用增量代码覆盖率统计查看是否有测试点遗漏。这篇文章主要讲一个增量代码覆盖率的实现。
复制代码

实现说明

这里简单说明下PHP增量代码覆盖率统计功能的实现方式,供感兴趣的同学参考
复制代码

环境依赖

  1. xdebug: php 插件,用于收集覆盖率信息 1. git: 利用 git diff 获取增量代码信息 1. php-code-coverage: phpunit 下的一个库,用于从 xdebug 收集的覆盖率信息中生成覆盖率统计报告,支持 xml、html 等多种格式。本文基于 6.0.7 改造以支持增量覆盖率统计,利用 1.和 2.中获取的信息生成增量覆盖率统计报告


    具体实现说明如下:

  2. xdebug 安装首先下载插件,xdebug 官方下载地址:http://xdebug.org.cn/download.php。然后根据操作系统的差异,windows根据当前系统位数、php版本以及是否线程安全,下载编译好的.dll文件;linux系统则需要下载源码后使用phpize编译成.so文件然后在php.ini文件中指明插件的位置,并启用覆盖率收集功能如下所示:


    使用 php -m, 回显结果中出现 Xdebug,则表示安装成功


    2.覆盖率信息收集


    在项目入口文件中通过检查传入系是否存在 trigger,来决定是否启动覆盖率信息收集,以常见的 nginx+php 项目举例实现方式如下:

  3. 通过 php.ini 的 auto_prepend_file 配置加载覆盖率收集文件 1. 通过 nginx 检查 cookie 中是否存在 trigger,来决定是否通过 fastcgi_param 向 php 传递 trigger(随意命名,比如 XDEBUG_COVERAGE_START)1. php 的 auto_prepend_file 的 $_SERVER 中如果检查到存在 trigger,则开启覆盖率收集


    3.增量代码信息获取

使用git diff $(git describe --tags --abbrev=0 $commit_id) $commit_id获取当前$commit_id到最近一个版本之间的代码增量信息(与具体业务相关),利用正则解析,将所有的增量信息解析为类似覆盖率信息的文件:
复制代码


4.生成覆盖率报告 
调整php-code-coverage,在其基础上增加传入步骤3中产生的增量代码信息,最后生成带有增量覆盖率信息的报告
复制代码

更多学习资料点击下方

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662451236&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
基于php-code-coverage的增量代码覆盖率实现_php_测吧(北京)科技有限公司_InfoQ写作社区