【学以致用】android功能实现8---Android Studio 的UiAutomator 2.0的测试覆盖率验证

之前研究了如果使用Uiautomator 2.0来自动化模拟人的手动测试,来检测程序的基本功能是否完整。然而,根据经验来检测功能,是人为设定哪些功能是我们需要关注的,认为设定的真的测试完整了吗?这个测试究竟对程序验证到了什么程度?这就需要代码覆盖率来完成。

 

首先,人为设定哪些需要检测是可行的,也是可信的。程序是程序员设计的,这个程序有什么目的,需要完成什么功能,程序员是知道的,所以我们可以针对这些功能进行一一检查,确保功能正常。

 

然而,幸运的是,android还提供了一种机制,可以在我们具备了自动化检测的基础上,对代码的覆盖率进行检测,其原理是统计代码的总方法的个数,然后在自动化检测过程中,使用到的方法的个数,使用个数/总个数,就是测试覆盖率。

 

而且测试覆盖率的方法很简单,完全可以在设计完自动化测试之后,随手测一次。

 

这个方案有一个假设,当功能正确的时候,其涉及到的方法就是我们希望其运行的方法。也就是,一个行为调用了一系列方法,只有这一系列方法都没有错误,这个行为才能成功完成。

 

我们相信这个假设的正确性,那么我们就可以选择以此为假设的官方组件,比如mockito或jacoco

 

我们在已有Uiautomator的测试基础上,可以比较简单的完成覆盖率测试,下面是完整的流程:

 

1:改写gradle文件,测试环境搭建

2:运行覆盖率测试

3:在目录下找到结果

 

详细流程:

 

1:环境搭建

1.1 基本准备:

     以本文推荐的简单方法,完成覆盖率测试,需要将测试的代码和程序的代码放到一个工程当中。程序代码在app/src/main里面。而UiAutomator的代码在app/src/AndroidTest里面。

     如果因为特殊原因,测试的代码位置不是默认位置,则需要在gradle里面配置测试程序的地址。

 

需要在文件build.gradle里面,加入一项:

androidTest {
    java.srcDirs = ['androidTest/java']
}

其中,‘androidTest/java’是代码路径,根据需要修改,

一般我们不加此项,则测试地址为默认地址

默认地址为java.srcDirs = ['app/src/AndroidTest/java']

 

     1.2加入jacoco

采用gradleapply,插入后,系统会自己进行下载。

 

apply plugin: 'jacoco'

此命令也是单独的一项,是最高级项,和上一项中的androidTest 平级。插入命令后面没有{}的内容来表征细节。

 

1.3设定打开覆盖率测试。

在主项buildTypes 中,添加当前编译的对象,一般是debug或者release

将testCoverageEnabled = true命令放入debug中,该项如下。

 

buildTypes {

debug { testCoverageEnabled = true

}

}

 

 

完成以上三步,基本准备工作就已经做完。

 

2:运行覆盖率测试

 

2.1运行自动化测试

运行覆盖率测试,首先要确保自动化测试能够100%通过,如果有某项测试没有通过,是不能进行覆盖率测试的。

运行自动化测试的方法:

androidStudio的最右边,在写代码的框的右上角,有一个名为Gradle的选项,点击后能够打开一个侧边栏。

Task/verification/connectedAndroidTest,在这个选项点击右键,然后run,记住一定要点,这样后面进行覆盖率测试才顺利

 

 

2.2运行覆盖率测试的地方。

androidStudio的最右边,在写代码的框的右上角,有一个名为Gradle的选项,点击后能够打开一个侧边栏。

 

侧边栏目录中,Task/verification/createDebugCoverageReport,在这个选项点击右键,然后run即可。

以上就会在手机上进行一边自动化测试,当测试完成后,覆盖率测试也同步完成了。

 

 

3:查看报告。

报告输出在build\reports\coverage里面,会生成各个类的具体细节,同时还有一个在根目录有名为index.html的统一文件,点开后,能够看到总的覆盖率的百分比。

 

以上,就完成了一次测试覆盖率的测试,在已经实现了自动化测试的基础上,完成覆盖率测试非常简单,作为一个小工具,值得学习和使用。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页