<!--defaultCSS-->
几个基本概念:
1、什么是Instrumentation?
Instrumentation,类似于Activity,是安卓的一个专属概念;我们把它看做一个专门用于监控其他类的工具类。它具有启动其他类的能力
2、什么是Emma?
emma是一个测试代码覆盖率的工具,可以在执行测试后获取测试代码的覆盖率。它的基本原理是通过对编译后的class文件进行插装,在执行测试的同时,向内存中写入覆盖率信息,等测试执行完后,从内存中获取覆盖率信息并生成报表。
执行的步骤:
1、实现功能代码
2、编写测试插装代码
我们会实现从一个继承自Instrumentation的类EmmaInstrumentation,来管理我们要测试的程序。它接管了我们程序的启动和停止,并且在程序推出的时候,把emma生成在内存中的覆盖率信息输出到文件中。
基本代码框架如下:
//从Instrumentation派生,并且实现FinishListener接口,该接口用于监听真正Activity的停止,输出覆盖率文件
public class EmmaInstrumentation extends Instrumentation implements FinishListener
//启动的时候,创建的是包装后的activity,而不是原有的activity
public void onCreate(Bundle arguments) {
super.onCreate(arguments);
mIntent = new Intent(getTargetContext(), InstrumentedActivity.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
start();
}
//启动程序
public void onStart() {
super.onStart();
Looper.prepare();
InstrumentedActivity activity = (InstrumentedActivity) startActivitySync(mIntent);
activity.setFinishListener(this);
}
//在结束的时候,生成报告
@Override
public void onActivityFinished() {
generateCoverageReport();
finish(Activity.RESULT_OK, mResults);
}
//报告的生成
Class<?> emmaRTClass = Class.forName("com.vladium.emma.rt.RT");
Method dumpCoverageMethod = emmaRTClass.getMethod(
"dumpCoverageData", coverageFile.getClass(), boolean.class,
boolean.class);
dumpCoverageMethod.invoke(null, coverageFile, false, false);
//包装测试类的实现,目的是不修改程序的功能代码添加监听程序结束的功能
public static class InstrumentedActivity extends
TemperatureConverterActivity {
private FinishListener mListener;
public void setFinishListener(FinishListener listener) {
mListener = listener;
}
@Override
public void finish() {
if (LOGD)
Log.d(TAG + ".InstrumentedActivity", "finish()");
super.finish();
if (mListener != null) {
mListener.onActivityFinished();
}
}
}
3、配置工程
插装的代码编写完了之后,我们要AndroidManifest.xml文件中配置上相应的数据
//允许写文件
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<instrumentation android:name="com.example.instrumentation.EmmaInstrumentation" android:targetPackage="com.example.i2at.tc"></instrumentation> (补充:这里的target只需要填写和AndroidMainifest.xml中定义的package一样就可以了;和具体代码的package没有关系,工程下代码的的覆盖率都会被统计出来)
<activity android:name="com.example.instrumentation.EmmaInstrumentation$InstrumentedActivity"></activity>
4、打包、安装
ant clean、ant instrument、 ant installi通过这三个命令完成打包和安装的过程
5、运行、测试
D:\development\adt\sdk\platform-tools>adb.exe shell am instrument -e coverage tr
ue -w com.example.i2at.tc/com.example.instrumentation.EmmaInstrumentation
INSTRUMENTATION_CODE: -1
执行上述命令运行程序,程序启动后,按照操作测试程序,测试完后,程序正常退出,此时,会生成覆盖率的文件在/mnt/sdcard下执行 adb.exe pull /mnt/sdcard/coverage.ec获取文件到本地
6、生成覆盖率文件
java -cp D:\development\adt\sdk\tools\lib\emma.jar emma report -r html -in coverage.em,coverage.ec -Dreport.html.out.file=coverage.html -Dreport.metrics=class:80
执行上述命令生成覆盖率文件,其中coverage.ec是我们执行完测试后生成的文件,而coverage.em是在插装时生成的元数据文件。报告的输出为coverage.html,我们可以从该文件中看出测试代码的覆盖率
问题:为什么在输出覆盖率文件的时候会提示没有权限?但是在AndroidManifest.xml文件中已经配置了写权限
回答:如果我们使用的是模拟器的话,则必须要配置模拟的SD Card的size参数,否则,就会报没有权限的错误。
相关推荐
本Demo主要介绍如何在Android环境中使用NDK 21来实现对C++代码的覆盖率统计。下面我们将深入探讨这个主题。 首先,代码覆盖率是衡量软件测试完整性的一个重要指标,它反映了测试用例执行时覆盖了多少源代码。对于...
为了提高测试覆盖率,你需要编写充分的单元测试和集成测试,确保覆盖到各种可能的业务逻辑路径。在Android工程中,可以使用JUnit、Mockito等库进行测试,同时使用Espresso进行UI自动化测试。 总之,JaCoCo对于理解...
该模型在Android应用GUI测试中的应用可以提高测试的覆盖率和准确性。 ### 用户使用日志(User Usage Logs) 用户使用日志记录了用户对应用的实际操作信息,包括用户点击、滑动等操作。通过分析用户使用日志,可以...
利用Android Studio的测试工具,如 Espresso 和 JUnit,编写自动化测试脚本,提高测试覆盖率。 通过以上这些技术和方法,开发者可以构建出一个功能齐全、用户体验良好的微记账APP。同时,课程设计报告论文则会详细...
完成开发后,进行功能测试、性能测试以及用户体验测试,对发现的问题进行修复和优化,确保系统的稳定运行。 六、结论 基于Android的学生宿舍管理系统以其便捷的操作和高效管理,展示了移动信息化在校园管理中的...
5. 报告生成:生成详细的测试报告,包括测试覆盖率、失败率、问题追踪等信息。 四、自动化测试报告内容 1. 测试环境:操作系统、浏览器版本、测试工具和框架等。 2. 测试范围:涵盖的功能模块、测试用例数量。 3. ...
测试总结部分是对整个测试过程的概述,包括测试覆盖范围、测试环境、执行情况以及测试结果的关键指标。例如,测试在"XXXX 测试机"的"XXXX 环境"下进行,共执行了XX个有效案例,执行率为XX%,成功率XX%。这一部分强调...
【Android系统服务漏洞挖掘技术研究】 在Android操作系统中,系统服务是核心组件,它们作为后台运行的系统级进程或...未来的研究可能会进一步优化模糊测试策略,提高测试覆盖率,以及开发更精细的漏洞检测和修复机制。
这有助于估算开发时间、工作量、维护成本以及测试覆盖率。"VB.net, C#,Java,PHP代码行统计工具"就是这样一个实用的工具,它能帮助开发者快速统计指定编程语言的代码行数,并基于这些数据进行更深入的分析。 首先,...
- **Jacoco**: Jacoco是后来取代Emma的现代代码覆盖率工具,它提供了更全面的覆盖率统计,并且与Android Studio更好地集成,但Emma在某些情况下可能更适合老版本的Android项目。 - **Cobertura**: Cobertura也是...
鉴于TCloud云测平台已经实现了对多平台、多项目的支持,以及高效的自动化测试和流程控制,其未来的发展可能包括增强设备资源的智能化调度,提升测试覆盖率,加强数据分析能力,优化用户体验,以及进一步整合更多的...
论文研究任务的时间安排包括了Android开发环境的学习、需求分析、功能设计、软件编写和测试等阶段,覆盖了2012年4月至6月的时间段。 整个项目旨在利用Android平台的特性,构建一个适应现代生活节奏的家庭财务管理...
7. **网站测试**:对网站进行全面测试,包括功能测试、兼容性测试、性能测试、安全性测试等。 8. **深刻Bug**:描述一个印象深刻的问题,展示问题识别和解决能力。 9. **无需求文档**:在缺乏明确需求时,可以通过...
2. 通知推送:集成更多的通知渠道,如微信、短信,提升通知覆盖率。 3. 多语言支持:面向不同国家和地区的学生,提供多语言版本。 4. 家长端应用:开发家长版应用,让家长实时了解孩子的出勤情况。 总结,开发一个...
测试用例的设计是确保测试质量的关键步骤之一,合理的测试用例可以覆盖更多的功能点,提高缺陷发现率。 1. **编写测试用例**: - 基于需求文档,设计针对各个功能点的测试案例。 - 包括正常情况下的操作流程和...
5. **用例管理**:方便创建、维护和执行测试用例,提高测试覆盖率。 6. **资产管理**:有效管理和分配测试设备资源,减少硬件投入。 7. **Dashboard**:提供实时数据展示,帮助决策者了解项目状态和测试效果。 三、...