1. 程式人生 > >PHP程式碼覆蓋率測試

PHP程式碼覆蓋率測試

簡介:最近研究了PHP程式碼覆蓋率的測試,後面發現了github一個開源專案(https://github.com/sebastianbergmann/php-code-coverage) ,對PHP程式碼覆蓋率測試已經做得很好了,所以拿來直接用,這裡總結怎麼用這個開源工具。

環境搭建

一、安裝php環境

1、php要選高版本,親測7.27可行,5.5就不行,7上的版本應該都可以。

二、安裝xdebug

這個直接網上搜怎麼安裝吧,我mac電腦用的是php整合環境MAMP,已經包含xdebug了,所以不用再安裝。
可以在phpInfo頁面檢視xdebug是否安裝好:

三、安裝composer

1、網上找資料安裝,安裝完成後可以在安裝目錄輸入命令檢視是否安裝成功,如下:

$ php composer.phar --version
Composer version 1.6.5 2018-05-04 11:44:59

2、把composer.phar放到待測專案的根目錄,並重命名為composer

四、專案配置

1、開啟PHP專案,我這裡ide是PHPStorm。本專案只有一個src資料夾,裡面有3個php檔案。
2、在專案根目錄下建一個檔案:composer.json, 內容如下

{
  "name": "root/blog",
  "require-dev": {
    "phpunit/php-code-coverage":"6.0.7"
  }
}

composer的作用是引入專案所依賴的其它專案,這裡就引入了phpunit/php-code-coverage,版本是6.0.7。php版本和php-code-coverage版本的對應關係參考:
https://packagist.org/packages/phpunit/php-code-coverage

3、開啟命令列,進入專案根目錄,輸入:php composer install ,作用是下載其它專案的程式碼到自己的專案裡,如下圖:

此時會在專案根目錄新增一個vender資料夾,放的是剛剛下載的程式碼,如下圖:

4、在根目錄新增一個prepend.php,作用看程式碼註釋

<?php
/**
 * Created by PhpStorm.
 * User: 靈樞
 * Date: 2018/9/5
 * Time: 下午5:02
 */
require_once dirname(__FILE__) . '/vendor/autoload.php';
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');
   }

開始測試

一、執行php程式碼

1、在所需要測試的php檔案里加一行程式碼,來引入prepend.php,如下:

include_once("/******/prepend.php");

如 測試echoNumber.php的覆蓋率,程式碼如下:

<?php
/**
 * Created by PhpStorm.
 * User: 靈樞
 * Date: 2018/8/31
 * Time: 下午3:18
 */
include_once("/Applications/MAMP/htdocs/blog/prepend.php");
class echoNumber{

    function add($a,$b){
        echo $a+$b.PHP_EOL;
    }

    function jian($a,$b){
        echo $a-$b.PHP_EOL;
    }

    function cheng($a,$b){
        echo $a*$b.PHP_EOL;
    }

    function chu($a,$b){
        echo $a/$b.PHP_EOL;
    }

    function call($a,$b){
        $this->add($a,$b);
    }

}

$f = new echoNumber();
$f->add(3,4);
$f->cheng(2,3);
$f->call(5,6);

2、執行echoNumber.php

執行後就會在根目錄下新增一個資料夾,用來存放生成html報告,如下圖。這裡的資料夾名稱就是在prepend.php裡設定的。

二、檢視報告

1、用瀏覽器開啟報告資料夾下的index.html,如下圖:

因為我src下有三個php檔案,所以這裡展示了3行

2、點開一個檔名,檢視具體的覆蓋情況,執行的程式碼綠色顯示,如下圖:

3、通過這個報告,我們能看到行的覆蓋率、函式的覆蓋率和類的覆蓋率。

最後:我們真實測試覆蓋率時不可能去每一個php檔案裡新增一行程式碼,可以考慮在真實專案的index檔案裡新增