在測試中,為了度量產(chǎn)品質(zhì)量,代碼覆蓋率被作為一種測試結(jié)果的評判依據(jù),在Python代碼中用來分析代碼覆蓋率的工具當(dāng)屬Coverage。代碼覆蓋率是由特定的測試套件覆蓋被測源代碼的程度來度量,Coverage是一種用于統(tǒng)計(jì)Python代碼覆蓋率的工具,通過它可以檢測測試代碼的有效性,即測試case對被測代碼的覆蓋率幾何。
Coverage不僅支持分支覆蓋率統(tǒng)計(jì),還可以生成HTML/XML報(bào)告。并且XML報(bào)告可以結(jié)合Jenkins和Sonar集成工具一起使用。
安裝
Coverage作為Python的一個(gè)第三方庫,使用時(shí)需要先安裝,使用pip命令進(jìn)行安裝。安裝命令:pipinstallcoverage
C:\\Users\\TynamYang>pipinstallcoverage
Collectingcoverage
Downloadingcoverage\-5.1-cp37-cp37m-win32.whl\(204kB\)||204kB731kB/s
Installingcollectedpackages:coverage
Successfullyinstalledcoverage\-5.1C:\\Users\\TynamYang\>
安裝完成后可以看到安裝的版本:coverage-5.1安裝完成后使用coverage,coverage有兩種使用方法,一種是在命令行中使用,一種是調(diào)用API使用。方便控制部分需要測試的代碼。
命令行中使用
1、基本參數(shù)
命令行中使用時(shí)常用參數(shù):
·run–運(yùn)行Python程序并收集執(zhí)行數(shù)據(jù)
·report–報(bào)告覆蓋率結(jié)果
·html–生成HTML文件,內(nèi)容含覆蓋率結(jié)果列表
·json–生成JSON文件,內(nèi)容含覆蓋率結(jié)果
·xml–生成XML報(bào)告文件,內(nèi)容含覆蓋率結(jié)果
·erase–清除之前收集的覆蓋率數(shù)據(jù)
·combine–合并多個(gè)數(shù)據(jù)文件
·debug–獲取調(diào)試信息
可以使用help命令查看幫助:coveragehelp
2、運(yùn)行代碼收集信息
在使用coverage時(shí),基本需要兩步運(yùn)行,第一步運(yùn)行源代碼,收集被測試的源代碼覆蓋率的信息,第二步生成代碼覆蓋率的信息報(bào)告。
如下測試代碼:
#test.py
#coding:utf-8
importunittest
defadd_numb(a,b):
returna+b
defdivision_numb(a,b):
returna/b
classTest(unittest.TestCase):
deftest_add_1(self):
self.assertEqual(add_numb(1,1),2)
deftest_add_2(self):
self.assertEqual(add_numb(2,0),1)
deftest_division_1(self):
self.assertEqual(division_numb(2,1),2)
deftest_division_2(self):
self.assertEqual(division_numb(2,0),2)
if__name__=="__main__":
unittest.main(verbosity=2)
使用命令運(yùn)行:coverageruntest.py
C:\\Users\\TynamYang\\Desktop>coverageruntest.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\(mostrecentcalllast\):
File"test.py",line22,intest\_division\_2
self.assertEqual\(division\_numb\(2,0\),2\)
File"test.py",line9,indivision\_numbreturna/b
ZeroDivisionError:divisionbyzero\======================================================================FAIL:test\_add\_2\(\_\_main\_\_.Test\)\----------------------------------------------------------------------Traceback\(mostrecentcalllast\):
File"test.py",line16,intest\_add\_2
self.assertEqual\(add\_numb\(2,0\),1\)
AssertionError:2\!=1
----------------------------------------------------------------------Ran4testsin0.003s
FAILED\(failures\=1,errors=1\)
PSC:\\Users\\TynamYang\\Desktop\>
代碼執(zhí)行完成后會(huì)生成一個(gè)覆蓋率統(tǒng)計(jì)結(jié)果文件:.coverage。該文件名可通過設(shè)置COVERAGE_FILE環(huán)境變量進(jìn)行修改。
以上內(nèi)容為大家介紹了如何分析Python測試代碼覆蓋率?,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。