服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - PHP教程 - 使用XDebug調試及單元測試覆蓋率分析

使用XDebug調試及單元測試覆蓋率分析

2019-11-16 13:52cnblogs肖蝦米 PHP教程

那天校長分析了關于數據庫的分析及優化的一些方法,很好用,也體會性能作為應用程序的重要指標,需要我們重視。今天我就就自己對XDebug使用的一些體驗做一小段分享。XDebug也是因為需要是用來生成覆蓋率分析文件才安裝的,

那天校長分析了關于數據庫的分析及優化的一些方法,很好用,也體會性能作為應用程序的重要指標,需要我們重視。今天我就就自己對XDebug使用的一些體驗做一小段分享。XDebug也是因為需要是用來生成覆蓋率分析文件才安裝的,剛接觸不久,平時用的也不是很頻繁,但是這個的確是一個好工具,如果想要依賴它來分析程序的性能還是需要自己親手去試試。具體它有多好,請聽我一一道來。

一、安裝篇(XDebug和PHPUnit)

A:安裝XDebug:

Xdebug網下載xdebugdll文件,存放到php加載的ext目錄下(可以選擇重命名,比如php_xdebug.dll,然后打開php.ini文件,添加配置

[xdebug]

zend_extension_ts = php_xdebug.dll

xdebug.profiler_enable = on

xdebug.trace_output_dir = D:\PHPAPP\XDebug

xdebug.profiler_output_dir=D:\PHPAPP\XDebug

xdebug需要采用zend引擎加載的方式加載,所以用zend_extension_ts或是zend_extension,ts是thread_safety,目前5.3以上才支持zend_extension加載,<5.3的用zend_extension_ts加載(或者你可以查看phpinfo是否啟用了zts),然后重啟apache,查看phpinfo,就發現XDebug選項了。

使用XDebug調試及單元測試覆蓋率分析

可以看到xdebug.profiler_enable,xdebug.profiler_output_dir,xdebug.trace_output_dir這三個是我們剛剛配置的項,可以安裝自己的需要配置剩余項,xdebug.profiler_enable:開啟性能分析,

開啟這個之后會在xdebug.profiler_output_dir這個目錄下生成cachegrind.out.XXX的分析文件,如果指定了xdebug.profiler_output_name這個,則輸出來的文件就會是指定的名字.xxx的格式(此方法不適合分析,原因稍后說明),

xdebug.trace_options:這個是開啟跟蹤項,

開啟該項之后,會在xdebug.trace_output_dir下生產跟蹤文件,注意該項會影響運行速度,因為他需要記錄跟蹤過程中的一系列事件。

關于XDebug還有一點需要注意的:XDebug是調試的,也就是說配置了XDebug那程序運行的就是一個Debug狀態,所以這時候zend_optimizer就不能用了,總不能讓程序即調試狀態又處于優化狀態哈。

更多關于XDebug的,大家去網上發掘吧~~然后一起探討哈

友情提醒:對于使用集成環境的同學,比如Wamp,它擁有兩個PHP.ini配置文件,一個在Apache下,一個在PHP下,Apache下是影響web的,而PHP下是影響命令行的,所以····(感謝俊哥的提醒)

B:安裝PHPUnit:

關于PHPUnit的安裝過程,網上也已經很多了,之前自己為了終于安裝成功之后也小寫了篇安裝篇(http://user.qzone.qq.com/414073277/blog/1292122868),所以這里就不再贅述了,網上的一些安裝教程大都能完成安裝。就簡單說下過程:

PHPUnit安裝用的是pear的安裝方式,所以如果機子沒有安裝過pear包需要先安裝下,一般在php安裝的時候在其安裝目錄下都有一個go-pear.bat文件,直接執行即可完成安裝,【這里安裝需要注意擴展exif,這個擴展會用到mbstring擴展中的方法,所以mbstring的加載順序需要再exif之上。】完成pear的安裝之后就可以執行pear,查看pear的命令參數,

使用XDebug調試及單元測試覆蓋率分析

然后依次執行:

pear channel-discover pear.phpunit.de

pear install –alldeps phpunit/PHPUnit

需要注意的是現在最新版的phpunit是3.5的··但是這個只有pear的版本是1.6以上及PHP5.2.X才會安裝得到最新版·否則是安裝的是第一次的版本(不過不影響使用)。

安裝好后就可以執行phpunit查看相關信息:

使用XDebug調試及單元測試覆蓋率分析

可以看到有—coverage-html –coverage-clover –coverage-source這三個選項·就是因為在XDebug安裝成功之后才能用,這三個對于導出覆蓋率文件可是很重要的選項。

二、PHPUnit單元測試覆蓋率分析

單元測試,最重要的指標之一就是覆蓋率。這點雖然Zend Studio上可以很清晰的看出來,可是要導出成一分文檔就不太好使了,所以這時候XDebug就又可以幫上忙了,使用的時候也挺簡單,調用命令即可:

phpunit –coverage-html D:\PHPAPP\XDebug\YouTest

這樣就會將生成的覆蓋文件(html格式的)放在D:\PHPAPP\XDebug\目錄下了,

使用XDebug調試及單元測試覆蓋率分析

然后就可以在放置的目錄下找到一堆的html文件,運行下index.html

使用XDebug調試及單元測試覆蓋率分析

就可以看到這樣的圖了,英文字母很簡單··意思也明了就不解釋了,說明一點:

測試結果說明:一共有5種,上圖的例子出現了兩種。

.:代表正確

F:代表斷言錯誤

E:代表PHP程序錯誤或是異常

I:代表沒有實現的方法

S:代表是跳過的方法

生產的覆蓋文件說明:

Classes:只有一個類中的所有方法都被覆蓋的時候,這個類才算是被測試完的

Functions/Methods:只有一個方法或是函數的所有有效的語句代碼都被執行到了才算這個方法或是函數是被測試完的

Lines:總行數將會不飽行注釋,空行,標簽,及類及方法的聲明。

使用phpunit –coverage-clover D:\PHPAPP\XDebug\first.xmlYouTest

生產的將會是一個xml格式的文件,這個格式的文件效果不明顯,沒有html格式的好,這邊的效果被我刪掉了所以么有效果圖可看,第三個覆蓋文件的參數我沒測試過,大家有興趣可以試試。

三、程序執行性能分析

XDebug除了有效的幫助分析單元測試覆蓋率之外,還可以幫組分析程序執行的瓶頸所在,開啟分析的功能:

xdebug.profiler_enable = on

xdebug.profiler_output_dir=D:\PHPAPP\XDebug

設置上面兩項,然后執行你要分析的程序,就會在上面的目錄下看到cachegrind.out.XXX的文件,這個文件直接打開就是一些記錄,需要借助第三方的cachegrind查看工具才行,一個好用的工具是winCacheGrind,查看起來很方便。

使用XDebug調試及單元測試覆蓋率分析

可以看到執行的總時間,及每個函數執行的時間。

因為這個工具在打開文件的時候,只能打開cachegrind.out.*的文件,所以待分析的文件必須是這個名字的,所以為了省去重命名,這也就是為啥我說不建議修改xdebug.profiler_output_name這個選項的原因。

四、XDebug庫函數

XDebug除了上述方式外,還有自己的一些函數庫提供,可以在你程序的代碼段任何地方執行,具體的請看http://xdebug.org/docs/all_functions

的功能,還不止這些,因為他的選項·好大的一頁,所以還是去http://xdebug.org/docs/這里看看官方的說明。靠譜!

延伸 · 閱讀

精彩推薦
法甲赛程积分