完成Android项目相关代码研发后,有时要求进行代码覆盖率测试,这里提出一种解决方案。
前提:需要环境android SDK,ant1.8.2,jdk1.6,emma(或eclemma),eclipse android环境
一、配置java环境变量
1、打开我的电脑->属性->高级->环境变量。
2、新建系统变量JAVA_HOME 和CLASSPATH
变量名:JAVA_HOME
变量值:C:\ProgramFiles\Java\jdk1.7.0
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。
变量名:Path
变量值:.%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
二、配置android 环境变量
1、 打开我的电脑->属性->高级->环境变量。
2、新建系统变量:
变量名:ANDROID_SDK_HOME
变量值:F:\android\android-sdk-windows
3、新建或编辑用户变量Path:
变量名:Path
变量值:%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;
三、配置 ant 环境变量
1、下载ant
到apache的官网下载ant(windows下选择zip压缩版)。
2、解压ant
将下载下来的apache-ant-1.8.1-bin.zip解压至某目录下,如:F:\android\apache-ant-1.8.4
3、 配置环境变量
(1)、打开我的电脑->属性->高级->环境变量。
(2)、新建系统变量:
变量名:ANT_HOME
变量值:F:\android\apache-ant-1.8.4
(3)、新建或编辑用户变量Path:
变量名:Path
变量值:%ANT_HOME%\bin;
4、检测ant环境变量是否配置成功:
输入cmd:ant
若出现以下界面,则ant环境变量配置成功。即:build.xml does not exists!
四、安装eclipse的eclemma插件,方法参见以下链接:
http://www.ibm.com/developerworks/cn/java/j-lo-eclemma/
五、在dos下执行以下命令
注意:必须以管理员身份运行Eclipse,并启动一个AVD。
1、将eclipse里的andriod工程里生成一个ant的build文件,andriod-app就是工程名:
android update project -p android-app
注:该命令直接在dos下执行即可。命令执行完成后,会在eclipse的android工程的根目录生成一个build.xml 文件。
2、将eclipse里的andriod测试工程也转换成ant工程,-m选项指定了测试工程对应的主andriod工程的位置,而android-test就是测试工程名:
android update test-project -m ../android-app -p android-test
注:该命令直接在dos下执行即可。建议进入到测试工程的目录下执行。命令执行完成后,会在eclipse的android工程的根目录生成一个build.xml 文件。
3、执行ant的相关任务,编译、执行单元测试、收集覆盖率:
ant clean emma debug install test
注:此命令必须在测试工程所在的路径下执行,并且AVD 已经起来或者设备(如pad)已经连接到电脑。
运行android-sdk-windows\tools\ant 路径下的build.xml 中定义的任务。
即:运行build.xml中定义的clean任务、emma任务、debug任务、install任务、test任务。
例如:Sample为主工程名称,SampleTest为测试工程。
android update project -p F:\LiZhenHua\Android\Sample
android update test-project -m ../Sample -p F:\LiZhenHua\Android\SampleTest
ant clean emma debug install test
执行完如下图:
如上图所示:
Android Test Project 的build.xml文件中默认会将代码覆盖率数据保存在模拟器或者pad设备的/data/data/../coverage目录下。因此需要在主工程和测试工程的AndroidManifest.xml文件中添加写入的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
操作完成后,在Android Test Project 的bin目录下,会生成一个coverage.html文件。浏览此文件即可看到代码覆盖情况,以及覆盖率。
参见资料:http://www.cnblogs.com/killmyday/archive/2012/07/23/2605708.html
使用Ant+Emma收集android代码覆盖率 黑盒方法:
步骤:
一、前四步和白盒的方法步骤相同。
二、拿到需要测试的源码,并新建一个Android Test Project。
三、建立好测试工程之后,粘贴如下代码:
代码说明:
- MyTest:测试类名
- ActivityInstrumentationTestCase2:黑盒测试需继承的类
- AppProjectMainActivity:被测试的Activity。
在测试类中,必须有一个无参的测试类的构造函数和一个testActivity()方法。testActivity()方法即等到用户手动操作。
四、按照白盒测试的第五步,在dos下运行相应的命令。
五、当看到dos窗口里输出Running tests… 时,进行用户手动操作。
详细代码参见:
AppProject 和TestAppProject 工程。
参见资料:http://www.spasvo.com/news/html/2012112195538.html
常见问题及解决办法:
- 1、 unable to locate tools.jar expected to find it in C:\Program Files\Java\jre6\lib\tools.jar
解决办法:将“C:/Program Files/Java/jdk1.6.0_16/lib”目录下的tools.jar文件拷贝到“C:/Program Files/Java/jre6/lib”目录下,重新运行命令ant,运行正常,问题解决。
- 2、 Emma failed to dump coverage data EACCES(permission denied)
解决办法:在主工程和测试工程的AndroidManifest.xml文件中添加写入的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后重新执行第五步的相关命令。
= THE END =
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。