像 google 一样测试系列之三:方案选型篇

作者:郑小辉团队:腾讯移动品质中心TMQ

三种测试模式预研

在测试代码放在什么位置上,及如何运行上, 经历了如下过程:

最初模式:采用google官网单测模式:Local unit tests和 Instrumented Tests。

但:组内希望与大组保持一致,即用testng,提供一个界面点击后运行用例。同时是运行在业务app内。

因此,模式a诞生

模式考虑:和开发代码写在同一目录下,以不同package区分,同时新建测试activity界面供点击运行用例,整体测试代码编进开发代码以app运行。

缺点:

(1)和业务耦合太大,业务app在打包时需要裁掉测试代码和资源,和mainfest.xml中的测试元素。开发也不建议写在一起;

(2)同时都能以命令行运行了,还要搞界面来点击运行用例,感觉多此一举;

(3)测试范围上有些减少,比如 Android层的测试,Activity内一些private的逻辑的测试,则测试不了。非要测,就会变成触发UI点击来测,就变成了UI自动化了;

(4)与google单测理念不一致,一些google提供的测试库不支持;

(5)调试不方便,每调试一次,都要打一次包,而打包耗时较久。

优点:

(1)测试代码是在真的Android环境上执行;

(2)可以直接调用业务代码和被测接口。

综上,考虑到该模式,在测试范围,业务代码耦合,CI上,均不够好,因此放弃。

希望继续保持和大组一致,诞生了模式B。

模式考虑:因为目前小组内的产品,均是AS+gradle开发环境,而且AS+gradle也是行业趋势。因此,新建module,类型为lib,测试代码写在module下,同时被业务module依赖,相当于手管插件方式。和业务代码统一打成app,真机运行。

缺点:

1.、需要先运行业务app,才能触发测试代码,如果还需要和大组有界面点击运行,仍然需要在业务代码上 增加该代码,也是有耦合,同时业务app在打包时,需要裁掉该代码;

2、因为module只能是lib,因此被测接口要反射来调用,不能直接调用;

3、调试不方便;

4、业务打包,要裁掉该module;

5、测试范围上同样有些减少,比如 Android层的测试,Activity内一些private 的逻辑的测 试,同样测试不了。

优点:

1、测试代码剥离了,和业务耦合小了点。也可以不用界面点击来运行;

2、测试运行环境为真Android环境。

综上,考虑到该模式,在测试范围,调试方便性,均不够好,因此放弃。

最终还是回归到了最初模式:Local Unit Tests和Instrumented Tests。

方案选型

在经过各模式的预研,实践,选好测试模式后,选用什么框架来测试也是个选择。

考虑的是:Robolectric。

Robolectric样例代码:

综上:

1、从Robolectric样例代码可以看出,目前Robolectric 基本是 从UI层介入,理论上可以忽略UI层,测试单一组件的逻辑,但关键的是不能测试组件的集成逻辑。

2、android层的测试也是运行在PC端的,它并不能测试业务app在真实Android环境上的表现。

因此,最终放弃了Robolectric,选择了Local Unit Tests和Instrumented Tests。

未完待续......

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术

面试必备:如何将一个长URL转换为一个短URL?

前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多...

752
来自专栏测试开发架构之路

Android软件测试Monkey测试工具

前言: 最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monk...

51811
来自专栏Android群英传

基于Google动态化方案的组件化演进

国内Android动态化方案已经蓬勃发展数年之久,在React Natvie、Flutter这些跨平台方案未出现之前,类似Atlas、Replugin、DLA等...

3203
来自专栏大数据挖掘DT机器学习

python玩微信:如何获得自己微信的好友统计信息

在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人。从刚开...

39016
来自专栏CodingToDie

微信机器人

使用它可以方便的完成 回复消息、搜索好友、被添加自动回复、获取好友信息等功能,当然功能不止于这些,这里我们用到了回复信息功能

891
来自专栏源哥的专栏

基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(3)-内容过滤防火墙系统简介

也可以叫做内核编程,因为系统对数据包进行过滤的工作量非常大,使用模块编的话,可以提高系统的效率。在本程序中,包过滤模块,内容过滤模块和数据交互模块都使用的模块...

581
来自专栏张善友的专栏

采访Philipp Crocoll:安卓平台上整合Java和C#

在这个采访中,我们跟开源开发者Philipp Crocoll讨论了关于Keepass2Android的相关话题。Keepass2Android不仅具有强大的密码...

2058
来自专栏HBStream流媒体与音视频技术

DXGI快速截屏桌面直播技术

  很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,Windows8以后微软引...

3526
来自专栏pangguoming

Android平台GPS系统的应用开发

第一部分、前述: Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。Google的目标是让...

4784
来自专栏极客生活

真正好用的python库

这个库是我安装完python环境后第一个安装的库,装上这个库再开始写代码才有底气,作者 Kenneth Reitz 是公认python领域代码写的最好的两个人之...

813

扫码关注云+社区