Python 程式碼涵蓋範圍統計工具 coverage.py

來源:互聯網
上載者:User

coverage.py是一個用來統計python程式碼覆蓋率的工具。它使用起來非常簡單,並且支援最終產生介面友好的html報告。在最新版本中,還提供了分支覆蓋的功能。

官方網站:

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

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.html

最關鍵核心的幾個參數使用如下:

1. run

執行程式碼涵蓋範圍統計,只需要通過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來執行程式碼涵蓋範圍的統計。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.