Python 代碼覆蓋率統計工具 coverage.py

coverage.py是一個用來統計python程序代碼覆蓋率的工具。它使用起來很是簡單,而且支持最終生成界面友好的html報告。在最新版本中,還提供了分支覆蓋的功能。html

官方網站:python

http://nedbatchelder.com/code/coverage/ django

win32版本下載地址:函數

http://pypi.python.org/pypi/coverage
工具

或者經過easy-install來安裝:
測試

easy_install coverage

 

裝好後,在c:\Python25\Scripts\(假設裝在c盤)目錄會有一個coverage.exe。經過這個exe基本上能夠完成咱們全部須要的功能。運行一下,若是發現少了那個模塊,請先安裝easy_install。網站

Coverage Command Line

命令行使用說明: 詳見:http://nedbatchelder.com/code/coverage/cmd.htmlspa

最關鍵核心的幾個參數使用以下:命令行

1. rundebug

執行代碼覆蓋率統計,只須要經過coverage的run參數執行被統計代碼便可。

$ coverage run my_program.py arg1 arg2

跑完後,會自動生成一個覆蓋率統計結果文件(data file):.coverage。若是要修改這個默認的文件名也能夠,只要設置COVERAGE_FILE環境變量。

2. report

有了覆蓋率統計結果文件,只須要再運行report參數,就能夠在命令裏看到統計的結果。

複製代碼
$ coverage report
Name                      Stmts   Exec  Cover
---------------------------------------------
my_program                   20     16    80%
my_module                    15     13    86%
my_other_module              56     50    89%
---------------------------------------------
TOTAL                        91     79    87%
複製代碼

3. html

最帥最酷的功能了,直接生成html的測試報告。

$ coverage html -d covhtml

生成的報告很是酷,直接關聯代碼,高亮顯示覆蓋和未覆蓋的代碼,支持排序。能夠在這個地址預覽一下:

http://nedbatchelder.com/code/coverage/sample_html/ 

效果以下:

 

 

4. combine

用過代碼覆蓋率工具的都知道,多份結果的合併相當重要。combine這個參數我琢磨了好久,開始老是合併不成功。後來終於明白了。執行合併操做很簡單,只要把須要合併的覆蓋率結果數據文件放在同一個目錄裏,而後執行:

coverage combine

 便可。可是,其實對目錄裏的結果文件是有要求的,要求就是文件名的格式,須要合併的文件必須有一樣的前綴,而後後面跟一個名稱(一般是機器名),而後再跟一個數字(一般是進程ID),好比:

.coverage.CoderZh.1234
.coverage.Cnblogs.5678

爲了方便執行結果的合併,咱們在前面執行統計時,在run參數後面跟一個-p參數,會自動生成符合合併條件的結果文件。

$ coverage run -p my_program.py arg1 arg2

合併後,會再生成一個.coverage文件,而後再執行html查看合併後的報告吧。

其餘幾個erase annotate debug 參數就不介紹了。

Coverage API

除了使用命令行,還能夠在python代碼中直接調用coverage模塊執行代碼覆蓋率的統計。使用方法也很是簡單:

複製代碼
import coverage

cov = coverage.coverage()
cov.start()

# .. run your code ..

cov.stop()
cov.save()
複製代碼

 

coverage的構造函數能夠設置結果文件的名稱等。有個函數容易弄錯,就是use_cache,若是設置的use_cache(0),表示不在硬盤上讀寫結果文件。若是須要結果數據用來合併,必定要設置use_cache(1)。

coverage提供一些很好用的函數,如:exclude(排除統計的代碼),html_report(生成html報告),report(控制檯輸出結果)

下篇講講如何在測試django應用時,編寫一個本身的test runner來執行代碼覆蓋率的統計。

相關文章
相關標籤/搜索