EMMA 是一個開源、面向 Java 程序測試覆蓋率收集和報告工具。它透過對編譯後的 Java 字節碼檔案進行插裝,在測試執行過程中收集覆蓋率資訊,並透過支援多種報表格式對覆蓋率結果進行展示。那麼EMMA覆蓋率工具有什麼原理,怎麼使用?下面跟本站小編一起來學習一下吧!
首先介紹一下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. 生成報告
測試完這個版本後,生成報告