每天進(jìn)步一點(diǎn)點(diǎn)首妖,關(guān)注我們哦窍荧,每天分享測試技術(shù)文章
本文章出自【碼同學(xué)軟件測試】
代碼覆蓋(英語:Code coverage)是軟件測試中的一種度量,描述程序中源代碼被測試的比例和程度屈糊,所得比例稱為代碼覆蓋率。
碼同學(xué)公眾號(hào):自動(dòng)化軟件測試
碼同學(xué)抖音號(hào):小碼哥聊軟件測試
測試覆蓋率
測試覆蓋率是對(duì)測試完全程度的評(píng)測晰筛。測試覆蓋率是由測試需求和測試用例的覆蓋或已執(zhí)行代碼的覆蓋的表示結(jié)果。一方面可以衡量測試工作本身的有效性拴袭,提升測試效率读第,一方面可以提升代碼質(zhì)量,減少bug拥刻,提升產(chǎn)品的可靠性怜瞒,穩(wěn)定性。
代碼覆蓋率的意義
·?分析未覆蓋部分的代碼般哼,從而反推3在前期測試設(shè)計(jì)是否充分吴汪,沒有覆蓋到的代碼是否是測試設(shè)計(jì)的盲點(diǎn),為什么沒有考慮到蒸眠?需求/設(shè)計(jì)不夠清晰漾橙,測試設(shè)計(jì)的理解有誤,工程方法應(yīng)用后的造成的策略性放棄等等楞卡,之后進(jìn)行補(bǔ)充測試用例設(shè)計(jì)霜运。
·?檢測出程序中的廢代碼,可以逆向反推在代碼設(shè)計(jì)中思維混亂點(diǎn)蒋腮,提醒設(shè)計(jì)/開發(fā)人員理清代碼邏輯關(guān)系,提升代碼質(zhì)量案淋。
·?代碼覆蓋率高不能說明代碼質(zhì)量高,但是反過來看,代碼覆蓋率低蹈丸,代碼質(zhì)量不會(huì)高到哪里去思瘟,可以作為測試自我審視的重要工具之一够话。
JaCoCo是一個(gè)免費(fèi)的Java代碼覆蓋率庫工具女嘲,由EclEmma團(tuán)隊(duì)根據(jù)多年來使用和集成現(xiàn)有庫的經(jīng)驗(yàn)創(chuàng)建的停蕉,其官網(wǎng)地址為https://www.eclemma.org/jacoco/拒啰。不論開發(fā)和測試都會(huì)有針對(duì)自己寫的單元測試用例屈尼,統(tǒng)計(jì)覆蓋了多少業(yè)務(wù)代碼這樣的訴求甲捏,另外一個(gè)訴求就是統(tǒng)計(jì)結(jié)果能夠自動(dòng)生成HTML報(bào)告,下面我就通過maven化漆、junit付材、jacoco來實(shí)現(xiàn)以上這兩點(diǎn)訴求。
首先需要在maven的pom配置文件中增加如下3個(gè)插件:
maven-surefire-plugin、jacoco-maven-plugin、maven-compiler-plugin。
這3個(gè)插件分別對(duì)應(yīng)的功能是:
maven-surefire-plugin這個(gè)插件是執(zhí)行junit、testng框架單元測試用例時(shí)使用的;
jacoco-maven-plugin這個(gè)插件是統(tǒng)計(jì)單元測試用例覆蓋業(yè)務(wù)代碼率時(shí)使用的;
maven-compiler-plugin這個(gè)插件是按照其配置的jdk版本來編譯java源碼時(shí)使用的。
以下3張截圖是具體的配置內(nèi)容,大家也可以根據(jù)最近的版本更新替換版本號(hào)。
接下來需要對(duì)業(yè)務(wù)代碼編寫單元測試用例缨恒,分別對(duì)應(yīng)如下兩張截圖萧锉,
免費(fèi)領(lǐng)取?碼同學(xué)軟件測試?課程筆記+超多學(xué)習(xí)資料+完整視頻+最新面試題鲫凶,可以轉(zhuǎn)發(fā)文章?+?私信「碼同學(xué)666」獲取資料哦
需要注意的是禀崖,測試用例的包名要和業(yè)務(wù)代碼的包名要保持一致,否則JaCoCo無法統(tǒng)計(jì)覆蓋率螟炫。
然后執(zhí)行如下3條maven命令進(jìn)行清除波附、插件安裝、測試
然后在target\site\jacoco目錄下可見本輪次單元測試結(jié)果報(bào)告的HTML格式結(jié)果昼钻。
打開JaCoCo的html格式報(bào)告如下所示掸屡,統(tǒng)計(jì)整體的覆蓋率信息,單擊包名鏈接然评,可以看到統(tǒng)計(jì)的詳情信息仅财。
值得注意的是App這個(gè)業(yè)務(wù)代碼類中只有1個(gè)main方法,但是統(tǒng)計(jì)的方法數(shù)是2個(gè)碗淌,
這個(gè)統(tǒng)計(jì)是不是不準(zhǔn)確盏求?統(tǒng)計(jì)是準(zhǔn)確的,App這個(gè)類中還有一個(gè)默認(rèn)構(gòu)造函數(shù)贯莺,雖然沒有展示出來风喇,如何證明那另外1個(gè)方法是構(gòu)造函數(shù)呢?我們可以在App的測試類AppTest中增加構(gòu)造函數(shù)的測試用例缕探,具體如下截圖所示魂莫。
再次執(zhí)行單元測試,生成的JaCoCo單測覆蓋率報(bào)告如下所示爹耗,Missed錯(cuò)失數(shù)由之前的2個(gè)變成0個(gè)耙考。證明JaCoCo統(tǒng)計(jì)的方法中涵蓋自動(dòng)生成的默認(rèn)構(gòu)造函數(shù)谜喊。Cov.這列是統(tǒng)計(jì)指定業(yè)務(wù)的單元測試用例整體覆蓋率的;而Missed
Branches Cov.這列是針對(duì)有分支情況下統(tǒng)計(jì)的單元測試用例覆蓋業(yè)務(wù)代碼分支的覆蓋率倦始,如果某個(gè)業(yè)務(wù)類的Missed Branches
Cov.分支覆蓋率為n/a則說明這個(gè)業(yè)務(wù)類中沒有分支情況斗遏,才會(huì)出現(xiàn)n/a這樣結(jié)果,如下截圖中App鞋邑、CoCo這兩個(gè)業(yè)務(wù)類中就沒有分支代碼诵次,因此Missed
Branches
Cov.覆蓋率統(tǒng)計(jì)結(jié)果為n/a,可以理解為這兩個(gè)業(yè)務(wù)類不需要統(tǒng)計(jì)分支覆蓋率枚碗;其他各個(gè)列逾一,在實(shí)際工作過程中不是重點(diǎn)關(guān)注的覆蓋率統(tǒng)計(jì)項(xiàng)。
END
免費(fèi)領(lǐng)取碼同學(xué)軟件測試課程筆記+超多學(xué)習(xí)資料+學(xué)習(xí)完整視頻肮雨,可以關(guān)注我們公眾號(hào)哦:自動(dòng)化軟件測試
本文著作權(quán)歸作者所有遵堵,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。