使用EMMA獲取Android測試覆蓋率

clasnake發表於2014-11-03

EMMA是一個Java程式碼測試覆蓋率獲取工具。嘗試了一種使用EMMA獲取Android測試覆蓋率的方法,參考使用了 DynoDroid提供的方法,其原理是使用插樁與BroadcastReceiver,使得插樁後打包簽名而成的APK執行時每次操作均傳送資訊給BroadcastReceiverBroadcastReceiver中負責將覆蓋率資訊寫到SD卡的名為coverage.ec的檔案中。其一大優點為全程無需修改原APK的原始碼。

Pre

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

Step 1 插樁

首先下載EmmaInstrument.rar,解壓後包含四個檔案:

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

將資料夾EmmaInstrument複製到/folder/src下。 將上述四個java檔案的包名修改為net.clasnake.project.EmmaInstrument,並令InstrumentedActivity繼承自專案的主Activity。 然後修改AndroidManifest.xml,加入SMSInstrumentedReceiverEmmaInstrumentationActivity

<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卡許可權:

<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。

然後編譯插樁版本:ant instrument

安裝:ant installi

Step 3 測試

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

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

從裝置中得到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/

相關文章