使用EMMA獲取Android測試覆蓋率

EMMA是一個Java代碼測試覆蓋率獲取工具。嘗試了一種使用EMMA獲取Android測試覆蓋率的方法,參考使用了
DynoDroid提供的方法,其原理是使用插樁與BroadcastReceiver,使得插樁後打包簽名而成的APK運行時每次操做均發送信息給BroadcastReceiverBroadcastReceiver中負責將覆蓋率信息寫到SD卡的名爲coverage.ec的文件中。其一大優勢爲全程無需修改原APK的源碼。html

Pre

假定APK所在包爲net.clasnake.project,工程主目錄爲/folderjava

Step 1 插樁

首先下載EmmaInstrument.rar,解壓後包含四個文件:android

  • EmmaInsrumentation.java
  • FinishListener.java
  • InstrumentedActivity.java
  • SMSInstrumentedReceiver.java

將文件夾EmmaInstrument複製到/folder/src下。
將上述四個java文件的包名修改成net.clasnake.project.EmmaInstrument,並令InstrumentedActivity繼承自項目的主Activity。
而後修改AndroidManifest.xml,加入SMSInstrumentedReceiverEmmaInstrumentationActivitygit

<receiver android:name="net.clasnake.project.EmmaInstrument.SMSInstrumentedReceiver">
    <intent-filter>
        <action android:name="edu.gatech.m3.emma.COLLECT_COVERAGE"/>
    </intent-filter>
</receiver>
<activity android:label="EmmaInstrumentationActivity" android:name="net.clasnake.project.EmmaInstrument.InstrumentedActivity"/>

加入插樁標籤,並容許寫SD卡權限:github

<instrumentation android:handleProfiling="true" android:label="EmmaInstrumentation" android:name="net.clasnake.project.EmmaInstrument.EmmaInstrumentation" android:targetPackage="net.clasnake.project"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Step 2 重編譯、安裝

鏈接設備至adb,首先android update project更新項目,生成build.xml,以便使用ant。shell

而後編譯插樁版本:ant instrument工具

安裝:ant installipost

Step 3 測試

啓動插樁版本:
adb shell am instrument net.clasnake.project/net.clasnake.project.EmmaInstrument.EmmaInstrumentation測試

進行測試,結束後使用後退鍵退出應用。ui

從設備中獲得coverage.ec:adb pull /mnt/sdcard/coverage.ec

從/folder/bin中獲得coverage.em,該文件中包含了待測APP的結構信息,將其與coverage.ec放置同一目錄下,而後生成覆蓋率報告:

java -cp ~/adt/sdk/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec

在同目錄下的coverage文件夾下生成覆蓋率報告:

參考引用

原文連接

http://clasnake.net/emma_for_android/

相關文章
相關標籤/搜索