當前位置:才華齋>IT認證>JAVA認證>

JAVA覆蓋率工具EMMA詳細解析2016

JAVA認證 閱讀(1.58W)

EMMA 是一個開源、面向 Java 程式測試覆蓋率收集和報告工具。它通過對編譯後的 Java 位元組碼檔案進行插裝,在測試執行過程中收集覆蓋率資訊,並通過支援多種報表格式對覆蓋率結果進行展示。那麼EMMA覆蓋率工具有什麼原理,怎麼使用?下面跟yjbys小編一起來學習一下吧!

JAVA覆蓋率工具EMMA詳細解析2016

首先介紹一下EMMA 是一個開源、面向 Java 程式測試覆蓋率收集和報告工具。它通過對編譯後的 Java 位元組碼檔案進行插裝,在測試執行過程中收集覆蓋率資訊,並通過支援多種報表格式對覆蓋率結果進行展示。EMMA可以統計函式覆蓋、類覆蓋、行覆蓋等,據說最新版支援分支覆蓋。

查看了一下EMMA的基本原理,大致分為以下步驟:插樁(instr),執行,收集(ctl),報告(report)。

  插樁

命令列:java emma instr -cp /usr/local//anrs/lib/ -m overwrite -ix +com.* =

  引數介紹:

-cp,指定插樁的路徑,多個jar包可以用,分割

-m:輸出模式

overwrite:重新jar包,

default:copy, 需要加上-d引數,指定輸出路徑。有插樁,才cp一份class到指定路徑

fullcopy:需要加上-d引數,指定輸出路徑。 不管有沒有插樁,都cp一份class到指定路徑

-merge:合併。

default:yes。 如果metadata指定輸出的檔案一樣,將兩次插樁資訊進行合併

no。不合並兩次插樁資訊

-ix:指定需要插樁的class

+com.*: + 指包含

-com.*:-指排除

  執行

一般情況下,直接執行應用程式即可。EMMA會啟動一個監聽埠,用來後面收集資訊(ctl)。這個埠是固定的,47653。

如果我們的應用是多程序的,就會出現啟動失敗。其實EMMA也提供了一個命令,進行埠設定:=39123

還有host指定,=. default is localhost

這個引數需要加在程式啟動命令裡

EMMA還有簡單的配置檔案:java erties=erties

erties format: tag=value

  收集

一般有兩種收集資訊方法:

1. 程式退出,自動收集,在當前執行目錄下生成

2. 命令列:

java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/ emma ctl -connect localhost:47653 -command ,

  報告

命令列:

java -cp /usr/jdk/jdk1.6.0_29/jre/lib/ext/ emma report -r html -in –sp src/=

引數介紹

-r: report type:html,txt,xml

-sp: sourcecode path

  專案應用

  1 專案特點

應用程式會啟動多個程序,啟動指令碼也會執行jar包。---需要解決emma埠衝突

測試過程中,由於bug會修改程式碼,版本迭代。希望統計這些版本的整個覆蓋率資訊---emma支援多個版本的`覆蓋率統計

希望每個case都有自己獨立的覆蓋率統計資訊,同時也要有整個的覆蓋統計資訊。

  2 應用

每個case執行的步驟:

1. 判斷是否更新了jar包

1.1 更新:插樁,指定同個檔名合併到一起

1.1.1 stop app

1.1.2 設定 EMMAPORT 環境變數

1.1.3 啟動一個應用程序,指定EMMAPORT:=$EMMAPORT

1.1.4 迴圈1.1.2 & 1.1.3,啟動完所有的程序

1.2 未更新:

1.2.1 清除執行資訊:

java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/ emma ctl -connect localhost:47653 -command t

2. 執行case

  3. 收集執行資訊

3.1 把所有程序的執行資訊收集到一個檔案裡

java -cp /usr/jdk/jdk1.6.0_23/jre/lib/ext/ emma ctl -connect localhost:47653 -command ,

3.2 每個case需要有獨立的執行資訊

cp coverage_

  4. 生成報告

測試完這個版本後,生成報告