Android集成测试

Android集成测试主要是在单元测试的基础上测试接口访问或者异步任务是否正确,在移动凤巢系统中,大概有30+个接口需要测试,他们都遵循一个特定的访问模式:前台的Activity获取到触发事件后,将它传给这些接口,这些接口都是AsyncTask的实现——即后台异步线程执行某个任务(一般是发送http请求到后端服务或者执行存取数据库等耗时操作),完毕后调用回调函数,示意图如下:

  一、测试框架

  对于Android中这种异步接口的自动化测试需要解决3个问题:

  1)如何获取到异步任务执行结果;

  2)如何让上层测试代码尽量不处理任务等待;

  3)如何处理需要登录的接口。

  对于问题1)每个异步任务在获取结果后就直接调用onPostExecute()方法了,测试代码获取不到结果,所以必须有一个专门的桩Activity负责异步任务的执行并将结果暴露出来;

  对于问题2)尽量将等待操作交给测试基类,上层测试代码只需要执行被测逻辑;

  对于问题3)采用模板模式,如果接口需要登录则先执行登录操作后再调用,整体解决方案如下:

  其中桩Activity的逻辑如下,它实际决定接口的调用方式,如果被测接口需要登录则先登录后调用,如果不需要登录则直接调用。

  可以看到isCompleted是标识异步任务是否执行完毕的,无论异步任务返回是onSuccess、onError还是onIOException都会进行置位;result则是异步调用的返回,可以看到这里无论接口调用是成功、失败还是io异常都会将这个结果暴露出来以使测试代码能够获取到;

  interfaceAction是测试代码需要实现的接口,内容如下:

  由于有些接口是必须登录才能访问的,所以前两个接口实现是为其服务的,如果访问的接口必须处于登录状态则先调用login()方法,然后再调用实际的action()方法。另外,书写测试代码的时候为了减少对异步任务等待的代码以及显示对InterfaceActivity这个桩Activity

  的调用还需要完善测试基类:这样上层test case只需要关心具体的测试逻辑而不用关心异步调用及等待处理

 二、测试方法

  以商桥访问接口测试为例,由于它是一个需要登陆才能访问的接口,写自动化case的时候需要完成两个类:BridgeAction和BridgeTest。其中BridgeAction主要是接口的调用,BridgeTest是测试内容:

  这里BaseLoginAction实现了needLogin()和login()方法,主要是登录逻辑,BridgeAction的action()是真正接口的调用。

  测试类主要是对BridgeAction的调用,它可以向接口传递不同的参数,同时也可传递登录操作的用户名和密码。waitAsyncTaskComplete(action)完成了接口逻辑的调用及时间的等待,测试代码只需着重关注result并进行断言。

  三、总结

  异步接口的集成测试的侧重点在于Android手机端向服务器端发送的请求是否正确,以上测试CASE的断言与后端数据其实是强耦合的,即后端caiye这个账户的数据变化可能导致CASE的fail,所以可以考虑引入hamcrest包,做一些匹配校验,主要测试正常和异常情况服务器返回的内容是否符合预期,比如上面最后一个断言可以写成:assertEquals(intValue(),greaterThan(0));当然,服务器端接口的正确性正常情况下应该由服务器端的自动化Case来保证,这样才不至于前后端测试紧耦合在一起。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-08 22:58:47

Android集成测试的相关文章

Android测试

项目源码下载 https://github.com/Wang-Jun-Chao/AndroidProjects 测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:system test 根据测试暴力程度 冒烟测试:smoke test 压力测试:pressure test 单元测试junit 定义一个类继承AndroidTestCase,在类中定义方法,即可

【译】将 Android 项目迁移到 Kotlin 语言

本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandusa 校对者:phxnirvana, Zhiw 不久前我们开源了 Topeka,一个 Android 小测试程序. 这个程序是用 integration tests 和 unit tests 进行测试

八一八android开发规范(一种建议)

开发规范重不重要了,不言而喻.这里就给大家说一故事把--据<圣经·旧约·创世记>第11章记载,是当时人类联合起来兴建,希望能通往天堂的高塔.为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西.此故事试图为世上出现不同语言和种族提供解释.好的开发团队应该是同样的语言,同样的理念,同样的规范去做同一个事情.因此,这里说的开发规范不仅仅在android开发界重要,而且在所有的程序界的重要性也是不言而喻的. 这里说的开发规范分成目录规范,项目和报名的命名

Android最佳Mock单元测试方案:Junit + Mockito + Powermock

本文旨在从实践出发,引导开发者在Android项目中进行Mock单元测试. 什么是单元测试 单元测试由一组独立的测试构成,每个测试针对软件中的一个单独的程序单元.单元测试并非检查程序单元之间是否能够合作良好,而是检查单个程序单元行为是否正确. 为什么要进行单元测试 在敏捷开发大行其道的今天,由于时间紧,任务重,过分依赖测试工程师以及下列原因,导致单元测试不被重视,在开发流程中处于一个可有可无的尴尬境地. 1. 浪费的时间太多 1. 软件开发人员不应参与单元测试 1. 我是很棒的程序员,不需要进行

Android下junit单元测试、logCat的使用

Android下junit单元测试 软件测试小知识: 根据测试是否知道源代码:黑盒测试:只关心程序执行的过程和结果白盒测试:根据源代码写测试方法或者测试用例. 根据测试的粒度: 方法测试:function test单元测试:unit test 集成测试:intergration test 根据测试的次数: 冒烟测试:smoke test(android 猴子) 压力测试:prssure testAndroid单元测试: 1.Android测试类要继承AndroidTestCase类 2.写测试方

Android开发:由模块化到组件化(一)

在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发. 以下高能,请做好心理准备,看不懂请发私信来交流.本文不推荐新手阅读,如果你刚接触Android开发不久,请立刻放弃阅读本文. 模块化和组件化 模块化 组件化不是个新概念,其在各行各业都一直备受重视.至于组件化什么时候在软件工程领域提出已经无从考究了,不过呢可以确认的是组件化最早应用于服务端开发,后来在该思想的指导下,前端开发和移动端开发也产生

Android自动化测试解决方案

现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation,MonkeyRunner,Robotium,以及Robolectric.另外LessPainful也提供服务来进行真实设备上的自动化测试. Android自身提供了对instrumentation测试的基本支持,其中之一就是位于android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的TestCase类来提供An

《Android应用开发攻略》——3.2 在Android中进行TDD

3.2 在Android中进行TDD Kailuo Wang3.2.1 问题 模拟支持的缺乏,使得在 Android开发中进行测试驱动的开发(Test-Driven Development,TDD)难以实现.3.2.2 解决方案 建立两个测试项目:一个用Android工具创建,用于与UI相关的测试,另一个是标准的单元测试项目,用于支持模拟的测试.尽可能将你的逻辑提取到可以进行单元测试的类中.3.2.3 讨论 在官方文档中,与测试相关的文章大部分都是关于UI测试的.要求必须创建一个Android测

Android 中构建快速可靠的 UI 测试_Android

前言 让我一起来看看 Iván Carballo和他的团队是如何使用Espresso, Mockito 和Dagger 2 编写250个UI测试,并且只花了三分钟就运行成功的. 在这篇文章中,我们会探索如何使用Mockito(译者注:Mockito是java编写的一个单元测试框架),Dagger 2 去创建快速可靠的Android UI测试.如果你正在开始编写Android中的UI 测试或者希望改善已有测试性能的开发者,那么这篇文章值得一读. 我第一次在安卓应用中使用UI自动化测试是在几年前使用