Php代码覆盖率之php-code-coverage工具介绍
2016-04-08 {{allComments.length}} 6748 干货分享当测试人员进行php代码测试的时候,可能会产生这样的疑问:新增的测试用例应该针对哪些代码进行覆盖,是否实现了增量代码全覆盖?当前已有自动化case是否能够覆盖到所有的代码分支进而实现自动化回归测试?
Php-code-coverage是一个开源类库,它提供了收集、处理和展现PHP代码覆盖率信息的功能,可以直接从github获取源码。使用php-code-coverage工具可以帮助测试人员hold住php代码,它会动态跟踪php代码的执行,合并并生成整个php项目的代码覆盖率,最终以html、xml或者text等形式展现,同时也能生成Clover、Crap4J、PHPUnit等形式的基于XML的代码覆盖率信息记录文件。以此为依据,我们可以分析新增的php代码的增量覆盖率,可以分析当前php代码覆盖率,评估测试用例的质量,决定是否要增加某些测试用例以提高代码覆盖率。
目前存在多种软件衡量标准用于衡量代码覆盖率,php-code-coverage工具可以实现以下衡量方法:
行覆盖率(Line Coverage):按单个可执行行是否已执行到进行计量;
函数与方法覆盖率(Function and Method Coverage):按单个函数或方法是否已调用到进行计量;
类与特质覆盖率(Class and Trait Coverage):按单个类或特质的所有方法是否全部已覆盖进行计量;
Php-code-coverage具有很好的可扩展性和可移植性,可应用于windows、linux、mac等常用操作系统。如果添加PHP-code-coverage作为本地项目的依赖项目,只需添加phpunit/ php-code-coverage的项目依赖到本地项目的composer.json文件即可。此外,可以利用phpunit的白名单功能将不需要测试的代码排除在外,可选用命令行选项 --whitelist或通过配置文件(参见phpunit手册 “Whitelisting Files for Code Coverage”一节)来完成。
Php-code-coverage使用了PHP的Xdebug扩展所提供的代码覆盖率功能,可以作为组件集成在phpunit中,而phpunit(version3.3及以上版本)又可以集成在IDE(例如开发版NetBeans)中,提供像ruby或者python一样的php文件的代码覆盖率统计功能。使用者可以实时地查看php代码覆盖率报表,报表如下图1所示:
图1
我们在php项目测试中将php-code-coverage的api集成到jenkins持续集成自动化测试流程中,产出的代码覆盖率报表非常直观,其中包括行覆盖率、函数与方法覆盖率、类与特质覆盖率结果,并且可以通过点击目录链接逐层逐级查看代码覆盖情况,以便测试人员对测试用例覆盖情况进行分析。我们利用php-code-coverage产出的php代码覆盖率报表如下图2所示(我们在本项目中针对覆盖率数据进行分析,并且对代码结构进行了梳理,补充测试用例10+):
图2
参考资料:
github源码:https://github.com/sebastianbergmann/php-code-coverage
phpunit手册:https://phpunit.de/manual/current/en/code-coverage-analysis.html
https://blogs.oracle.com/netbeansphp/entry/code_coverage_for_php_why