php代码覆盖工具(7)-phpunit-实际项目使用遇到的问题总结

1.跑完接口自动化用例后,大概生成了474个.cov文件,执行生成html报告时提示正常,没有任何报错,但是打开生成报告的index.html文件时报错,无法查看报告。

$ phpcov merge --html="./coverage_html" cov/ -vvv
phpcov 4.0.5 by Sebastian Bergmann.


Generating code coverage report in HTML format ... done

刚开始怀疑是因为.cov文件过多,phpcov在处理报告时出现了异常,毕竟是第一次用这个工具,对它到底能处理多大量级的数据心理没有底。

为了测试到底是什么时候报告开始异常,我换成手动分批执行接口用例,如每执行10个用例就生成报告,依次累加,执行到倒数的十几个用例时确实又出现了异常,但是这次报错跟之前不一样,提示信息比较清楚,经过开发提醒,可能是某个接口是新开发的功能,而当前测试分支未包含这个接口的代码所以导致异常。然后又重新排查接口,意外的是后面又没有重现这种情况了,跑完跟之前一样数量的接口,可以正常生成报告。虽然这个过程很让人摸不着头脑,但是能够成功生成报告已经是很开心的事情了。

自己后面又回想了以下,不确定是不是因为中间有切换host,练到了其他的服务器上,所以才导致打开自动化测试那台服务器上的index.html文件报错。

2.因项目代码仓库很大,我在设置统计覆盖率的文件目录时将用到的文件全部都加上了,结果生成的覆盖率数据很低,只有6%,想根据这个覆盖率来补充用例简直无处下手。

咨询了开发,该项目包含很多已经废弃的功能代码,以及在生成pb文件时产生的与功能无关的代码,鉴于推动开发处理冗余代码的工作量和对项目造成的风险都不可控,只好换个思路。

如果项目仓库很大时,可以不需要一上来就直接统计整个项目下的代码覆盖率,先找开发了解下哪个文件或文件夹是项目的主功能代码,先针对这部分的代码统计覆盖率,从而补充用例。

3.查看生成的覆盖率报告时,发现两个问题:

1:phpunit将一些完全没有测试覆盖的类均标记未n/a“,导致代码覆盖率的百分比被夸大了,因为这些类的行数没有被计算在内。

2:如果测试时仅覆盖了方法中的一个分支,phpunit就默认为这个类已经全部覆盖了,导致覆盖率数据不准确

解决方法:

在需统计覆盖率的文件的类前面加上@covers ClassName,表示覆盖该类下的全部方法

如需要统计的文件类名为unitest,格式如下:

//@covers unittest

class unittest
{
...
}

可参考官方文档:http://www.phpunit.cn/manual/current/zh_cn/phpunit-book.html#appendixes.annotations.examples.CoversDefaultClassTest.php

后来在实际项目中已经添加了@covers ClassName后还是偶尔会出现”将一些完全没有测试覆盖的类均标记未n/a“的情况,暂未找到具体原因,保险起见,执行自动化用例前先重启服务

service php-fpm restart

开始执行后只要有了覆盖率数据,就马上生成html文件看下统计是否异常,如果异常则停止,再次执行用例,避免等到所有的用例都执行完成后生成报告才发现统计有误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值