java代碼覆蓋度之jacoco

目的

a. 度量單元測試覆蓋率借嗽;

b. 度量自動化測試(接口、UI)覆蓋率判沟;

c. 度量功能測試覆蓋率耿芹;

代碼覆蓋率是衡量測試質量的一個重要指標崭篡。

Jacoco簡介

JaCoCo是一個開源的覆蓋率工具(官網(wǎng)地址:http://www.eclemma.org/JaCoCo/),它針對的開發(fā)語言是java吧秕,其使用方法很靈活琉闪。可以嵌入到Ant砸彬、Maven中颠毙;可以作為Eclipse插件∩暗铮可以使用其JavaAgent技術監(jiān)控Java程序等蛀蜜。

JaCoCo可以集成sonar、Jenkins等增蹭。

Jacoco安裝

需要安裝的工具與版本

安裝的工具及版本

? Jacoco官網(wǎng)下載地址 https://www.eclemma.org/jacoco/滴某;

? Ant官網(wǎng)下載地址 https://ant.apache.org/bindownload.cgi

注:Ant需要配置環(huán)境變量滋迈;

使用java agent方式啟動項目

1) Spring Boot項目

nohup java -javaagent:/disk1/jacoco-0.8.3/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9006,address=*? -jar autoshell-0.0.1-SNAPSHOT.jar&

2) Tomcat部署項目

java -javaagent:/disk1/jacoco-0.8.3/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9006,address=*? -jar autoshell-0.0.1-SNAPSHOT.jar&

將以上內容放到tomcat>bin>catalina.bat(linux環(huán)境為catalina.sh)霎奢,配置前需要停止服務。

java agent啟動說明

? 以-javaagent開頭的杀怠,注意這中間不能有空格椰憋,否則會啟動失敗,后面跟著的是jacoco的安裝路徑中的jacocoagent.jar包的路徑赔退,

? includes配置包含在執(zhí)行分析中的類名列表橙依,我分析全部,因此使用*通配符硕旗〈捌铮可以只分析一個包下的代碼,也可以使用excludes排除不想要的包漆枚。

? output指的是用于寫入覆蓋數(shù)據(jù)的輸出方法创译,使用tcpserver代理偵聽由address和port屬性指定的TCP端口,并將執(zhí)行的數(shù)據(jù)寫入此TCP連接墙基,從而實現(xiàn)不停止項目運行實時生成代碼覆蓋率報告软族。

? port為端口號,需要明確的一點就是這個端口號不是項目的yml配置文件中配置的server.port端口號残制,不要搞混淆了立砸,選擇一個未被占用的即可。address配置連接的ip地址初茶,可以簡單理解為之前安裝ant的機器的ip地址颗祝。*號則表示此代理接受任何本地的連接,也就是說同一局域網(wǎng)下都可以。

? 其他屬性配置請參照官方文檔:https://www.eclemma.org/jacoco/trunk/doc/agent.html

注意:在tcpserver和 tcpclient模式下打開的端口和連接以及JMX接口不提供任何身份驗證機制螺戳。如果在生產環(huán)境上運行jacoco搁宾,請確保沒有不受信任的源可以訪問TCP服務器端口,或者jacoco TCP客戶端僅連接到受信任的目標倔幼。否則可能會泄露應用程序的內部信息或者可能發(fā)生DOS攻擊盖腿。

上傳源碼到服務器

將源碼與編譯后的文件上傳到項目服務器,若源碼變更需要同步更新凤藏。

ant build.xml配置

ant buil.xml配置

覆蓋度報告收集

1) 進入ant? build.xml目錄,執(zhí)行ant dump

訪問目標服務奸忽,并生成.exec文件堕伪;

ant dump

2) 進入ant build.xml目錄,執(zhí)行ant report揖庄;

根據(jù)dump后,生成的.exec文件欠雌,生成最終的html覆蓋率報告

ant report

3) 查看覆蓋度報告

生成報告文件
代碼覆蓋度報告

?Elment對應jacocoant.xml文件中配置的group name屬性蹄梢,也就是我項目中的一個子項目,點進去可以看到所有的包富俄,再點擊包可以看到里面的類文件禁炒,點擊類進入到方法列表,方法還可以點霍比,點了會直接進入到代碼當中幕袱,代碼會有顏色并高亮顯示,分支代碼的左邊還會有一顆帶顏色的鉆石

