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")