移动应用测试重点与关键技术
2018-09-17喻晓袁谦吴广刘健
文 | 喻晓 袁谦 吴广 刘健
移动应用软件测试要点综述
近年来,随着移动互联网的迅猛发展,人们对于移动应用软件的需求呈现爆发式增长,对其质量以及用户使用体验更是提出了相当高的要求。同时,移动应用版本的持续更新和功能的大量增多,以及设备厂商的井喷式增长和操作系统版本的快速更迭,使得用户对应用的要求不仅仅是功能的简单实现,而更多关注的是移动应用软件的稳定性、可靠性、兼容性、性能效率等方面。
移动应用测试是保证移动应用质量最基本的方法,在移动应用软件开发过程中,软件测试不仅是软件开发的一个有机组成部分,而且在软件开发的系统工程中占据着相当大的比重,是保证软件质量的必要环节。
移动应用测试概述
移动应用类型
从应用类型来看,移动应用分为原生应用(Native APP)、Web应用(Web APP)和混合应用(Hybrid APP)。
根据不同的应用类型,测试的侧重点应有所不同。由于原生应用直接运行于Android或iOS等系统的移动设备之上,支持离线运行,有较好的易用性、流畅的画面,以及较高的用户体验,因此测试重点应主要集中在软件安装与卸载、功能测试、交叉事件测试、兼容性等方面。Web应用本质上是为移动浏览器设计的基于HTLM5的应用,因而测试重点应放在功能测试、UI测试、兼容性、性能测试等方面。而作为两者的结合,混合应用的测试重点也要求更高更全面。
移动应用测试流程
移动应用软件测试流程主要包括测试需求分析、测试计划编制、测试用例设计、测试实施、测试结果整理、测试报告生成等阶段。从测试需求分析到测试实施阶段,安装与卸载、功能测试、UI测试、兼容性测试、交叉事件测试、安全性测试、性能测试等测试重点便涉及其中,测试人员应根据移动应用类型和具体的委托测试需求,确定测试的重点方向并明确测试需求和测试计划,继而进行用例设计和后续测试流程。
移动应用测试重点
根据移动应用的测试重点,以下主要考虑安装与卸载测试、功能测试、UI测试、兼容性测试、交叉事件测试、安全性测试、性能测试,以确保软件能正确、稳定、安全、可靠的运行。
安装与卸载测试
安装与卸载测试是移动应用最先进行的测试环节。在对移动应用软件进行安装测试时,需要关注在不同的操作系统版本上,不同智能终端上是否能够正确安装,安装过程中是否可以取消,如遇内存不足的情况是否有提示信息同时自动取消安装并删除安装时写入设备的文件;安装完成后的软件是否能够正常运行,安装后的文件夹及文件是否写到了指定的目录里。卸载测试时,程序是否有提示卸载信息,卸载程序过程中能否取消卸载,卸载后能否自动删除安装时写入设备的文件。
功能测试
功能测试是最基本的测试,主要根据软件说明书或需求规格说明书来验证移动应用功能是否正确实现,是否有遗漏或错误的功能。一般采用时间、地点、对象、行为和背景五元素或业务分析等方法分提取测试点。根据被测功能的特性,采用恰当的测试方法设计相应的测试用例,比如对于多逻辑条件输入操作可以使用等价类划分、边界值、因果图、场景法等对其进行覆盖。一般移动应用功能测试还需要考虑:运行、前后台切换、免登陆、照相机定位功能、时间、消息推送、离线浏览、数据更新、软件更新等方面。
移动应用测试流程及相关测试重点图
UI测试
UI测试即用户界面测试,是对软件中的可见外观及其与用户交互部分的测试,主要关注用户界面的布局、风格是否满足用户需求。可见外观包括界面的色彩搭配、图标、字体、按钮是否美观、合理,提示信息和页面是否有语法错误等内容;与用户交互部分一般是指菜单、对话框、按钮等控件。
UI测试主要通过导航测试、图形测试、内容测试,以及软件在不同屏幕尺寸和分辨率下的测试等来验证用户界面是否能为用户提供访问和浏览功能,以实现移动引用软件良好的交互性、人性化、易操作性,同时应注意用户界面是否符合公司或行业的标准。
兼容性测试
兼容性测试是在规定的条件下,应用程序与相关硬件、软件、网络、数据等之间是否满足有关要求能力的适配性验证。针对移动应用软件,兼容性测试应主要考虑以下几个方面:
硬件兼容性:主要关注移动应用在不同的设备上是否能够正确显示、稳定地运行;在不同屏幕尺寸和分辨率情况下能否正常操作、显示。
软件兼容性:主要测试移动应用在Android、iOS等不同操作系统下是否能够正常运行;是否会影响其他应用的使用或受其他应用程序影响;是否兼容相关浏览器进行正常的访问和操作。
网络兼容性:在2G/3G/4G/Wi-Fi等不同网络连接下,移动应用是否能够正常使用运行。
数据兼容性:同一软件不同版本之间,以及与其他软件之间的数据兼容和共享是否正常。
交叉事件测试
交叉事件又叫事件测试或冲突测试,是指当一个移动应用正常执行过程中,同时另一个事件或操作对当前应用过程造成干扰或打断的一种测试。这些事件通常包括来电、短信、微信、消息推送、文件下载、音乐收听、视频播放等。
对于移动应用软件来说这是非常重要的一种测试,因为在智能手机等移动终端的日常使用中经常会发生交叉事件,对于交叉或冲突事件,应重点关注:
多应用同时运行时,是否会影响目标测试应用或其他应用的正常运行。
当目标测试应用进行前后台切换时,是否会影响其正常使用运行。
当目标测试应用运行使用时,电话接听/拨打、微信消息提示、消息推送、相机拍照等事件是否影响其正常运行使用。
当网络切换时,是否影响目标测试应用的正常运行使用。
安全性测试
安全性是用户最关注的部分,安全性的好坏直接影响用户数量。移动应用的安全性测试主要从软件的权限和数据安全性考虑。安全测试是检查软件中已存在的安全性、安全保密性措施是否有效的测试。其重点关注以下几个方面:
软件权限: 运行应用时,是否会有扣费风险、泄露隐私风险、非法授权访问等方面因素;
数据安全性:应用是否在未经用户的指令或允许损坏删除用户信息;是否能正确处理非法软件连接用户个人信息管理的情况;删除或修改关键数据时是否有提示或警告;敏感数据是否以明文方式形式显示或直接存储,采用加密算法对密码等敏感数据进行保护;临时文件是否及时删除。
性能测试
性能测试主要评估软件的时间和资源特性,移动应用性能的好坏直接影响其用户体验和未来的发展。对APP进行性能测试主要考虑以下几个方面:
压力测试:在各种边界压力情况下,如手机电池量不足、内存占满、网络中断等,应用能否正确响应;在承受最大并发用户数持续运行的情况下,系统是否运行平稳,业务失败率是否在可接受范围内。
响应时间:安装、卸载的响应时间及应用各功能、业务单独执行时响应时间是否在用户可承受范围之内。
可靠性:在反复或长期执行的情况下,应用的各项功能能否正常运行,系统资源占用是否出现异常。
资源特性:典型情况下评估APP运行时系统资源的使用情况,包括内存占用率、CPU占用率、电池消耗情况、带宽占用率等。
移动应用测试关键技术
自动化测试
所谓自动化测试,是指利用自动化测试工具取代手工方式,进行一系列测试操作,以此来满足软件验证需求。其中,移动应用测试以界面操作为主要测试方式,因此测试脚本的录制和回放就显得尤为重要,需要借助针对于移动应用的自动化测试框架(平台)或工具。目前,比较成熟的有:基于坐标点触屏的Google公司的Monkeyrunner测试工具;基于元素图形对比的Experitest公司的SeeTest测试工具;腾讯Bita云测试平台和性能测试工具GT;云测公司的iTestin测试工具;Robotium自动化测试框架;Google的UIAutomator测试工具;Microsoft公司的UIAutomation;Micro Focus公司的 Silk Test等。测试人员可以根据测试项目的复杂程度以及测试平台的性价比选择适合测试需要的测试框架。
在形成测试脚本之后,需根据测试场景对测试脚本进行编辑,形成最终的测试方案流程。同时,结合适用的测试方案管理工具,将包含所需测试用例的测试脚本统筹规划,形成自动化测试运行计划,并按周期执行测试计划。
对象识别技术
进行移动应用自动化测试,获取并识别应用软件中的对象是自动化测试的第一步,也是自动化测试执行中用于对已识别的对象进行比较的基础。常用的对象识别技术主要有:
基于坐标点的对象识别:通过点击目标应用控件(如按钮、菜单、表单等),记录点击位置的坐标(x,y),形成测试脚本。这种方法可以跨平台应用,但却存在移植性不好的问题,若新的移动设备尺寸和分辨率与录制测试脚本时的设备不一致,就可能存在无法识别的风险。具体办法可通过将静态坐标(x,y)变换为动态坐标(Ax,By),A和B分别为新设备相对于原录制设备在横向和纵向的尺寸或分辨率比例系数。
基于元素图形对比的对象识别:把某界面的某一区域的图像定义为一个元素,通过图片元素定位。具体的实现通过在录制期间截取某个按钮的图片并保存到对象库,运行时通过该图片对象来定位对应的按钮进行测试。这种基于图像元素识别的技术,带来的好处是可以使测试脚本和设备的操作系统无关。
基于控件的对象识别:根据类型或者文本去筛选,找到并获取控件中心点绝对坐标,点击坐标完成测试动作。基于控件对象识别技术使测试脚本具有较好的可移植性。
基于Xpath的对象识别:XPath是一种在XML文档中定位元素的语言,当屏幕点击或选择时,通过记录对象的绝对或者相对Xpath路径,进而实现关于对象的识别。当我们所要定位的元素很难找到合适的方式时,都可以通过这种绝对或者相对路径的方式定位。
移动应用已成为人们日常生活中不可或缺的重要组成部分,其软件质量的好坏直接影响到用户使用量及用户粘度;同时,移动应用软件在各行各业中的应用日益广泛,生活、办公移动化已成趋势,我们必须要认识到移动应用软件对于当今社会的重要性。从目前来看,相比较传统的PC及互联网应用测试,移动应用软件测试仍处于发展阶段,需要更多的测试经验和方法创新,促进移动应用自动化测试、云测试等技术日益成熟演进。