測試覆蓋率 之 Cobertura的使用

什么是代碼覆蓋率?

代碼覆蓋率是對整個測試過程中被執(zhí)行的代碼的衡量,它能測量源代碼中的哪些語句在測試中被執(zhí)行吵瞻,哪些語句尚未被執(zhí)行运嗜。

為什么要測量代碼覆蓋率?

眾所周知,測試可以提高軟件版本的質(zhì)量和可預測性痹扇。但是铛漓,你知道你的單元測試甚至是你的功能測試實際測試代碼的效果如何嗎?是否還需要更多的測試?

這些是代碼覆蓋率可以試圖回答的問題溯香。總之浓恶,出于以下原因我們需要測量代碼覆蓋率:

● 了解我們的測試用例對源代碼的測試效果

● 了解我們是否進行了足夠的測試

● 在軟件的整個生命周期內(nèi)保持測試質(zhì)量

注:代碼覆蓋率不是靈丹妙藥玫坛,覆蓋率測量不能替代良好的代碼審查和優(yōu)秀的編程實踐。

通常包晰,我們應該采用合理的覆蓋目標湿镀,力求在代碼覆蓋率在所有模塊中實現(xiàn)均勻覆蓋,而不是只看最終數(shù)字的是否高到令人滿意杜窄。

舉例:假設代碼覆蓋率只在某一些模塊代碼覆蓋率很高肠骆,但在一些關鍵模塊并沒有足夠的測試用例覆蓋,那樣雖然代碼覆蓋率很高塞耕,但并不能說明產(chǎn)品質(zhì)量就很高蚀腿。

關于Cobertura

Cobertura可以理解為一種測試覆蓋率報告方案,通過Cobertura + Maven + Jenkins來實現(xiàn)測試覆蓋率的展示扫外。

如何使用Cobertura

1莉钙、pom中添加依賴

? <!-- 在clean時把老的ser文件也清理掉 -->

? ? ? ? ? ? <plugin>

? ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>

? ? ? ? ? ? ? ? <artifactId>maven-clean-plugin</artifactId>

? ? ? ? ? ? ? ? <version>2.4.1</version>

? ? ? ? ? ? ? ? <configuration>

? ? ? ? ? ? ? ? ? ? <filesets>

? ? ? ? ? ? ? ? ? ? ? ? <fileset>

? ? ? ? ? ? ? ? ? ? ? ? ? ? <directory>.</directory>

? ? ? ? ? ? ? ? ? ? ? ? ? ? <includes>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <include>**/*.ser</include>

? ? ? ? ? ? ? ? ? ? ? ? ? ? </includes>

? ? ? ? ? ? ? ? ? ? ? ? </fileset>

? ? ? ? ? ? ? ? ? ? </filesets>

? ? ? ? ? ? ? ? </configuration>

? ? ? ? ? ? </plugin>

? ? ? ? ? ? <plugin>

? ? ? ? ? ? ? ? <groupId>org.codehaus.mojo</groupId>

? ? ? ? ? ? ? ? <artifactId>cobertura-maven-plugin</artifactId>

? ? ? ? ? ? ? ? <version>2.7</version>

? ? ? ? ? ? ? ? <configuration>

? ? ? ? ? ? ? ? ? ? <formats>

? ? ? ? ? ? ? ? ? ? ? ? <format>html</format>

? ? ? ? ? ? ? ? ? ? ? ? <format>xml</format>

? ? ? ? ? ? ? ? ? ? </formats>

? ? ? ? ? ? ? ? ? ? <aggregate>true</aggregate> <!-- 表示會聚合不同子module下的測試報告 -->

? ? ? ? ? ? ? ? ? ? <check/>

? ? ? ? ? ? ? ? </configuration>

? ? ? ? ? ? </plugin>

2、通過命令行生成報告文件

輸入如下命令:

mvn cobertura:cobertura

它會在每個模塊以及根目錄的target下分別產(chǎn)生.ser文件以及相應覆蓋率報告文件筛谚。

3磁玉、覆蓋率報告

覆蓋率的html報告如下:

4、其他定制需要

因?qū)嶋H場景需要驾讲,排除某些方法蚊伞,需要調(diào)整如下配置:

<plugin>

? ? <groupId>org.apache.maven.plugins</groupId>

? ? <artifactId>maven-surefire-plugin</artifactId>

? ? <version>2.18.1</version>

? ? <configuration>

? ? ? ? <includes>

? ? ? ? ? ? <include>**/*TestJMock.java</include>

