emma统计手工测试或Ui测试覆盖率
目的
统计一个app在手动测试或者UI测试过程中,这些测试对代码的覆盖率,需要有app的源码才能实现。
说明:本博文的教程仅仅针对eclipse的工程结构,如果是Android Studio的工程结构,建议使用Jacoco
一些假设:
**工程名:**MyEmma
**工程包名:**com.learn.myemma
**工程路径:**D:\DEV\workspace\MyEmma
1. 加入emma的文件
在工程的src目录下,新建包名emma.instrument,并将以下几个文件点击去下载复制到该包下:
a. EmmaInstrumentation
b. FinishListener
c. InstrumentedASctivity
d. SMSInstrumentedResceiver
放放进去的时候会报错,由于eclipse不会自动修改包名,修改这些文件的第一句“package net.sf.andbatdog.batterydog.EmmaInstrument”,为“package emma.instrument;”
此番操作后,EmmaInstrumentation和InstrumentedActivity依然会有错误,其实是同一个原因,InstrumentedActivity继承的类找不到,把类改成你的主Activity就好,extends MainActivity就OK了
2. 修改AndroidManifest文件
a. 在manifest节点下增加:
<!-- add newly -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<instrumentation
android:name="com.learn.myemma.emma.instrument.EmmaInstrumentation"
android:handleProfiling="true"
android:label="EmmaInstrumentation"
android:targetPackage="com.learn.myemma" />
<!-- add newly -->
b.在application节点下增加
<!-- add newly -->
<activity
android:name="com.learn.myemma.emma.instrument.InstrumentedActivity"
android:label="EmmaInstrumentationActivity" />
<receiver android:name="com.learn.myemma.emma.instrument.SMSInstrumentedReceiver" >
<intent-filter>
<action android:name="edu.gatech.m3.emma.COLLECT_COVERAGE" />
</intent-filter>
</receiver>
<!-- add newly -->
3. 确保工程可以运行
run as – Android Application
4. 使用ant命令编译apk,并安装到手机
- 先在工程(workspace目录)的外部,使用cmd命令更新工程,此番操后会在MyEmma目录下生成build.xml文件
android update project -p ./MyEmma -n MyEmma -t 3
- 进入到MyEmma文件下
cd MyEmma
- 构建apk
ant instrument
- 安装apk(先卸载已安装上去的)
ant installi
5. 启动应用
adb shell am instrument 包名/EmmaInstrumentation完整路径
6. 执行手动测试或则跑UI测试
7. 生成报告
- 新建一个文件夹,MyResult
- 将{$sdk}/tools/lib/emma.jar复制到MyResult
- 将设备上的/sdcard/coverage.ec复制到MyResult
- 将工程中/MyEmma/bin/coverage.em复制到MyResult
- 执行以下命令:
java -cp emma.jar emma report -r html -in coverage.em,coverage.ec
8.查看报告
在MyResult/coverage/index.html下查看覆盖率报告