Android集成测试

标签: 测试理论 测试方案 测试框架 自动化 | 发表时间:2013-03-08 13:14 | 作者:百度质量部
出处:http://qa.baidu.com/blog

 
  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来保
证,这样才不至于前后端测试紧耦合在一起。
 
 

相关 [android 集成测试] 推荐:

Android集成测试

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

集成测试-意义和方法

- - 人月神话的BLOG
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题. 如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等. 集成测试是单元测试的逻辑扩展.

集成测试的几个思考点

- - 人月神话的BLOG
最近关注集成测试比较多,特别是大型项目中的产品和应用集成. 一个产品一个小组做的时候往往集成问题藏在小组内容,但是当真正进行大型的组件化开发和多团队协同的时候,集成就显得很重要的. 集成测试处于单元测试和验收测试之间,是真正将组件组装和集成为产品的关键. 持续集成和集成测试还是有很大区别,持续集成强调的是自动化的编译构建,部署,自动化的冒烟测试,保证开发过程的产出随时都可以构建一个冒烟测试通过的可用版本.

maven 自动化web应用集成测试

- - BlogJava-首页技术区
        web应用集成测试的时候,各位还需要启动web容器,然后打开浏览器,输入ulr,然后看到浏览器的输出吗. 下面我们用maven做到自动化. 我们利用maven的生命周期和jetty插件来实现. 下面描述下做的自动化web集成测试实现的原理. 1,在生命周期pre-integration-test启动jetty容器.

为什么集成测试比单元测试更重要

- - CSDN博客研发管理推荐文章
在假定一些数据的环境下,能顺利通过测试的系统就可算是一个好系统. 不过,现在可以直连外部资源的集成测试才让程序更有价值. 谁知道那些内容商(供应商,vendor)会做出什么傻事来. 很多人一直尝试着让测试达到100%的代码覆盖率,这是很棒的想法,但我倒觉得它有些基本概念上的问题. LosTechies,  Ryan Svihla 提出了"反模式(anti-pattern", 有个有趣的观点: “多数应用都需要与外部资源交互”.

如何为复杂的 Java 应用编写集成测试

- - crossoverJie's Blog
最近有时间又把以前开源的 IM 消息系统捡起来继续开发了(确实这些年经常有朋友催更). 没错,确实是这些年,因为上次发版还是再 2019 年的八月份. 这段时间比较重大的更新就是把 元数据中心抽离出来了,以前是和 zookeeper 的代码强耦合在一起的,重构之后可以有多种实现了. 今后甚至可以提供一个 jar 包就可以把后端服务全部启动起来用于体验,此时就可以使用一个简单的基于内存的注册中心.

微服务下产品集成和集成测试框架流程(200818)

- - 人月神话的BLOG
今天谈下微服务架构下的应用集成和集成测试方面的内容. 在微服务架构下,由于传统的的单体应用以及拆分为多个微服务,那么原来单个系统内部的API接口调用以及变成了微服务间的外部接口调用,而且还可能已经由不同的开发团队在开发不同的微服务模块. 在这种情况下如果不能很好的进行产品应用集成和后续集成测试,那么会经常出现类似单元测试问题遗留到集成测试,端到端流程无法测试通过,测试用例和数据反复制作,集成过程中出现问题故障排查困难等诸多问题.

Android 遥控车

- CasparZ - LinuxTOY
您确定您真的会用 Android 手机玩赛车. 16 岁的法国学生 Jonathan Rico 使用 Android 手机通过蓝牙实现了对改装玩具汽车的遥控. 操控的方式和那些标榜的智能手机游戏一样,使用重力感应,差别是这次控制的是现实世界中的遥控汽车. 收藏到 del.icio.us |.

Android免费?毛

- Ruby - FeedzShare
来自: 36氪 - FeedzShare  . 发布时间:2011年08月17日,  已有 2 人推荐. 微软CEO Steve Ballmer在预测竞争对手产品时通常口无遮拦. 比如他去年抨击Google的Android战略时,很多人都不屑一顾. 接着Android蚕食了微软的地盘,后来又开始侵犯苹果的地盘.