基于JUnit的安卓接口测试脚本编写

一、 摘要

经验案例描述的是基于JUnit的安卓接口测试脚本编写案例。全文从背景描述、JUnit基本使用、JUnit实例、总结等方面对案例进行说明。本案例中的方法已经应用于部分产品安卓接口的测试过程中。读者可以参考案例中提出或总结的方法论,在安卓产品接口测试中应用。文档后面有Junit教程、安卓官方测试资料、安卓SDK测试规范、JUnit框架源码资料等内容,可参考阅读。

二、 背景描述

安卓产品对外发布时,会给外部用户及内部用户提供一套完整的安卓接口。安卓的接口的质量需要进行保证,包括jar包内接口的质量及接口说明文档的质量。基于以上原因进行安卓接口测试,根据安卓接口测试经验完成本文撰写。此外,接口也可以在功能测试中进行应用,进而提高复杂功能用例的执行效率。

三、 JUnit基本使用

1 Junit概述

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。

2 Junit测试脚本的基本编写流程

java测试外部接口是否正常 java接口测试脚本怎么写_测试用例

图3.2

3 Android Studio中Junit测试脚本编辑界面

java测试外部接口是否正常 java接口测试脚本怎么写_测试用例_02

图3.3

4 Junit注解&断言方法

Junit提供包括@BeforeClass、@AfterClass、@Before 、@After、@Test等注解方式。其中@BeforeClass表示在类中的任意public static void方法执行之前执行;@AfterClass 表示在类中的任意public static void方法执行之后执行;@Before 表示在任意使用@Test注解标注的public void方法执行之前执行;@After – 表示在任意使用@Test注解标注的public void方法执行之后执行;@Test – 使用该注解标注的public void方法会表示为一个测试方法。Junit提供下面表格所示的断言方法:

序号 方法和描述

1 void assertEquals(boolean expected, boolean actual)

检查两个变量或者等式是否平衡

2 void assertTrue(boolean expected, boolean actual)

检查条件为真

3 void assertFalse(boolean condition)

检查条件为假

4 void assertNotNull(Object object)

检查对象不为空

5 void assertNull(Object object)

检查对象为空

6 void assertSame(boolean condition)

assertSame() 方法检查两个相关对象是否指向同一个对象

7 void assertNotSame(boolean condition)

assertNotSame() 方法检查两个相关对象是否不指向同一个对象

8 void assertArrayEquals(expectedArray, resultArray)

assertArrayEquals() 方法检查两个数组是否相等

表3.1

5 Junit测试脚本执行后报错的常见形式及排查方法

JUnit脚本执行后会有两种情况出现执行结果为F的状态。一种是断言出错,另一种为程序自身错误引发脚本执行报错。

出现断言错误,可以采用以下方法进行问题排查:1)观察断言内容是否与真实的预期值保持一致,如自己设置的预期值是否存在错误等;2)增加打印信息进行中间产生确认,设备打印信息也可以参考阅读,进行进一步输出的确认;3)确认问题,寻找开发进行协助排查。

脚本运行可能会出现下午所示的异常情况:

java测试外部接口是否正常 java接口测试脚本怎么写_Test_03

图3.5

出现程序自身的问题,可以采用以下方法进行问题排查:1)增加打印信息进行信息确认,设备打印信息也可以参考阅读;2)单步调试排;查3)寻找开发协助排查(有一些信息是我们这边不知道的,开发那边也许会知道)。

6 Android Studio中Junit测试结果导出

在Android Studio对测试用例执行完毕后,可以通过测试报告导出按钮进行测试报告导出。其中图3.6.1是导出操作图、图3.6.2是某一测试用例集运行结果报告。

java测试外部接口是否正常 java接口测试脚本怎么写_Test_04

java测试外部接口是否正常 java接口测试脚本怎么写_测试脚本_05

图3.6.1

图3.6.2

7 Junit原理简述

java测试外部接口是否正常 java接口测试脚本怎么写_测试脚本_06

图3.7.1

java测试外部接口是否正常 java接口测试脚本怎么写_测试用例_07

图3.7.2

由图3.7.1可以看出测试脚本构造完成之后,由测试运行器进行执行。图3.7.2给出了junit的测试用例生命周期图,其完整地阐释了测试用例创建完成之后的整个调用过程。本文不对测试用例生命周期图进行详细解析,对于JUnit如欲进行详细了解,可以参阅本文文末的链接或者直接阅读JUnit实现源码。

四、 JUnit实例

1 安卓SDK接口测试流程

java测试外部接口是否正常 java接口测试脚本怎么写_java测试外部接口是否正常_08

图4.1
五、 总结
全文从背景描述、JUnit基本使用、JUnit实例等方面对案例进行说明。介绍JUnit基本使用时,从界面到基本操作,再到原理分析均有所涉及,可以基于此文对JUnit进行测试脚本编写。在JUnit中,以安卓SDK接口及人脸SDK接口为例进行实例讲解,讲述了整体用例的设计过程及测试脚本编写过程,读者在对接自己产品是可以进行案例参照。最后引出人脸功能部分的的实例,说明了使用单元测试框架可以进行功能测试用例的自动化实现。这提供一种方法,可以基于单元测试框架,进行复杂测试用例的自动化实现,以便于提高测试效率。
六、 参考资料

  1. JUnit 5 User Guide https://junit.org/junit5/docs/current/user-guide/
  2. jUnit教程 https://www.w3cschool.cn/junit/?
  3. Test apps on Android https://developer.android.google.cn/training/testing/
  4. 安卓SDK测试流程规范 https://10.1.14.79/testgroup /项目支持组/2.协议测试/安卓SDK/安卓SDK测试流程规范指导书(初稿).pdf
  5. 分析 JUnit 框架源代码 https://www.ibm.com/developerworks/cn/java/j-lo-junit-src/