Google+团队如何测试移动应用程序

2014-10-24   出处: googletesting  作/译者:Eduardo Bravo Ortiz/大头

现如今,许多公司都提出了“手机第一”的口号。然而,能够以一种有意义的方式来测试移动应用程序是非常具有挑战性的。在Google+团队,我们分享了通过我们反复试验得到的使我们成功的战略,能够同时运用于iOS和Android的测试移动应用程序。

 

整体来

  • 了解平台。 Android上的测试与iOS上测试不是一回事。适用于不同平台的测试工具和框架的都有显著的不同之处。(例如,Android使用的是Java,而iOS使用的是Objective-C,用户界面布局都建立各自不同的平台上,UI测试框架在两个平台上工作的也非常不同。)
  • 稳定你的测试套件和测试环境。脆弱不可靠的测试比没有测试更糟糕,因为不可靠的测试反而影响构建状况,降低您的套件的可信度。
  • 将你的测试分解为可管理的组成部分。目前在手机应用测试方面有太多复的组成部分(如模拟器/设备的状态,由操作系统引发的动作)。
  • 为您的测试提供密封测试环境。手机用户界面测试本身存在着脆弱性;不要再让外部依赖对其增加更多的脆弱性。
  • 单元测试是您的手机测试策略的支柱。尝试尽量将应用程序代码的逻辑部分与UI分开。这种分离将使得单元测试更精细,速度更快。

 

Android测试

 

测试

从代码逻辑分离UI代码是特别难的Android。例如,一个活动被设计成同时作为控制器和视图组件;确保你在编写单元测试时,记得这点。另一个有用的建议是从Android仿真器分离单元测试,这将不再需要建立一个APK并安装它,你的测试将运行得更快。 Robolectric就是这样一个完美的工具;在运行测试中,它通过存根方法来安装启动Android平台。

 

密封的UI测试

一种密封的UI测试通常是在没有网络通信或外部依赖的情况下运行测试。一旦测试可以在一个密封的环境中运行,利用白箱测试框架,例如Espresso就可以模拟和应用程序代码紧密耦合的UI用户操作。Espresso也将同步你的测试到UI线程上,以减少脆弱性。关于Espresso的详细信息将在将来的谷歌测试博客上发布。

 

图:非封闭流程 vs 封闭流程

猴子测试

猴子试验通过对你的Android应用程序加压进行测试以寻找崩溃和ANR。测试通过伪随机事件,例如类似猩猩所做的点击和手势来进行测试。猴子测试结果在某种程度上是可复制的;时间和延迟并不完全在你的控制之下,并可能导致测试失败。重新运行针对相同的配置的相同的猴子试验往往会重现这些失败。然而,如果你每天针对不同的SDK运行它们,它们对于在新版本的开发周期中较早的发现bug是非常有效的。

 

iOS测试

 

测试

像Xcode中附带的OCUnitGTMSenTestcase这样的单元测试框架都是不错的选择。

 

全封UI测试

KIF已被证明是用Objective-C写UI测试的强大解决方案。它运行在相同进程中使得测试与所测试的应用程序更紧密的结合,也使得测试本质上更稳定。 KIF允许的iOS开发者使用与他们的应用程序相同的语言来编写测试。

按照与Android的UI测试同样的模式,你也希望Objective-C的测试是密封的。一个好的方法通过预定义的反应来模仿服务器。由于KIF测试在同进程中运行,反应可以通过编程建立,使测试更容易维护,更稳定。

 

猴子测试

iOS并没有类似于安卓的用来写猴子测试的自带的工具,但是这种类型的测试仍为iOS增加了价值(例如,在我们最近的Google+版本之一,我们发现了16处崩溃)。Google+团队开发了自己的定制猴子测试框架,但也有许多可用的第三方选件。

 

后台测试

如果不对服务器后台和手机客户端之间的移动的集成进行测试,测试策略就不算完整。这在移动客户端和后台的开发周期有很大区别的情况下尤为正确。重播测试策略可以非常有效地防止从后台破移动客户端。这种策略背后支撑的理论是由通过一组知道是正确的金色请求和响应文件,来模拟移动客户端。重播测试套件将发送金色请求到后台服务器,并断言由服务器返回的响应将匹配预计的反应。由于服务器的响应往往不能完全确定,你可能需要利用进行比较的工具,来忽略与预期的差异。

为了使这一战略获得成功,你需要一种方法来将可重复的数据集置于后台,封闭所有那些不相关的依赖。使用内存的服务器和假数据或对外部的依赖关系使用RPC重播,是实现可重复的数据集和密封环境的良好的途径。 Google+的移动后台使用Guice的依赖注入,这使得我们可以很容易地在测试和种子数据设备中置换出伪实现依赖。

图:普通流程 vs 重播测试流程

结论

移动应用程序的测试是非常具有挑战性的,但建立一个全面的测试策略,了解不同的平台和工具的本质是成功的关键。提供了一个可靠,密封的测试环境和你所写的测试一样重要。

最后,确保你按照你的团队需要考虑你的自动化工作的优先级。这是我们Google+小组的优先级:

  1. 单元测试:不论在Android或是iOS,这都应该是你的首要任务。他们运行得快,而且比任何其他类型的测试都要更健壮。
  2. 后台测试:确保你的后台不会破坏你的移动客户端。当移动客户端和后台的开发周期不同的情况下,很容易会产生崩溃。
  3. UI测试:这是生来就慢而且脆弱。他们还需要更多的时间来编写和维护。请确保你的应用程序至少覆盖了关键路径。
  4. 猴子测试:这是最后一步,完成您的移动自动化策略。

【英文原文:http://googletesting.blogspot.co.uk/2013/08/how-google-team-tests-mobile-apps.html

{测试窝原创译文,译者:大头}

译者简介:大头,在读日本九州大学修士,计算机专业,主研究方向为文本挖掘,及自然语言处理。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
359° /3595 人阅读/0 条评论 发表评论

登录 后发表评论