京寵展信息指南
1807
2022-05-30
本文來自Tynam Yang投稿
簡介
在測試中,為了度量產品質量,代碼覆蓋率被作為一種測試結果的評判依據,在Python代碼中用來分析代碼覆蓋率的工具當屬Coverage。代碼覆蓋率是由特定的測試套件覆蓋被測源代碼的程度來度量,Coverage是一種用于統計Python代碼覆蓋率的工具,通過它可以檢測測試代碼的有效性,即測試case對被測代碼的覆蓋率幾何。
Coverage支不僅持分支覆蓋率統計,還可以生成HTML/XML報告。并且XML報告可以結合Jenkins和Sonar集成工具一起使用。
Coverage官方文檔:http://coverage.readthedocs.org/en/latest/
安裝
Coverage作為Python的一個第三方庫,使用時需要先安裝,使用pip命令進行安裝。
安裝命令:pip install coverage
C:\Users\TynamYang>pip?install?coverage
Collecting?coverage
Downloading?coverage-5.1-cp37-cp37m-win32.whl?(204?kB)
|████████████████████████████████|?204?kB?731?kB/s
Installing?collected?packages:?coverage
Successfully?installed?coverage-5.1
安裝完成后可以看到安裝的版本:coverage-5.1
安裝完成后使用coverage,coverage有兩種使用方法,一種是在命令行中使用,一種是調用API使用。方便控制部分需要測試的代碼。
命令行中使用
1、基本參數
命令行中使用文檔:http://coverage.readthedocs.org/en/latest/cmd.html
命令行中使用時常用參數:
run – 運行Python程序并收集執行數據
report – 報告覆蓋率結果
html – 生成HTML文件,內容含覆蓋率結果列表
json – 生成JSON文件,內容含覆蓋率結果
xml – 生成XML報告文件,內容含覆蓋率結果
erase – 清除之前收集的覆蓋率數據
combine – 合并多個數據文件
debug – 獲取調試信息
可以使用help命令查看幫助:
coverage help
2、運行代碼收集信息
在使用coverage時,基本需要兩步運行,第一步運行源代碼,收集被測試的源代碼覆蓋率的信息,第二步生成代碼覆蓋率的信息報告。
如下測試代碼:
import?unittest
def?add_numb(a,?b):
return?a?+?b
def?division_numb(a,?b):
return?a?/?b
class?Test(unittest.TestCase):
def?test_add_1(self):
self.assertEqual(add_numb(1,1),?2)
def?test_add_2(self):
self.assertEqual(add_numb(2,0),?1)
def?test_division_1(self):
self.assertEqual(division_numb(2,1),?2)
def?test_division_2(self):
self.assertEqual(division_numb(2,0),?2)
if?__name__?==?"__main__":
unittest.main(verbosity=2)
使用命令運行:
coverage run test.py
C:\Users\TynamYang\Desktop>?coverage?run?test.py
test_add_1?(__main__.Test)?...?ok
test_add_2?(__main__.Test)?...?FAIL
test_division_1?(__main__.Test)?...?ok
test_division_2?(__main__.Test)?...?ERROR
======================================================================
ERROR:?test_division_2?(__main__.Test)
----------------------------------------------------------------------
Traceback?(most?recent?call?last):
File?"test.py",?line?22,?in?test_division_2
self.assertEqual(division_numb(2,0),?2)
File?"test.py",?line?9,?in?division_numb
return?a?/?b
ZeroDivisionError:?division?by?zero
======================================================================
FAIL:?test_add_2?(__main__.Test)
----------------------------------------------------------------------
Traceback?(most?recent?call?last):
File?"test.py",?line?16,?in?test_add_2
self.assertEqual(add_numb(2,0),?1)
AssertionError:?2?!=?1
----------------------------------------------------------------------
Ran?4?tests?in?0.003s
FAILED?(failures=1,?errors=1)
代碼執行完成后會生成一個覆蓋率統計結果文件:.coverage。該文件名可通過設置COVERAGE_FILE環境變量進行修改。
3、生成報告
查看報告有兩種方式,一種是在當前命令行模式下查看,一種是生成HTML報告文件查看。
命令行模式下查看
根據運行代碼后生成的.coverage文件,使用report參數可在命令行模式下查看覆蓋率統計結果。
使用命令:
coverage report
PS?C:\Users\TynamYang\Desktop>?coverage?report
Name??????Stmts???Miss??Cover
-----------------------------
test.py??????16??????0???100%
由結果可以得知,執行的test.py文件,代碼覆蓋率是100%
結果展示中的字段含義:
tmts:語句總數
Miss:未執行到的語句數
Cover:覆蓋率,計算公式 Cover=(Stmts-Miss)/Stmts
生成HTML報告文件
使用命令生成HTML報告:
coverage html -d covhtml
其中參數-d是指定生成的html所在的文件夾名
命令執行完成后會生成一個covhtml文件。
文件中的index.html文件覆蓋率數據統計。
也可以看一些示例:https://nedbatchelder.com/files/sample_coverage_html/
各字段說明:
Stmts 總的有效代碼行數(不包含空行和注釋行)
Miss 未執行的代碼行數(不包含空行和注釋行)
Branch 總分支數
BrMiss 未執行的分支數
Cover 代碼覆蓋率
Missing 未執行的代碼部分在源文件中行號
以執行的測試原文件命名的文件,可以高亮顯示覆蓋和未覆蓋的代碼。如test_py.html。
也可以看一些示例,http://nedbatchelder.com/code/coverage/sample_html/
使用
調用API使用文檔:http://coverage.readthedocs.org/en/latest/api.html
在python代碼中通過調用coverage模塊執行代碼生成代碼覆蓋率的統計結果。使用方法也非常簡單,如下示例:
if?__name__?==?"__main__":
#?實例化對象
cov?=?coverage.coverage()
#?開始分析
cov.start()
suite?=?unittest.defaultTestLoader.discover(os.getcwd(),?"test.py")
unittest.TextTestRunner().run(suite)
#?結束分析
cov.stop()
#?結果保存
cov.save()
#?命令行模式展示結果
cov.report()
#?生成HTML覆蓋率報告
cov.html_report(directory='covhtml')
文章鏈接地址:
https://www.cnblogs.com/tynam/p/12788442.html
以上,便是今天的內容,希望大家喜歡,歡迎「轉發」或者點擊「在看」支持!
“掃一掃,關注我吧”
HTML Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。