使用EMMA獲取Android測試覆蓋率
EMMA是一個Java程式碼測試覆蓋率獲取工具。嘗試了一種使用EMMA獲取Android測試覆蓋率的方法,參考使用了
DynoDroid提供的方法,其原理是使用插樁與BroadcastReceiver
,使得插樁後打包簽名而成的APK執行時每次操作均傳送資訊給BroadcastReceiver
,BroadcastReceiver
中負責將覆蓋率資訊寫到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
,加入SMSInstrumentedReceiver
、EmmaInstrumentationActivity
:
<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資料夾下生成覆蓋率報告:
參考引用
原文連結
相關文章
- EMMA 覆蓋率工具
- [android]android自動化測試十一之程式碼覆蓋率報告EMMAAndroid
- 程式碼覆蓋率與測試覆蓋率比較
- 使用Rational PureCoverage測試程式碼覆蓋率
- go 程式碼覆蓋率測試Go
- 程式碼測試覆蓋率分析
- Jacoco--測試覆蓋率工具
- 多程式下的測試覆蓋率
- Mockito提升單元測試覆蓋率Mockito
- iOS 覆蓋率檢測原理與增量程式碼測試覆蓋率工具實現iOS
- PouchContainer 整合測試覆蓋率統計AI
- 單元測試的覆蓋率計算
- 基於JaCoCo的Android測試覆蓋率統計(二)Android
- 使用 coverlet 檢視.NET Core應用的測試覆蓋率
- Linux下lcov單元測試覆蓋率Linux
- James Shore:不要使用單元測試的程式碼覆蓋率
- ant中使用cobertura分析測試用例的程式碼覆蓋率
- 如何制定介面自動化測試的覆蓋率?
- java覆蓋率檢測-jacocoJava
- 生成Github JS 倉庫的測試覆蓋率徽標GithubJS
- 程式碼覆蓋率測試:從誤傳到現實
- 前端精準測試探索:覆蓋率實時統計工具前端
- idea2022.1 檢視單測覆蓋率展示分支覆蓋率Idea
- 如何使用 jacoco 統計多個 docker 容器服務的測試覆蓋率Docker
- 簡記前後端如何實現統計測試覆蓋率後端
- C++語言的單元測試與程式碼覆蓋率C++
- 你真正需要的程式碼測試覆蓋率是多少?
- 關於super-jacoco測試覆蓋率具體實現
- vivo 基於 JaCoCo 的測試覆蓋率設計與實踐
- 基於Jacoco的單元測試程式碼覆蓋率統計
- maven 多模組專案的測試覆蓋率分析 - jacoco 聚合分析Maven
- 軟體測試培訓之:白盒測試的語句覆蓋法和判定覆蓋法
- pHp程式碼覆蓋率PHP
- 程式碼覆蓋率分析
- 精準測試與開源工具Jacoco的覆蓋率能力對比開源工具
- Android Demo:手工覆蓋率(AS3.2)use JacocoAndroidS3
- 非同步請求覆蓋如何測試到非同步
- 圖資料庫 Nebula Graph 的程式碼變更測試覆蓋率實踐資料庫