package
cobertura
生成代碼覆蓋率文件以后,通過(guò)Jenkins SonarQube Scanner或者執行 mvn sonar:sonar 將該文件上傳至Sonar 服務(wù)器,就可以解析該文件,生成圖形化的界面
集成測試覆蓋率
測試人員執行集成測試測試用例時(shí)(包括手工執行和自動(dòng)化執行),我們需要代碼覆蓋率來(lái)發(fā)現測試用例設計的遺漏,及時(shí)補充用例來(lái)覆蓋未被覆蓋到的代碼。
被測系統,在服務(wù)啟動(dòng)時(shí),都會(huì )通過(guò)javaagent的方式做On-The-Fly插樁
被測服務(wù)器啟動(dòng)之后,測試人員手工執行測試用例,Jacoco Agent會(huì )實(shí)時(shí)將代碼覆蓋率信息傳輸給Jacoco Prase Server,該服務(wù)器保存了被測代碼源文件以及編譯后的目標文件,服務(wù)器會(huì )結合源文件、目標文件以及代碼覆蓋率信息生成圖表化的覆蓋率文件。
自動(dòng)化執行測試用例完成之后,獲取代碼覆蓋率信息,通過(guò)Jenkins Jacoco插件解析,獲取圖表化的覆蓋率文件。
獲取代碼覆蓋率報告之后,結合git獲取的本次代碼變動(dòng)信息,得到測試用例覆蓋的變動(dòng)文件的測試覆蓋率統計信息。來(lái)分析是否有由于測試用例設計遺漏導致的代碼沒(méi)有覆蓋或者是開(kāi)發(fā)的無(wú)效代碼導致該代碼無(wú)法被覆蓋,如果測試用例設計有所遺漏,可以對照的增加相應的用例;如果是無(wú)效代碼可以刪除。
自動(dòng)化集成流程
1. 業(yè)務(wù)開(kāi)發(fā)完成之后,開(kāi)發(fā)人員做單元測試,單元測試完成之后,保證單元測試全部通過(guò)同時(shí)單元測試代碼覆蓋率達到一定程度(這個(gè)需要開(kāi)發(fā)和測試約定,理論上越高越好),開(kāi)發(fā)提測。
2. 測試人員根據測試用例進(jìn)行測試(包括手工測試和自動(dòng)化測試),結合git獲取本次變動(dòng)代碼的覆蓋率信息。行覆蓋率需達到100%,分支達到50%以上,這個(gè)需要具體場(chǎng)景具體分析。
3. 測試通過(guò)之后,代碼合并至主干,進(jìn)行自動(dòng)化回歸。
4. 回歸測試通過(guò)之后,代碼可以上線(xiàn)。
基于這套流程,我們可以將單元測試代碼覆蓋率和集成測試代碼覆蓋率整合到持續集成流程中,如果代碼覆蓋率達不到我們設置的某個(gè)值時(shí),可以終止流程繼續下去獲取需要人工確認之后,繼續流程。
總結
本文主要介紹了Java代碼覆蓋率統計原理以及結合有贊測試的工程實(shí)踐介紹了代碼覆蓋率該如何應用的實(shí)際測試中。不管是白盒測試還是黑盒測試,代碼覆蓋率統計都是必不可少的一環(huán),它可以直接反映本次測試的遺漏點(diǎn)(不是100%反映)。結合到自動(dòng)發(fā)布場(chǎng)景也是一個(gè)較好地衡量指標。
最后再重申一下本文開(kāi)篇的觀(guān)點(diǎn):
代碼覆蓋率統計是用來(lái)發(fā)現沒(méi)有被測試覆蓋的代碼
代碼覆蓋率統計不能完全用來(lái)衡量代碼質(zhì)量
原文轉自: http://tech.youzan.com/code-coverage/