如果衡量單元測試對相應代碼的測試重量,覆蓋率是一個必要非充分條件,因此統計代碼的覆蓋率,檢視單測是否充分,就尤為的重要。這里針對python-unittest的單測的覆蓋率coverage進行使用說明與分析.
參考鏈接:https://blog.csdn.net/xiaoxinyu316/article/details/53695342
coverage簡介:
coverage是一種用於統計Python代碼覆蓋率的工具,通過它可以檢測測試代碼對被測代碼的覆蓋率如何。可以高亮顯示代碼中哪些語句未被執行,哪些執行了,方便單測。並且,coverage支持分支覆蓋率統計,可以生成HTML/XML報告。
官方文檔:http://coverage.readthedocs.org/en/latest/
獲取地址:http://pypi.python.org/pypi/coverage
使用coverage統計代碼覆蓋率的步驟:
- 安裝coverage包: pip install coverage
- 在源代碼的根目錄的路徑下面,添加文件‘.coveragerc.py’
1 # 文件中的代碼為: 2 [run] 3 branch = True 4 source = xxx #項目名稱xxx
- 進入當前待執行的文件路徑下面
- 執行
- coverage run --help # 打印幫助信息
- coverage run test_xxx.py # 執行test_xxx.py文件,會自動生成一個覆蓋率統計結果文件.coverage
- coverage report -m(帶有詳細信息) # 查看coverage報告,讀取.coverage文件並打印到屏幕上,可以在命令行里看到統計結果
- coverage html -d report # 生成顯示整體的covergae html形式的報告 (在當前同路徑下生成一個report文件夾,里面包含html形式的報告。通過查看report文件夾下的內容即可)
- 備注:coverage run test.py命令運行的文件,會統計項目中包括測試文件本身在內的所有文件,run參數的子參數—source可以指定要統計的文件:$ coverage run --source=totest.py test.py 可以只統計totest.py文件。
- 注意事項:
如果是針對單測的覆蓋率統計,需要在單測文件test_xxx.py的代碼的最后加上。這樣可以執行整個單測代碼,然后執行coverage run test_xxx.py 即可。
1 if __name__ == "__main__": 2 unittest.main()
發散:
- 原理:coverage.py利用了Python虛擬機的trace機制
參考鏈接:https://blog.csdn.net/xluren/article/details/46799939