使用XDebug調(diào)試及單元測試覆蓋率分析
<!--[if !supportLists]-->一、<!--[endif]-->安裝篇(XDebug 和PHPUnit)
A:安裝XDebug:
Xdebug網(wǎng)下載xdebug dll文件,存放到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,就發(fā)現(xiàn)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下生產(chǎn)跟蹤文件,注意該項會影響運行速度,因為他需要記錄跟蹤過程中的一系列事件。
關于XDebug還有一點需要注意的:XDebug是調(diào)試的,也就是說配置了XDebug那程序運行的就是一個Debug狀態(tài),所以這時候zend_optimizer就不能用了,總不能讓程序即調(diào)試狀態(tài)又處于優(yōu)化狀態(tài)哈。
更多關于XDebug的,大家去網(wǎng)上發(fā)掘吧~~然后一起探討哈
友情提醒:對于使用集成環(huán)境的同學,比如Wamp,它擁有兩個PHP.ini配置文件,一個在Apache下,一個在PHP下,Apache下是影響web的,而PHP下是影響命令行的,所以····(感謝俊哥的提醒)
B:安裝PHPUnit:
關于PHPUnit的安裝過程,網(wǎng)上也已經(jīng)很多了,之前自己為了終于安裝成功之后也小寫了篇安裝篇(http://user.qzone.qq.com/414073277/blog/1292122868),所以這里就不再贅述了,網(wǎng)上的一些安裝教程大都能完成安裝。就簡單說下過程:
PHPUnit安裝用的是pear的安裝方式,所以如果機子沒有安裝過pear包需要先安裝下,一般在php安裝的時候在其安裝目錄下都有一個go-pear.bat文件,直接執(zhí)行即可完成安裝,【這里安裝需要注意擴展exif,這個擴展會用到mbstring擴展中的方法,所以mbstring的加載順序需要再exif之上?!客瓿?/SPAN>pear的安裝之后就可以執(zhí)行pear,查看pear的命令參數(shù),
然后依次執(zhí)行:
pear channel-discover pear.phpunit.de
pear install –alldeps phpunit/PHPUnit
需要注意的是現(xiàn)在最新版的phpunit是3.5的··但是這個只有pear的版本是1.6以上及PHP5.2.X才會安裝得到最新版·否則是安裝的是第一次的版本(不過不影響使用)。
安裝好后就可以執(zhí)行phpunit查看相關信息:
可以看到有—coverage-html –coverage-clover –coverage-source這三個選項·就是因為在XDebug安裝成功之后才能用,這三個對于導出覆蓋率文件可是很重要的選項。
<!--[if !supportLists]-->二、<!--[endif]-->PHPUnit 單元測試覆蓋率分析
單元測試,最重要的指標之一就是覆蓋率。這點雖然Zend Studio上可以很清晰的看出來,可是要導出成一分文檔就不太好使了,所以這時候XDebug就又可以幫上忙了,使用的時候也挺簡單,調(diào)用命令即可:
phpunit –coverage-html D:\PHPAPP\XDebug\ YouTest
這樣就會將生成的覆蓋文件(html格式的)放在D:\PHPAPP\XDebug\目錄下了,
然后就可以在放置的目錄下找到一堆的html文件,運行下index.html
就可以看到這樣的圖了,英文字母很簡單··意思也明了就不解釋了,說明一點:
測試結(jié)果說明:一共有5種,上圖的例子出現(xiàn)了兩種。
. :代表正確
F :代表斷言錯誤
E :代表PHP程序錯誤或是異常
I : 代表沒有實現(xiàn)的方法
S : 代表是跳過的方法
生產(chǎn)的覆蓋文件說明:
Classes: 只有一個類中的所有方法都被覆蓋的時候,這個類才算是被測試完的
Functions/Methods :只有一個方法或是函數(shù)的所有有效的語句代碼都被執(zhí)行到了才算這個方法或是函數(shù)是被測試完的
Lines: 總行數(shù)將會不飽行注釋,空行,<?php ?> 標簽, 及類及方法的聲明。
使用phpunit –coverage-clover D:\PHPAPP\XDebug\first.xml YouTest
生產(chǎn)的將會是一個xml格式的文件,這個格式的文件效果不明顯,沒有html格式的好,這邊的效果被我刪掉了所以么有效果圖可看,第三個覆蓋文件的參數(shù)我沒測試過,大家有興趣可以試試。
<!--[if !supportLists]-->三、<!--[endif]-->程序執(zhí)行性能分析
XDebug除了有效的幫助分析單元測試覆蓋率之外,還可以幫組分析程序執(zhí)行的瓶頸所在,開啟分析的功能:
xdebug.profiler_enable = on
xdebug.profiler_output_dir=D:\PHPAPP\XDebug
設置上面兩項,然后執(zhí)行你要分析的程序,就會在上面的目錄下看到cachegrind.out.XXX的文件,這個文件直接打開就是一些記錄,需要借助第三方的cachegrind查看工具才行,一個好用的工具是winCacheGrind,查看起來很方便。
可以看到執(zhí)行的總時間,及每個函數(shù)執(zhí)行的時間。
因為這個工具在打開文件的時候,只能打開cachegrind.out.*的文件,所以待分析的文件必須是這個名字的,所以為了省去重命名,這也就是為啥我說不建議修改xdebug.profiler_output_name這個選項的原因。
XDebug除了上述方式外,還有自己的一些函數(shù)庫提供,可以在你程序的代碼段任何地方執(zhí)行,具體的請看http://xdebug.org/docs/all_functions
- php Xdebug 調(diào)試擴展的安裝與使用.
- 使用NetBeans + Xdebug調(diào)試PHP程序的方法
- php性能優(yōu)化分析工具XDebug 大型網(wǎng)站調(diào)試工具
- 解析phpstorm + xdebug 遠程斷點調(diào)試
- 解析VS2010利用VS.PHP插件調(diào)試PHP的方法
- 如何使用FireFox插件FirePHP調(diào)試PHP
- 用Zend Studio+PHPnow+Zend Debugger搭建PHP服務器調(diào)試環(huán)境步驟
- phpstorm配置Xdebug進行調(diào)試PHP教程
- 解決ThinkPHP關閉調(diào)試模式時報錯的問題匯總
- PHP遠程調(diào)試之XDEBUG
相關文章
php使用curl通過代理獲取數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了php使用curl通過代理獲取數(shù)據(jù)的實現(xiàn)方法,主要涉及php curl中CURLOPT_PROXYUSERPWD參數(shù)的使用技巧,需要的朋友可以參考下2016-05-05php合并數(shù)組array_merge函數(shù)運算符加號與的區(qū)別
“+”運算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多個數(shù)組,但使用過程中有一點小區(qū)別。2008-10-10PHP字符過濾函數(shù)去除字符串最后一個逗號(rtrim)
PHP字符過濾函數(shù)去除字符串最后一個逗號,用php自帶的函數(shù)比較容易解決2013-03-03php簡單實現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法
這篇文章主要介紹了php簡單實現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法,涉及php操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03