使用Coverage.py計算測試覆蓋率
對於測試的質量,有一個重要的考慮指標----測試覆蓋率(test coverage)。100%的測試覆蓋率是理想目標,但有些時候並不是那麼容易實現。對於大多數項目來說,應該儘量將測試覆蓋率保持在90%左右。
Coverage.py是一個使用python編寫的檢查代碼覆蓋率的工具,我們可以使用它來檢查測試覆蓋率,首先使用pipenv安裝它:
pipenv install coverage --dev
一. 基本用法
Coverage.py提供了命令行支持,使用起來非常簡單。爲了演示Coverage.py用法,使用下面一個簡單的python腳本演示一下:
def func1():
print("123")
def func2():
print("456")
if __name__ == "__main__":
func1()
coverage run命令用來執行腳本並計算代碼執行覆蓋率,命令後要附 加腳本文件名作爲執行的目標:
這會在腳本所在目錄生成一個.coverage文件,其中包含了運行的結 果數據。我們使用coverage report命令來輸出覆蓋率報告:
通過報告我們可以看出,這個腳本代碼的執行情況,一共有6行代碼,1行沒有執行,覆蓋率爲83%。 除了在命令行中輸出覆蓋率報告,我們還可以使用coverage html來 查看HTML版本的覆蓋率報告:
coverage html
這會在腳本所在目錄生成一個htmlcov文件夾,使用瀏覽器打開其 中的index.html文件可以看到HTML格式的覆蓋率報告主頁,如下:
單擊對應的腳本,我們還可以查看使用顏色標出代碼執行的具體覆蓋情況,點擊"hahaha.py"可進入如下界面:
最後使用coverage erase可以清除 coverage report產生的.coverage文件:
二. 獲取測試覆蓋率
我們可以使用下面的命令在運行測試的同時開啓覆蓋率檢查,這樣 就可以獲取測試覆蓋率:
coverage run --source=app --branch -m unittest discover
同樣,coverage report獲取測試報告:
coverage report
整體覆蓋率爲67%,其中model.py中的代碼覆蓋率很不錯。接下來,獲取更爲詳細的html測試覆蓋率報告:
coverage html