12.1 代码覆盖率的好处
代码覆盖率是一种测量测试用例运行过程中对源代码覆盖情况的技术统计。代码覆盖率越高,说明测试覆盖的范围越广,反之则说明测试的范围不够,测试范围越广,潜藏的Bug就可能越少,反之则可能隐藏着更多的Bug。
可以从代码覆盖率看出哪些地方测试得不够充分,进而增加这部分的测试,因此,代码覆盖率信息可以更好地帮助测试设计,从而更好地保证产品的质量。
12.2 使用EMMA统计代码覆盖率
EMMA是一款开源的Java代码覆盖率工具,更多详细信息可查看它的官方网站:http://emma.sourceforge.net/。
下面简单介绍如何使用EMMA来收集Android应用的代码覆盖率。
在InstrumentationTestRunner页面其实已经清楚地介绍了产生EMMA代码覆盖率的方法:
http://developer.android.com/reference/android/test/InstrumentationTestRunner.html。
首先需要一个EMMA instrument过的build, 然后在启动命令行指定配置项:
-e coverage true
默认产生的覆盖率结果文件保存在/data//coverage.ec,也可以添加这个配置项来自定义结果文件存放的位置,例如:
-e coverageFile /sdcard/myFile.ec
表示将结果文件保存到/sdcard/myFile.ec。
那怎么生成一个被EMMA instrument过的build呢?
从Andriod SDK下的/tools/ant/build.xml中的help target中可以得到答案,在调用其他的ant target前,调用EMMA这个target就可以了。
以前在测试工程根目录下执行ant clean debug产生源码APK和测试APK,现在只需通过ant clean emma debug就可以产生EMMA instrument过的APK了。
在命令行下,切换到测试项目根目录下,然后执行如下命令:
ant clean emma debug
如todolisttest放在D:\new2\todolisttest10,则在终端执行的过程如图12.1所示。
图12.1
在控制台输出中,可以看到生成EMMA instrument过的APK参照图12.2所示。
图12.2
同时在被测试项目的bin文件夹产生一个coverage.em文件,如图11.3所示。这个文件包含被EMMA instrumented 的classes的信息,最后自动化用例运行后产生一个.ec的文件,这个文件包含运行时的覆盖率数据,通过这个两个文件可以最终得到代码覆盖率的信息。
图12.3
在测试工程目录下执行上面的ant命令只是产生了emma instrumented 的APK和测试APK,还需将这两个APK装到设备上,其实可以通过下面的命令一起实现:
ant clean emma debug install
在移动终端的执行过程如图12.4所示。
运行自动化用例,产生.ec文件。
运行Runner1的case,在命令行指定
-e coverage true -e coverageFile /mnt/sdcard/coverage.ec
完整的命令行运行语句如下。
adbshell am instrument -e coverage true -e coverageFile /mnt/sdcard/coverage.ec -w com. example.todolist.test/com.example.todolist.test.runners.Runner1
在执行这行命令前,先把Login_2掉用例的杀进程的这个语句去掉(然后执行ant clean emma debug install,确保安装的build是最新的),然后运行这个命令,控制台的运行效果,如图12.5所示。
运行完后,在指定的目录/mnt/sdcard/下产生了coverage.ec文件,把这个文件pull到测试工程根目录下,然后把coverage.em文件从源码工程的bin文件夹下复制过来,在终端执行的命令如图12.6所示。
将emma.jar添加到测试工程下,emma.jar可以在Android SDK下的\tools\lib文件夹中找到。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。