- 相關(guān)推薦
JAVA覆蓋率工具EMMA詳細解析2016
EMMA 是一個(gè)開(kāi)源、面向 Java 程序測試覆蓋率收集和報告工具。它通過(guò)對編譯后的 Java 字節碼文件進(jìn)行插裝,在測試執行過(guò)程中收集覆蓋率信息,并通過(guò)支持多種報表格式對覆蓋率結果進(jìn)行展示。那么EMMA覆蓋率工具有什么原理,怎么使用?下面跟yjbys小編一起來(lái)學(xué)習一下吧!
首先介紹一下EMMA 是一個(gè)開(kāi)源、面向 Java 程序測試覆蓋率收集和報告工具。它通過(guò)對編譯后的 Java 字節碼文件進(jìn)行插裝,在測試執行過(guò)程中收集覆蓋率信息,并通過(guò)支持多種報表格式對覆蓋率結果進(jìn)行展示。EMMA可以統計函數覆蓋、類(lèi)覆蓋、行覆蓋等,據說(shuō)最新版支持分支覆蓋。
查看了一下EMMA的基本原理,大致分為以下步驟:插樁(instr),運行,收集(ctl),報告(report)。
插樁
命令行:java emma instr -cp /usr/local//anrs/lib/anrs.jar -m overwrite -ix +com.* -Dmetadata.out.file=test.em
參數介紹:
-cp,指定插樁的路徑,多個(gè)jar包可以用,分割
-m:輸出模式
overwrite:重新jar包,anrs.jar
default:copy, 需要加上-d參數,指定輸出路徑。有插樁,才cp一份class到指定路徑
fullcopy:需要加上-d參數,指定輸出路徑。 不管有沒(méi)有插樁,都cp一份class到指定路徑
-merge:合并。
default:yes。 如果metadata指定輸出的文件一樣,將兩次插樁信息進(jìn)行合并
no。不合并兩次插樁信息
-ix:指定需要插樁的class
+com.*: + 指包含
-com.*:-指排除
運行
一般情況下,直接運行應用程序即可。EMMA會(huì )啟動(dòng)一個(gè)監聽(tīng)端口,用來(lái)后面收集信息(ctl)。這個(gè)端口是固定的,47653。
如果我們的應用是多進(jìn)程的,就會(huì )出現啟動(dòng)失敗。其實(shí)EMMA也提供了一個(gè)命令,進(jìn)行端口設置:-Demma.rt.control.port=39123
還有host指定,-Demma.rt.control.host=192.168.22.22. default is localhost
這個(gè)參數需要加在程序啟動(dòng)命令里
EMMA還有簡(jiǎn)單的配置文件:java -Demma.properties=my.properties
my.properties format: tag=value
收集
一般有兩種收集信息方法:
1. 程序退出,自動(dòng)收集,在當前運行目錄下生成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
報告
命令行:
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
參數介紹
-r: report type:html,txt,xml
-sp: sourcecode path
項目應用
1 項目特點(diǎn)
應用程序會(huì )啟動(dòng)多個(gè)進(jìn)程,啟動(dòng)腳本也會(huì )執行jar包。---需要解決emma端口沖突
測試過(guò)程中,由于bug會(huì )修改代碼,版本迭代。希望統計這些版本的整個(gè)覆蓋率信息---emma支持多個(gè)版本的覆蓋率統計
希望每個(gè)case都有自己獨立的覆蓋率統計信息,同時(shí)也要有整個(gè)的覆蓋統計信息。
2 應用
每個(gè)case執行的步驟:
1. 判斷是否更新了jar包
1.1 更新:插樁,指定同個(gè)文件名合并到一起
1.1.1 stop app
1.1.2 設置 EMMAPORT 環(huán)境變量
1.1.3 啟動(dòng)一個(gè)應用進(jìn)程,指定EMMAPORT:-Demma.rt.control.port=$EMMAPORT
1.1.4 循環(huán)1.1.2 & 1.1.3,啟動(dòng)完所有的進(jìn)程
1.2 未更新:
1.2.1 清除執行信息:
java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/emma.jar emma ctl -connect localhost:47653 -command coverage.reset
2. 執行case
3. 收集執行信息
3.1 把所有進(jìn)程的執行信息收集到一個(gè)文件里
java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
3.2 每個(gè)case需要有獨立的執行信息
cp coverage.ec coverage_caseNo.ec
4. 生成報告
測試完這個(gè)版本后,生成報告
【JAVA覆蓋率工具EMMA詳細解析】相關(guān)文章:
Java IDE詳細介紹201604-26
荷蘭留學(xué)趨勢詳細解析10-17
Java的內存劃分全解析08-02
關(guān)于Java動(dòng)態(tài)代理的解析09-28
EXCEL集成工具箱詳細教程11-08
英國留學(xué)申請階段詳細解析11-07
服務(wù)器托管詳細解析05-27
軟裝設計流程詳細解析08-17