Python單元測試框架覆蓋率-Coverage
- 2019 年 10 月 7 日
- 筆記
覆蓋率介紹
首先來看看什麼是單元測試覆蓋率:
覆蓋率是用來衡量單元測試對功能程式碼的測試情況,通過統計單元測試中對功能程式碼中行、分支、類等模擬場景數量,來量化說明測試的充分度。
程式碼覆蓋率 = 程式碼的覆蓋程度,一種度量方式。
它的度量方式包括但是不僅限於以下幾種:
語句覆蓋(度量被測程式碼中每個可執行語句是否被執行到了)
判定覆蓋(又稱分支覆蓋,度量程式中每一個判定的分支是否都被測試到了)
條件覆蓋(度量判定中的每個子表達式結果true和false是否被測試到了)
路徑覆蓋(度量了是否函數的每一個分支都被執行了)
組合覆蓋等
那麼對於Python項目又如果對它的單元測試覆蓋率進行分析呢?
當然同Java的JaCoCo、Cobertura等一樣,Python也有自己的單元測試覆蓋率統計工具,Coverage就是其中一種。
Coverage介紹與安裝
Coverage是一種用於統計Python程式碼覆蓋率的工具,通過它可以檢測測試程式碼對被測程式碼的覆蓋率如何。可以高亮顯示程式碼中哪些語句未被執行,哪些執行了,方便單測。並且,coverage支援分支覆蓋率統計,可以生成HTML/XML報告。
官方文檔:http://coverage.readthedocs.org/en/latest/
獲取地址:http://pypi.python.org/pypi/coverage
Coverage安裝:
pip install coverage
使用幫助:
使用help命令查看幫助:$ coverage help
Coverage使用
對於Coverage的使用,比較簡單,直接coverage run命令去執行已經寫好的單元測試用例就可以了。
執行單元測試:
coverage run test.py arg1 arg2
這裡test.py是已經完成的測試用例腳本,arg1 arg2是test.py執行需要的參數。
執行結束後,會自動生成一個覆蓋率統計結果文件(data file):.coverage。當然這個文件裡面一大堆數字是不方便我們查看的。
所以我們使用另外一條命令查看覆蓋統計結果:coverage report。

這裡
Stmts:表示語句總數
Miss:未執行到的語句數
Cover=(Stmts-Miss)/Stmts
當然也可以生成更加清理明了的html測試報告:
coverage html -d report
這裡-d指定html文件夾。
生成的報告直接關聯程式碼,高亮顯示覆蓋和未覆蓋的程式碼,支援排序。-d指定html文件夾。

通過點擊其中的各個py文件可以看到各自的程式碼被執行情況

當然還可以通過API方式執行測試並統計覆蓋率:
cov = coverage.coverage(source=["course_search"]) cov.start() suite = unittest.defaultTestLoader.discover(os.getcwd(), "test_course_search.py") unittest.TextTestRunner().run(suite) cov.stop() cov.report() cov.html_report(directory="report_html_01")