功能测试时使用phpunit来统计代码覆盖率会出现一个问题,如果你在测试某个功能时,还有其他人也在使用这个功能,就会造成统计的覆盖率与你实际测试的情况不匹配的现象,因为其他人的操作也会被统计进去。
解决方法是,测试时使用独立测试环境与其他的测试环境区分开,统计覆盖率时仅统计独立测试环境对应域名的ip的请求数据即可。
需要实现该需求的话,仅需修改prepend.php文件增加一个ip地址的判断即可。
<?php
require_once dirname(__FILE__).'/vendor/autoload.php'; # 在composer生成的vender同级目录
use SebastianBergmann\CodeCoverage\CodeCoverage;
//设置只统计指定ip的请求,加上if条件即可(若多个域名或者接口请求要在同一个prepend文件里分别统计,也是一样操作)
$ip=gethostbyname($_SERVER['HTTP_HOST']);
echo $ip;
//仅统计127.0.0.1 ip访问的数据
if(strpos($ip,'127.0.0.1') === 0){
$coverage = new CodeCoverage;
# 设置白名单,就是设置你想计算覆盖率的哪些文件夹
$coverage->filter()->addDirectoryToWhitelist(dirname(__FILE__) . '/src');
$coverage->start('<Site coverage>');#开始统计
register_shutdown_function('__coverage_stop',$coverage);#注册关闭方法
}
else{
echo '该ip访问不会统计入覆盖率';
}
function __coverage_stop(CodeCoverage $coverage){
$coverage->stop();#停止统计
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
# 设置生成代码覆盖率页面的路径
$writer->process($coverage, dirname(__FILE__) . '/coverage_html');
}