? ? ? ? </includes>

? ? ? ? <excludes>

? ? ? ? ? ? <exclude>**/*Test.java</exclude>

? ? ? ? </excludes>

? ? </configuration>

</plugin>

如果要對測試覆蓋率進行控制,一定要達到指定標準呢吮铭,做如下配置:

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>cobertura-maven-plugin</artifactId>

<version>2.7</version>

<configuration>

? ? <formats>

? ? ? ? <format>html</format>

? ? ? ? <format>xml</format>

? ? </formats>

? ? <aggregate>true</aggregate> <!-- 表示會聚合不同子module下的測試報告 -->

? ? <check>

? ? ? ? <branchRate>0</branchRate>

? ? ? ? <lineRate>0</lineRate>

? ? ? ? <haltOnFailure>true</haltOnFailure>

? ? ? ? <totalBranchRate>0</totalBranchRate>

? ? ? ? <totalLineRate>0</totalLineRate>

? ? ? ? <packageLineRate>0</packageLineRate>

? ? ? ? <packageBranchRate>0</packageBranchRate>

? ? ? ? <regexes>

? ? ? ? ? ? <regex>

? ? ? ? ? ? ? ? <pattern>com.company.mode.services.*</pattern>

? ? ? ? ? ? ? ? <branchRate>60</branchRate>

? ? ? ? ? ? ? ? <lineRate>80</lineRate>

? ? ? ? ? ? </regex>

? ? ? ? </regexes>

? ? </check>

</configuration>

</plugin>

通過mvn cobertura:check即可對覆蓋率進行校驗

這個Maven插件的一些缺陷:

1时迫、不支持lambda表達式,在mvn命令的執(zhí)行中會報錯谓晌,即使在通過git倉庫下載最新Cobertura代碼自己打包生成的jar包掠拳,雖然沒有報錯,但是依然不能正常產(chǎn)生報告

2纸肉、根目錄下的測試覆蓋率文件似乎只是隨機選了底下一個module的覆蓋率溺欧,沒有按照我們的設想來:將所有子module的測試覆蓋率匯總。

與Jenkins集成

安裝Cobertura插件

設置 Pre Steps

添加構建后操作

生成覆蓋率報告

所有的配置都好了柏肪,點擊立即構建姐刁,即可生成相應的測試覆蓋率報告

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烦味,隨后出現(xiàn)的幾起案子龙填,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩遗,死亡現(xiàn)場離奇詭異,居然都是意外死亡凤瘦,警方通過查閱死者的電腦和手機宿礁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔬芥,“玉大人梆靖,你說我怎么就攤上這事”仕校” “怎么了返吻?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乎婿。 經(jīng)常有香客問我测僵,道長,這世上最難降的妖魔是什么谢翎? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任捍靠,我火速辦了婚禮,結(jié)果婚禮上森逮,老公的妹妹穿的比我還像新娘榨婆。我一直安慰自己,他們只是感情好褒侧,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布良风。 她就那樣靜靜地躺著,像睡著了一般闷供。 火紅的嫁衣襯著肌膚如雪烟央。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天这吻,我揣著相機與錄音吊档,去河邊找鬼。 笑死唾糯,一個胖子當著我的面吹牛怠硼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播移怯,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼香璃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舟误?” 一聲冷哼從身側(cè)響起葡秒,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眯牧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋岩,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年学少,在試婚紗的時候發(fā)現(xiàn)自己被綠了剪个。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡版确,死狀恐怖扣囊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绒疗,我是刑警寧澤侵歇,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站吓蘑,受9級特大地震影響惕虑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜士修,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一枷遂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棋嘲,春花似錦酒唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雹锣,卻和暖如春网沾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕊爵。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工辉哥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攒射。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓醋旦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親会放。 傳聞我的和親對象是個殘疾皇子饲齐,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容