?Jacoco包含了多種尺度的覆蓋率計數(shù)器,包含指令級(Instructions,C0 coverage)悠瞬,分支(Branches,C1 coverage)们豌、圈復雜度(CyclomaticComplexity)、行(Lines)浅妆、方法(Non-abstract

Methods)望迎、類(Classes)。

?1. Instructions

Jacoco計算的最小單位就是字節(jié)碼指令凌外。指令覆蓋率表明了在所有的指令中辩尊,哪些被指令過以及哪些沒有被執(zhí)行。這項指數(shù)完全獨立于源碼格式并且在任何情況下有效康辑,不需要類文件的調試信息摄欲。

?2. Branches

Jacoco對所有的if和switch指令計算了分支覆蓋率。這項指標會統(tǒng)計所有的分支數(shù)量疮薇,并同時支出哪些分支被執(zhí)行胸墙,哪些分支沒有被執(zhí)行。這項指標也在任何情況都有效惦辛。異常處理不考慮在分支范圍內劳秋。在有調試信息的情況下,分支點可以被映射到源碼中的每一行,并且被高亮表示玻淑。

紅色鉆石:無覆蓋嗽冒,沒有分支被執(zhí)行。黃色鉆石:部分覆蓋补履,部分分支被執(zhí)行添坊。綠色鉆石:全覆蓋,所有分支被執(zhí)行箫锤。

? Cyclomatic Complexity

Jacoco為每個非抽象方法計算圈復雜度贬蛙,并也會計算每個類,包谚攒,組的復雜度阳准。根據(jù)McCabe1996的定義,圈復雜度可以理解為覆蓋所有的可能情況最少使用的測試用例數(shù)馏臭。這項參數(shù)也在任何情況下有效野蝇。

? Lines該項指數(shù)在有調試信息的情況下計算。因為每一行代碼可能會產生若干條字節(jié)碼指令括儒,所以我們用三種不同狀態(tài)表示行覆蓋率

紅色背景:無覆蓋绕沈,該行的所有指令均無執(zhí)行。黃色背景:部分覆蓋帮寻,該行部分指令被執(zhí)行乍狐。綠色背景:全覆蓋,該行所有指令被執(zhí)行固逗。

?Methods每一個非抽象方法都至少有一條指令浅蚪。若一個方法至少被執(zhí)行了一條指令,就認為它被執(zhí)行過抒蚜。因為JaCoco直接對字節(jié)碼進行操作掘鄙,所以有些方法沒有在源碼顯示(比如某些構造方法和由編譯器自動生成的方法)也會被計入在內。

?Classes每個類中只要有一個方法被執(zhí)行嗡髓,這個類就被認定為被執(zhí)行操漠。同5一樣,有些沒有在源碼聲明的方法被執(zhí)行饿这,也認定該類被執(zhí)行浊伙。

參考地址:http://www.reibang.com/p/4c728b39185e

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市长捧,隨后出現(xiàn)的幾起案子嚣鄙,更是在濱河造成了極大的恐慌,老刑警劉巖串结,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哑子,死亡現(xiàn)場離奇詭異舅列,居然都是意外死亡,警方通過查閱死者的電腦和手機卧蜓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門帐要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弥奸,你說我怎么就攤上這事榨惠。” “怎么了盛霎?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵赠橙,是天一觀的道長。 經常有香客問我愤炸,道長期揪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任摇幻,我火速辦了婚禮横侦,結果婚禮上,老公的妹妹穿的比我還像新娘绰姻。我一直安慰自己,他們只是感情好引瀑,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布狂芋。 她就那樣靜靜地躺著,像睡著了一般憨栽。 火紅的嫁衣襯著肌膚如雪帜矾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天屑柔,我揣著相機與錄音屡萤,去河邊找鬼。 笑死掸宛,一個胖子當著我的面吹牛死陆,可吹牛的內容都是我干的。 我是一名探鬼主播唧瘾,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼措译,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饰序?” 一聲冷哼從身側響起领虹,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎求豫,沒想到半個月后塌衰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉稍,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年最疆,在試婚紗的時候發(fā)現(xiàn)自己被綠了均唉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡肚菠,死狀恐怖舔箭,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蚊逢,我是刑警寧澤层扶,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站烙荷,受9級特大地震影響镜会,放射性物質發(fā)生泄漏。R本人自食惡果不足惜终抽,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一戳表、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昼伴,春花似錦匾旭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至持舆,卻和暖如春色瘩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逸寓。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工居兆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竹伸。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓泥栖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佩伤。 傳聞我的和親對象是個殘疾皇子聊倔,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344