- 浏览: 1151391 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
MyEyeOfJava:
产生问题的主要原因:1.方洪波与南枫公司的直接主管李琼在合作共 ...
人力资源管理案例-左右为难的经理 -
吾名长弓:
学习了,作为一个管理新手,从文章里学到了很多东西,感谢 ...
2018新年管理感言 -
MyEyeOfJava:
非常不错,看过很多文章,说到管理者必然不能抛弃技术,我的主张是 ...
IT行业技术部门人员架构设计 -
小灯笼:
JMeter测试从入门到精通网盘地址:https://pan. ...
LR与Jmeter相关资料 -
flying6071:
“(2)CERT.SF:这是对摘要的签名文件。对前一步生成的M ...
Android签名与认证详细分析之一(CERT.RSA剖析)
以下代码时监听测试程序结束后将Emma测试报告写入到虚拟机上,然后可以使用adb pull命令发送至硬盘上,这里需要测试程序集成Emma jar包,并需要修改ant build文件。
定义finish接口
修改ant build.xml文件
https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project
http://dtmilano.blogspot.com/search/label/android
package com.example.instrumentation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import com.example.i2at.tc.TemperatureConverterActivity; //import com.vladium.emma.rt.RT; import android.app.Activity; import android.app.Instrumentation; import android.content.Intent; import android.os.Bundle; import android.os.Looper; import android.util.Log; public class EmmaInstrumentation extends Instrumentation implements FinishListener { private static final String TAG = "EmmaInstrumentation"; private static final boolean LOGD = true; private static final String DEFAULT_COVERAGE_FILE_PATH = "/mnt/sdcard/coverage.ec"; private final Bundle mResults = new Bundle(); private Intent mIntent; private boolean mCoverage = true; private String mCoverageFilePath; /** * Extends the AUT to provide the necessary behavior to invoke the * {@link FinishListener} that may have been provided using * {@link #setFinishListener(FinishListener)}. * * It's important to note that the original Activity has not been modified. * Also, the Activity must be declared in the * <code>AndroidManifest.xml</code> because it is started by an intent in * {@link EmmaInstrumentation#onStart()}. This turns more difficult to use * other methods like using template classes. This latter method could be * viable, but all Activity methods should be re-written to invoke the * template parameter class corresponding methods. * * @author diego * */ 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(); } } } /** * Constructor */ public EmmaInstrumentation() { } @Override public void onCreate(Bundle arguments) { if (LOGD) Log.d(TAG, "onCreate(" + arguments + ")"); super.onCreate(arguments); if (arguments != null) { mCoverage = getBooleanArgument(arguments, "coverage"); mCoverageFilePath = arguments.getString("coverageFile"); } mIntent = new Intent(getTargetContext(), InstrumentedActivity.class); mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); start(); } @Override public void onStart() { if (LOGD) Log.d(TAG, "onStart()"); super.onStart(); Looper.prepare(); InstrumentedActivity activity = (InstrumentedActivity) startActivitySync(mIntent); activity.setFinishListener(this); } private boolean getBooleanArgument(Bundle arguments, String tag) { String tagString = arguments.getString(tag); return tagString != null && Boolean.parseBoolean(tagString); } private void generateCoverageReport() { if (LOGD) Log.d(TAG, "generateCoverageReport()"); java.io.File coverageFile = new java.io.File(getCoverageFilePath()); // We may use this if we want to avoid refecltion and we include // emma.jar // RT.dumpCoverageData(coverageFile, false, false); // Use reflection to call emma dump coverage method, to avoid // always statically compiling against emma jar try { 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); } catch (ClassNotFoundException e) { reportEmmaError("Is emma jar on classpath?", e); } catch (SecurityException e) { reportEmmaError(e); } catch (NoSuchMethodException e) { reportEmmaError(e); } catch (IllegalArgumentException e) { reportEmmaError(e); } catch (IllegalAccessException e) { reportEmmaError(e); } catch (InvocationTargetException e) { reportEmmaError(e); } } private String getCoverageFilePath() { if (mCoverageFilePath == null) { return DEFAULT_COVERAGE_FILE_PATH; } else { return mCoverageFilePath; } } private void reportEmmaError(Exception e) { reportEmmaError("", e); } private void reportEmmaError(String hint, Exception e) { String msg = "Failed to generate emma coverage. " + hint; Log.e(TAG, msg, e); mResults.putString(Instrumentation.REPORT_KEY_STREAMRESULT, "\nError: " + msg); } /* (non-Javadoc) * @see com.example.instrumentation.FinishListener#onActivityFinished() */ @Override public void onActivityFinished() { if (LOGD) Log.d(TAG, "onActivityFinished()"); if (mCoverage) { generateCoverageReport(); } finish(Activity.RESULT_OK, mResults); } }
定义finish接口
package com.example.instrumentation; /** * Listen for an Activity to finish and invokes {@link #onActivityFinished()} when this happens. * * @author diego * */ public interface FinishListener { /** * Invoked when the Activity finishes. */ void onActivityFinished(); }
修改ant build.xml文件
<!-- It only instruments class files, not any external libs --> <emma enabled="true"> <instr verbosity="${verbosity}" mode="overwrite" instrpath="${out.absolute.dir}/classes" outdir="${out.absolute.dir}/classes"> <!-- DTM: 2011-12-23: added filter for R --> <filter excludes="*.R" /> <filter excludes="*.R$*" /> </instr> <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from user defined file --> </emma>
https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project
http://dtmilano.blogspot.com/search/label/android
发表评论
-
[ATC]Facebook开源弱网模拟工具
2016-03-26 14:24 2712需要注意如下:1.笔者使用了linux USB网卡,是让 ... -
【远程真机管理】openstf
2016-03-24 11:36 2926网站地址:https://github.com/ope ... -
AndroidStudio性能优化
2016-03-15 16:39 1146Android Studio慢、吃内存!启动时后会立即通过Gr ... -
Drozer使用手册
2016-01-18 15:22 2228Drozer ⼯具的安装与启动:源码地址(https:// ... -
TCPDUMP抓包
2015-12-17 20:56 782tcpdump 使用方法:唯有使用文章描述的参数移动手机的 ... -
HTML5安全
2015-10-30 19:43 1319移动安全问题汇总:htt ... -
Android插件DSL配置文档
2015-07-29 15:54 1024Android Plugin DSL Reference -
Gradle-Android打包文档
2015-07-29 15:29 1819http://tools.android.com/tech- ... -
Android性能优化典范(一)
2015-06-02 17:26 13142015年伊始,Google发布 ... -
Android性能系列-电量篇
2015-05-29 16:28 1344电量篇 1) Understanding Battery ... -
Android性能系列-内存篇
2015-05-29 16:27 823内存篇 1) Memory, GC, and Perfor ... -
Android性能系列-运算篇
2015-05-29 16:26 579运算篇 1) Intro to Compute ... -
Android性能系列-渲染篇
2015-05-29 16:25 835Google近期在Udacity上发布了Android性能优 ... -
如何通过wifi在android手机上安装调试应用
2015-05-29 14:42 7021. 首先还是要打开手机 ... -
[Android]解决android65K方法引用限制
2015-01-14 11:39 1623解决方案如下: 1.Google官方的andr ... -
[Android]获取整体APP CPU信息
2015-01-07 14:34 4790通过proc获取CPU信息。adb shell cat / ... -
genymotion-安卓模拟器-IMEI修改方法
2015-01-05 15:44 4416看淘宝动辄就几十元卖这么个破玩意儿,实在是懒得说什么了,人总 ... -
[android]创建固定大小文件
2014-12-29 19:27 2206dd if=/dev/zero of=yourfile ... -
[总结]无线测试
2014-12-18 16:33 1144本文主要介绍测试在项目的各个阶段应该要做的事情、使用的工具和 ... -
[适配性]移动Webapp自适应方案
2014-12-18 16:15 1870此次方案的优化点 页面元素会随宽度的变化而自适应的放大 ...
相关推荐
在 Offline 模式下使用 Emma 进行代码覆盖率检查需要经过三个步骤:插桩、运行测试、合并覆盖率统计数据和输出统计报告。 插桩是 Emma 的第一个步骤,使用 instr 命令对 class 文件或文件夹进行插桩。插桩的目的是...
### 软件测试中的自动化测试与代码覆盖率 #### 第一章:软件测试中的自动化测试与代码覆盖率 **自动化测试**是指使用特定的工具或脚本来执行预定义的测试用例,以验证软件产品的功能是否符合预期的行为。这种方式...
用户代码覆盖率测试 ,开源可重写,对于产品质量控制非常重要
EMMA是一个开源的Java代码覆盖率工具,它可以帮助开发者了解在自动化测试中哪些代码被执行过,哪些没有被执行,从而提高测试的质量和覆盖率。 在描述中提到的“博文链接:https://laorer.iteye.com/blog/123893”,...
EMMA,全称为Emma Metrics for Java,是一款开源的代码覆盖率工具,专为Java应用程序提供精确的测试覆盖率报告。 EMMA的核心功能在于收集和分析执行单元测试后的代码覆盖数据,包括行覆盖率、分支覆盖率、方法覆盖...
本文主要探讨了如何在实际Java项目中使用EMMA进行代码覆盖率统计,强调了功能测试中类覆盖率和方法覆盖率的重要性,并介绍了EMMA在环境准备、工具配置、测试执行和覆盖率报告方面的具体应用方法。 EMMA是一款专门...
本文主要探讨了如何利用代码覆盖率工具EMMA来进行测试,并详细介绍了在Android工程中使用EMMA进行单元测试覆盖率检查的步骤。 EMMA是一个开源的Java程序测试覆盖率工具,它通过字节码插装技术在运行时收集覆盖率...
### 使用Emma进行Android程序代码覆盖率测试 #### 一、引言 在软件开发过程中,确保代码的质量至关重要。其中,代码覆盖率是一种衡量测试充分性的指标,它可以帮助开发者了解哪些部分的代码已被测试覆盖,哪些部分...
Emma 是一款开源的 Java 代码覆盖率工具,专为评估和报告 Java 代码的测试覆盖率而设计。它适用于各种规模的项目,从小型项目到大型企业级应用,都能提供准确的覆盖率数据。Emma 提供了多种级别的覆盖率指标,包括包...
描述中的链接指向了一篇CSDN博客文章,虽然具体内容无法在当前环境下访问,但通常这类文章会详细解释如何使用Emma来统计手工测试(可能是指非自动化测试)或UI测试(用户界面测试)的覆盖率。UI测试主要关注软件的...
JUnit不仅是一个强大的单元测试工具,也是实现自动化测试和提高代码覆盖率的关键。通过合理地编写单元测试用例,并利用JaCoCo等工具进行代码覆盖分析,可以显著提高软件产品的稳定性和可靠性。此外,持续集成的实践...
通过Swing,Emma提供了一个图形化的用户界面,用户可以通过这个界面来配置参数,启动测试,查看覆盖率报告等。这种可视化操作使得非技术背景的用户也能相对容易地理解和使用Emma。 **对WAR包的插桩** 插桩...
`emma_ant.jar`允许开发者在Ant脚本中添加Emma任务,以便在构建过程中自动计算代码覆盖率,这样可以在整个项目生命周期中持续监控代码覆盖率,而不是只在测试阶段进行检查。 使用EclEmma,开发者可以直观地看到代码...
Ant是一个广泛使用的Java构建工具,通过在Ant构建文件中添加EMMA的任务,开发者可以在自动化构建和测试流程中轻松地插入代码覆盖率检查。这有助于确保每次构建时都进行覆盖率检查,并及时发现未充分测试的代码。 `...
6. **覆盖率与持续集成**:在持续集成环境中,每次提交都会触发自动化构建和测试,同时计算代码覆盖率。这样可以及时发现覆盖率下降,促使团队保持良好的测试实践。 7. **挑战与改进**:尽管代码覆盖率工具提供了有...