本文章轉(zhuǎn)載于搜狗測(cè)試
之前和大家分享過(guò)我們?cè)O(shè)計(jì)的黑盒測(cè)試的覆蓋率工具鲤屡,把黑盒測(cè)試用例和函數(shù)進(jìn)行映射,可以直觀的反應(yīng)出來(lái)我們黑盒測(cè)試用例的覆蓋情況福侈,作為黑盒測(cè)試的一個(gè)標(biāo)準(zhǔn)酒来。可以理解為為黑盒測(cè)試了解代碼實(shí)現(xiàn)佳通了一個(gè)渠道肪凛。但是用例到函數(shù)的映射關(guān)系只能保證函數(shù)覆蓋度堰汉,如果我們想保證一段代碼的準(zhǔn)確性,函數(shù)覆蓋就相對(duì)較粗一些了伟墙,我們就需要引進(jìn)一些新的概念比如:條件覆蓋翘鸭、分之覆蓋等。
最近在對(duì)Java代碼進(jìn)行單元測(cè)試的時(shí)候了解到一種針對(duì)Java代碼的強(qiáng)大的覆蓋率工具Emma戳葵。首先介紹一下EMMA是一個(gè)開源就乓、面向Java程序測(cè)試覆蓋率收集和報(bào)告工具。它通過(guò)對(duì)編譯后的Java字節(jié)碼文件進(jìn)行插裝拱烁,在測(cè)試執(zhí)行過(guò)程中收集覆蓋率信息生蚁,并通過(guò)支持多種報(bào)表格式對(duì)覆蓋率結(jié)果進(jìn)行展示。EMMA可以統(tǒng)計(jì)函數(shù)覆蓋戏自、類覆蓋邦投、行覆蓋等,據(jù)說(shuō)最新版支持分支覆蓋擅笔。
查看了一下EMMA的基本原理志衣,大致分為以下步驟:插樁(instr),運(yùn)行猛们,收集(ctl)念脯,報(bào)告(report)。
插樁
命令行:java emma instr -cp /usr/local//anrs/lib/anrs.jar -m overwrite -ix +com.* -Dmetadata.out.file=test.em
參數(shù)介紹:
-cp弯淘,指定插樁的路徑绿店,多個(gè)jar包可以用,分割
-m:輸出模式
overwrite:重新jar包耳胎,anrs.jar
default:copy,需要加上-d參數(shù)惯吕,指定輸出路徑惕它。有插樁怕午,才cp一份class到指定路徑
fullcopy:需要加上-d參數(shù),指定輸出路徑淹魄。 不管有沒(méi)有插樁郁惜,都cp一份class到指定路徑
-merge:合并。
default:yes。 如果metadata指定輸出的文件一樣兆蕉,將兩次插樁信息進(jìn)行合并
no羽戒。不合并兩次插樁信息
-ix:指定需要插樁的class
+com.*: +指包含
-com.*:-指排除
運(yùn)行
一般情況下,直接運(yùn)行應(yīng)用程序即可虎韵。EMMA會(huì)啟動(dòng)一個(gè)監(jiān)聽端口易稠,用來(lái)后面收集信息(ctl)。這個(gè)端口是固定的包蓝,47653驶社。
如果我們的應(yīng)用是多進(jìn)程的,就會(huì)出現(xiàn)啟動(dòng)失敗测萎。其實(shí)EMMA也提供了一個(gè)命令亡电,進(jìn)行端口設(shè)置:-Demma.rt.control.port=39123
還有host指定,-Demma.rt.control.host=192.168.22.22. default is localhost
這個(gè)參數(shù)需要加在程序啟動(dòng)命令里
EMMA還有簡(jiǎn)單的配置文件:java -Demma.properties=my.properties
my.properties format: tag=value
收集
一般有兩種收集信息方法:
1.程序退出硅瞧,自動(dòng)收集份乒,在當(dāng)前運(yùn)行目錄下生成coverage.ec
2.命令行:
java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
報(bào)告
命令行:
java -cp /usr/jdk/jdk1.6.0_29/jre/lib/ext/emma.jar emma report -r html -in anrs.em coverage.ec –sp src/-Dreport.html.out.file=coverage.html
參數(shù)介紹
-r: report type:html,txt,xml
-sp: sourcecode path
除了命令行方式外,EMMA可以直接在Eclipse中進(jìn)行使用腕唧,安裝步驟如下:
輸入U(xiǎn)RL:http://update.eclemma.org/
下一步或辖、下一步安裝即可,重啟Eclipse即可枣接。運(yùn)行你的Java代碼孝凌,如圖:
最終得到執(zhí)行過(guò)程中我們覆蓋和未覆蓋的函數(shù)部分,