版本信息:
php 7.3.12
xdebug 2.8.0
phpunit 7.1.0
composer 2.0.8
1.安装php环境:教你使用Wampserver(超级详细) - 简书
2.安装xdebug
下载xdebug,windows上安装xdebug需要下载的是dll组件,下载时注意php版本,我的php版本是7.3.12
下载地址: Xdebug: Downloads,也可点击直接下载php_xdebug-2.8.0-7.3-vc15-x86_64.dll
我用的是wamp集成环境,将dll文件放在了php根目录下的zend_ext文件夹中
配置xdebug,进入php的根目录,如:D:\Tool\wamp64\bin\php\php7.3.12,找到php.ini文件,添加以下配置,将zend_extension_ts改为刚才放置的xdebug的dll组件位置
[Xdebug]
zend_extension_ts="/zend_ext/php_xdebug-2.8.0-7.3-vc15-x86_64.dll"
xdebug.auto_trace=on
xdebug.collect_params=on
xdebug.collect_return=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_enable=on
xdebug.profiler_output_dir="/tmp/xdebug"
访问http://localhost/?phpinfo=-1,验证xdebug已安装成功并被正确识别
3.安装composer:Composer 安装与使用 | 菜鸟教程
安装完成后可以在安装目录输入命令查看是否安装成功,如下:
把composer.phar放到待测项目的根目录(该项目仅有一个src文件夹),并重命名为composer,新增composer.json文件
4.安装phpcov 和 phpunit
composer的作用是引入项目所依赖的其它项目,这里就引入了phpunit/php-code-coverage,版本是7.0.1,(phpcov是根据phpunit自动匹配的)
编辑composer.json文件如下:
{
"name": "root/demo2",
"require-dev": {
"phpunit/phpunit":"7.1.0",
"phpunit/phpcov": "*"
}
}
php和phpunit对应关系:
打开命令行,进入项目根目录,输入:php composer install
,作用是下载其它项目的代码到自己的项目里,安装完成后会生成一个vendor文件夹
进入D:\Tool\wamp64\www\demo2\vendor\bin 目录,验证已安装成功
5.编写项目文件
分别在所需要测试的php文件里加一行代码,来引入prepend.php,如下:
include_once("D:/Tool/wamp64/www/demo2/prepend.php");
#id.php
<?php
include_once("D:/Tool/wamp64/www/demo2/prepend.php");
$id = $_GET['id'];
if ($id == 1){
echo "Valid account";
}elseif($id == 2){
echo "Invalid account";
}elseif($id == -1){
echo "blacklist";
}else{
echo "error";
}
#status.php
<?php
include_once("D:/Tool/wamp64/www/demo2/prepend.php");
$status = $_GET['status'];
if ($status == 1){
echo "register";
}elseif($status == 2){
echo "unregister";
}elseif($status == -1){
echo "fail";
}else{
echo "error";
}
?>
在项目根目录新增prepend.php文件
#prepend.php
<?php
require_once dirname(__FILE__).'/vendor/autoload.php'; # 在composer生成的vender同级目录
use SebastianBergmann\CodeCoverage\CodeCoverage;
$coverage = new CodeCoverage;
# 设置白名单,即设置计划计算覆盖率的文件夹
$coverage->filter()->addDirectoryToWhitelist(dirname(__FILE__) . '/src');
$coverage->start('<Site coverage>');#开始统计
register_shutdown_function('__coverage_stop',$coverage);#注册关闭方法
function __coverage_stop(CodeCoverage $coverage){
$coverage->stop();#停止统计
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
# 设置生成代码覆盖率页面的路径
$writer->process($coverage, dirname(__FILE__) . '/coverage_html');
}
此时项目结构入下:(IDE使用的eclipse for php)
6.运行测试
在浏览器中访问http://localhost/demo2/src/id.php?id=1
然后就会在根目录下新增一个coverage_html文件夹,用来存放生成html报告,如下图。这里的文件夹名称就是在prepend.php里设置的。
7.查看报告
1、用浏览器打开报告文件夹下的index.html,如下图:显示共有两个文件,id.php覆盖了3行代码,status.php覆盖为0行
(这个有个bug待解决,id.php代码总行数统计有误,覆盖率正确应该为3/11)
2、点开一个文件名,查看具体的覆盖情况,运行的代码绿色显示,如下图:
id.php覆盖了3行
status.php覆盖了0行
附:
# 从白名单中移除文件夹
$coverage->filter()->removeDirectoryFromWhitelist('/var/www/html/userinfo.php');
# 从白名单中移除文件
$coverage->filter()->removeFileFromWhitelist('/var/www/html/userinfo.php');