測試覆蓋率工具:EclEmma
2016-08-26
1 測試覆蓋率實現技術
2 EclEmma介紹
3 EclEmma測試覆蓋率指標
4 EclEmma安裝
5 示例項目介紹
5.1 創建項目
5.2 用Coverage as TestNG Suite跑用例
5.3 跑后結果
5.4 導出HTML報告
5.5 導入導出合並覆蓋率Session
5.6 測試引用的jar包的覆蓋率
1 測試覆蓋率實現技術
- Instrumentation:代碼注入,在產品代碼的關鍵位置插入統計代碼,從而獲得測試覆蓋率數據
- Class Instrumentation: 把統計代碼插入編譯好的.class文件
- Source Instrumentation:把統計代碼插入源代碼並編譯成新的.class文件
- Custom JVM:在JVM中把統計代碼插入.class。測試覆蓋率分析可以在JVM執行測試代碼的過程中完成
2 EclEmma介紹
- 一個優秀的開源軟件測試工具
- eclipse的一個插件
- 能夠對由 Java 語言編寫的程序進行覆蓋測試
- 能夠在工作平台中啟動
- 直接對代碼覆蓋進行分析
- 覆蓋結果將立即被匯總並在Java源代碼編輯器中高亮顯示
- 也可程序運行的結果生成詳盡的覆蓋測試報告
- 可以結合JUnit、TestNG使用
- 工作原理:Class Instrumentation
3 EclEmma測試覆蓋率指標
- 行覆蓋率: 部分行覆蓋:a>b?a:b
- 基本語句塊覆蓋率: 基本語句塊:沒有if-else分支的代碼區域
- 類覆蓋率: 由JVM加載並初始化
- 方法覆蓋率: 第一個基本語句塊被執行
4 EclEmma安裝
- 啟動eclipse -> 點擊Help菜單 -> Install New Software,在彈出的對話框中,點擊Add
- 輸入Name,例如EclEmma。輸入Location:http://update.eclemma.org/
- 安裝后重新啟動eclipse,如果成功安裝,工具欄上會出現一個新的按鈕,如圖1所示

圖1 EclEmma按鈕
5 示例項目介紹
下面通過項目介紹如何在使用了TestNG測試框架的項目中的使用EclEmma測試覆蓋率
TestNG請參考: TestNG 入門教程
5.1 創建項目
項目中使用TestNG測試框架,包含被測類'Calculator'和測試類'CalculatorTest'。

圖2 測試結構
5.2 用Coverage as TestNG Suite跑用例

圖3 Coverage as TestNG Suite
5.3 跑后結果

圖5 標注源代碼和Coverage視圖
5.4 導出HTML報告
如何導出:
- 要導出的session (session:一次測試覆蓋率交互活動)
- 選擇報告的類型(HTML/XML/Text/EMMA session)
- 存放位置
圖6 導出報告
圖7 HTML報告
HTML報告可以逐層展開,點擊方法還可以看到代碼的覆蓋情況。
列名含義:
- missed Instructions代碼覆蓋率,
- Missed Branches邏輯分支覆蓋率,
- Missed Cxty判斷執行數,
- missed Lines代碼行數,
- Methods方法個數。
5.5 導入導出合並覆蓋率Session
既可以導出session,也可以導入session,還可以合並session,這樣,可以將多次測試覆蓋率的結果進行合並

圖8 合並Session
5.6 測試引用的jar包的覆蓋率

圖9 測試引用的jar包的覆蓋率
其他Eclipse覆蓋率插件
EclEmma、Clover與Cobertura插件
