移动应用测试——打造完美应用的秘诀
英文原文: Mobile App Testing - The Secret to the Perfect App
打造完美移动应用的关键
上个季度,你刚刚花了大半个季度的时间,开发最新版本的移动应用程序。这是一项必须完成的工作。最近的主流移动操作系统升级让你的应用具备了新的能力。你的竞争对手已经通过扩展他们的应用功能完成了资本运作。他们对最新版本应用功能的宣传攻势已经开始。在各个商业广告里,你的应用看起来越来越像是石器时代的遗物。
你的工作是要保证你们公司的应用不要掉队。尽快发布最新版本的压力是移动应用开发中最大的风险。这是为什么大多数应用一度星光闪耀,但用了几次就被删除的原因。它们总是出现各种问题。
通过移动应用测试过程,你可以先于客户捕捉到移动应用所有的功能或者性能方面的问题。即使你在上市时间上击败了你的竞争对手,如果应用上的一些问题被终端用户发现时,你会希望你没有这么快发布应用。它导致的后果就是一个愤怒的用户和其背后庞大的社交网络,以及被浪费的数以千计的工时和数百万美元。
这就是为什么移动应用测试成为移动应用开发过程中最关键的环节。他就像一颗跳动的心脏一样。平常你不太会感知到它的存在,但是如果它不能正常工作,就会导致灾难性的后果。
新时代的应用
桌面应用的测试矩阵相对来说比较简单。桌上电脑的位置是固定的,屏幕尺寸是标准的,操作系统通常也都是相同的。移动化让所有的规则都发生了变化。
“互联网可以让公司‘一直处于营业中’。现在,移动互联网则让公司有机会能够‘随时随地处于营业状态。’为了支撑这个更加宏伟的口号,会增加许多额外的工作。”Expertitest的首席执行官Tal Barmeir如是说。
移动应用的测试矩阵更加复杂。智能手机,以及其上所承载的所有应用不停地变换位置,本地网络也随之不停变化。从北京去往巴塞罗那的商务人士会带着他的应用跨越大洲。如果某个应用在一些位置比在另外一些位置运行更加平滑,有可能会激怒它的用户。为了让应用在不同位置的性能相对平均,需要根据不同级别的带宽、延迟、抖动以及其他随着网络情况变化的变量,进行全面的测试。
从可穿戴设备到平板电脑,移动设备的形状和大小各不相同。屏幕的分辨率也是各种各样。这也为移动应用开发带来新的挑战。在桌面电脑上看起来不错的应用在平板电脑上可能不那么好看,在智能手机上的表现甚至会更糟。即使是功能也需要在不同尺寸的设备上测试。如果按钮太小用户的手指无法点击怎么办?如果由于移动设备屏幕压缩导致重要信息无法显示怎么办?由于用户手中的移动设备数量庞大,这些问题变得更加复杂。据OpenSignal 2014年8月发布的 报告指出,仅安卓一个品牌的设备就有大约20000种不同尺寸和分辨率。
此外还有4种有着完全不同配置的主流操作系统。一个标准的移动应用测试的测试集可能是一个包含成千上万的位置、设备型号、尺寸和操作系统组合的多维矩阵。
时间紧,任务急
这个复杂的矩阵就是为什么移动测试是整个开发过程中运行最缓慢的阶段的原因。测试团队必须要保证移动应用的每个功能在任何一个位置都能平滑并且正常的工作,不会出现停顿、崩溃或者过多的缓冲。完成这样的工作需要大量的时间。
然而,移动应用开发的性质导致测试团队不可能有足够的时间开展工作。竞争如此激烈,每天竞争对手都会在市场上发布最新版本的应用,其中包括你的应用尚未实现的功能,导致你的应用一直处于过时的边缘。日积月累的技术优势会让你的应用慢慢消失直到被遗忘。
这让开发运维团队陷入两难的境地。如果测试充分,就会面临晚于竞争对手发布产品的风险。这会诱导团队抄近路,走捷径。经理可以做出缩减测试流程的决策。他可以决定只测试原有测试范围的一部分以加快应用进入市场的速度。
这就好像俄罗斯轮盘赌。其中的风险在于,客户成为“辅助QA团队”,代替质量保证团队捕捉应用程序中的缺陷。任何未经测试或修复的功能都可能是用户删除应用再不与应用开发公司打交道的原因。
测试目的
应用的两个主要的组成部分就是功能和性能。应用的每个功能是否都能够正常工作?在哪些场景下,以某种方式使用应用时,应用会崩溃,返回一条错误信息,或者未按照期望执行?性能即速度,而速度会逐渐成为新的功能。如果应用的某个区域运行过慢,在最终用户的眼中这就是程序崩溃的表现。这会让应用开发变得更具挑战,因为如果应用无法正常工作或者由于开发者无法控制的因素变得迟缓,都会归咎于开发人员。用户会认为问题出在移动应用上,并会考虑删除它。这可能并不公平,但这就是商业规则。
测试人员需要测试每一个他们可以控制的场景,而且还要尽可能多地测试那些他们无法控制的场景。他们需要模拟地球上各种各样的本地网络情况,调节带宽、延时和接收。测试人员必须保证应用在这些情况下应用都能够有效运转。除了要测试地点以外,还需要测试位置。如果用户正在进入电梯或者穿过隧道会发生什么情况?
不断发展的测试环境
移动测试的发展非常迅速,所有这些发展的目标只有一个,就是要缩短测试的时间周期。最初的测试类型是手工测试。用户会将应用下载到移动设备并的的确确使用这个应用。测试人员会像用户一样通过用手输入文字、点击按钮来执行每一个功能点的测试,这是一个非常缓慢的过程。测试人员同时只能在一部设备上进行测试。手工测试现在已经发展到可以将设备插到电脑上,然后用鼠标和键盘操控设备进行测试。
下一个阶段是测试自动化。通过自动化,可以同时在多个设备上进行测试。测试人员选择一个设备创建测试脚本。用键盘和鼠标在反射到电脑上的移动设备屏幕开始执行一系列的测试步骤。完成录制后,测试软件会将测试步骤序列转化成一个测试脚本。然后就可以在全部设备上运行该脚本并为每一次的测试结果生成报告。最好的测试工具能够用所有主流的测试脚本语言生成脚本,而且能够即时完成测试脚本语言的转换。
生成测试脚本后,我们可以编辑脚本来创建循环、条件语句或任何附加程序流程,以提升测试的价值。将测试脚本集成到持续集成(CI)服务器上,只需要少量的手工操作就可以将测试步骤整合到开发过程中。
云测试帮你提前完成任务
目前为止,在扩展测试覆盖度和减少测试时间方面最大的飞跃就是云测试的引入。在云端设置一个移动测试工具,手工测试和自动化测试的生产力,都能够大大提高,而且还能够增进敏捷开发过程的影响。
云测试的具体工作方式如下:首先将云测试工具加载到一台服务器上。一系列连接着移动设备的机器会连接到这台服务器上。通过这些机器,可以连接很多设备。通过这种方式可以创建一个内部移动设备实验室,测试人员可以访问任何连接着的设备。就是这么简单。
这让每一个移动应用测试人员都可以访问所有业务所需的设备。可能是20个设备,也可能是200个设备,甚至更多。这些拥有不同尺寸、版本和操作系统的设备,组成了一个大型的组合矩阵,可以覆盖相当大的测试区域。
对于敏捷开发来说,云测试非常完美。可以将测试人员和一些来自于开发运维部门各个部分的成员一同分配到某个指定的远程项目中。通过云端访问,测试人员可以对公司中所有的设备信手拈来。即使测试人员从一处办公地点搬迁到令一处办公地点时,所有这些移动测试装备都随时可以使用。
云测试扩展了手工测试和自动化测试的规模。测试人员不再限于只能使用连接到他个人电脑上的设备,他们可以远程连接到设备然后用桌面电脑上的设备屏幕映像来操作设备,通过这种方式,在云端的任意一台设备上进行手工测试或自动化测试。如果需要在某台指定设备上使用某个指定操作系统的指定版本进行测试,也不需要费尽心思在办公室寻找测试设备或者购买新的测试设备。只需要查看一下云端的可用设备列表,然后访问相应的设备即可。如果所需要的设备正在使用中,测试人员可以预定这台设备,并且可以根据所需测试的周期,保留对设备的独占访问。
通过压缩总体测试时间,云测试大大缩减了移动应用发布到市场的周期。质量保证经理可以通过将项目和设备分派给在不同的公司办公场所的测试人员,管理移动实验室中的所有设备。他们可以将一个任务分派给香港的测试人员。换班时,他们可以将该项目的后续工作分派给位于加利福尼亚的团队。再之后,剩余的工作将会安排给伦敦的团队。跨越不同的时区,测试团队可以创造一个永不停歇的测试流程,来自不同时区的测试人员将持续不断地进行应用测试,直到应用发布到市场上为止。
拥有适当的移动云测试工具的关键是安全。内部设备实验室应该在公司的防火墙保护之下,并且点与之间的信息传输也应该处于公司的VPN环境中。
破冰之锤
利用合适的测试工具集,企业可以全面并有效地进行移动应用测试,这会大大降低由于资源不足而缩减测试范围的压力。如果移动应用的功能和性能有了保障,在与竞争对手的对抗中,你就已经成功了一半。测试也许不是移动开发过程中最具魅力的部分,但是好的测试策略所带来的成效却着实令人着迷。高质量的移动测试计划是移动化成功的隐形财富。
Experitest的SeeTest测试套件可以满足目前移动应用所有必要的测试需求。
- SeeTest Manual是用鼠标和键盘进行手工测试的产品。该产品是免费的,随时可以下载并立即开始测试。
- SeeTest Automation通过让用户创建脚本并在多台设备上同时进行测试,可以加速测试的进程。这些脚本可以被转换成任何一种主流的测试语言,而且还可以将其整合到持续集成过程中。
- SeeTest Network Virtualization可以模拟任何本地网络,其中包括一些特殊的场景设计,例如用户进入电梯时或者火车通过隧道时。
- SeeTest Cloud可以利用上述这些工具在所有连接到个人电脑或者内部设备实验室的移动设备上进行测试。所有的测试工作都在公司的防火墙内部完成,保证安全性。
从这本移动银行测试的 白皮书中,你可以看到一个关于大型企业如何部署SeeTest产品套件的案例研究(该案例研究位于第29页)。
所有的SeeTest产品都可以通过 getDeviceLog命令捕捉设备日志。如果只想要捕捉特定部分的日志,可以用SeeTest命令清空定制的事件跟踪日志。如果想要获取SeeTest应用的日志或者测试工具正在设备上跟踪的日志,可以用 getLog命令。
SeeTest还可以用于CPU、内存和电池使用情况的监控。利用 getMonitors命令可以通过测试了解应用程序对设备的电池和内存的影响程度。
移动化是一个新兴的产业,带给我们前所未见的机遇和挑战。出色的工具能够快速适应变化的环境并且可以让你在这个快速扩张的市场中时刻准备好下一次飞跃。