移动 APP 的测试方法,以及移动专项测试的思路与方法
移动端应用可以细分为三大类:Web App、Native App 和 Hybrid App。以下主要介绍这三类移动应用的测试方法,以及移动专项测试的思路与方法。
文章目录
- 三类移动应用的特点
- 三类不同移动应用的测试方法
- 移动应用专项测试的思路和方法
- 交叉事件测试
- 兼容性测试
- 流量测试
- 耗电量测试
- 弱网络测试
- 边界测试
- 总结
三类移动应用的特点
Web App 指的是移动端的 Web 浏览器,和 pc 端的 Web 浏览器无差,只是依附的操作系统不再是 Windows 或 Linux了,而是 IOS 和 Android。Web App 采用的技术主要 HTML5、JavaScript、CSS 等 Web 技术栈,另外,Web App 所访问的页面内容都是放在服务器端的,本质上就是 Web 网页,所以天生就是跨平台的。
Native App 指的是移动端的原生应用,对于 Android 是 apk,对于 IOS 就是 ipa。Native App 是基于手机操作系统,并使用原生程序编写运行的第三方应用程序。
Hybrid App 是介于 Web App 和 Native App 两者之间的一种 App 形式,它利用了 Web App 和 Native App 的优点,通过一个原生实现的 Native Container 展示 HTML5 页面。即在原生移动应用中嵌入了 Webview,然后通过该 Webview 来访问。
Hybrid App 具有维护更新简单,用户体验优异以及较好的跨平台特性,是比较主流的移动应用开发模式。从下图中可简单看出三类移动应用的架构原理。
三类不同移动应用的测试方法
对 Web App 本质就是 Web 浏览器的测试,典型的 GUI 自动化测试的方法和技术,如 数据驱动、页面对象模型、业务流程封装等都适用。如果 Web 页面时基于自适应网页涉及 (即符合 Responsive Web 设计的规范),而且测试框架如果支持 Responsive Page,那么原则上之前开发的运行在 PC Web 端的 GUI 自动化测试用例不做任何修饰旧可以直接在移动端的浏览器上执行,前提时移动浏览器是支持 Web Driver
其中,自适应网页设计(Responsive Web Design)是指,同一个网页能够自动识别屏幕分辨率、并做出相应调整的网页设计技术。
对 Native App 的测试,虽然不同的平台会使用不同的自动化测试方案(比如,iOS 一般采用 XCUITest Driver,而 Android 一般采用 UiAutomator2 或者 Espresso 等),但是数据驱动、页面对象以及业务流程封装的思想依旧适用,也可以把这些方法应用到测试用例设计中。
对 Native Container 的测试,可能需要用到 XCUITest 或者 UiAutomator2 这样的原生测试框架,而对 Container 中 HTML5 的测试,基本和传统的网页测试没什么区别,所以原本基于 GUI 的测试思想和方法都能继续适用。
值得注意的是,Native Container 和 Webview 分别属于两个不同的上下文(Context),Native Container 默认的 Context 为“NATIVE APP",而 Webview 默认的 Context 为“WEBVIEW_+ 被测进程名称”。
移动应用专项测试的思路和方法
移动端的测试除了使用的测试框架不同以外,测试设计本身和 GUI 测试有异曲同工之妙,但还有很多新的内容。对于移动应用,若只关注业务功能测试,那当被大量用户安装和使用时,就会暴露很多问题:
- 流量使用过多
- 耗电量大
- 某些设备中断上无法顺利安装或卸载
- 弱网下无法正常使用
- Android 环境下,经常出现ANR(Application Not Responding) 等
这样的问题还有很多,为了避免或减少此类情况的发生,所以移动应用除了进行常规的功能测试外,通常还会进行很多移动应用所特有的专项测试。
这里主要从交叉事件测试、兼容性测试、流量测试、耗电量测试、弱网络测试、边界测试这 6 个最主要的专项测试来展开。
交叉事件测试
交叉事件测试也叫中断测试,是指 App 执行过程中,有其他事件或者应用中断当前应用执行的测试。
比如,App 在前台运行过程中,突然有电话打进来,或者收到短信,再或者是系统闹钟等等情况。所以,在 App 测试时,就需要把这些常见的中断情况考虑在内,并进行相关的测试。另外,此类测试目前基本还都是采用手工测试的方式,并且都是在真机上进行,不会使用模拟器。
采用手工测试的原因是,此类测试往往场景多,而且很多事件很难通过自动化的方式来模拟,比如呼入电话、接收短信等,这些因素都会造成自动化测试的成本过高,得不偿失,所以工程实践中,交叉事件测试往往全是基于手工的测试。之所以采用真机,是因为很多问题只会在真机上才能重现,采用模拟器测试没有意义。
交叉事件测试,需要覆盖的场景主要包括:
- 多个 App 同时在后台运行,并交替切换至前台是否影响正常功能
- 要求相同系统资源的多个 App 前后台交替切换是否影响正常功能,比如两个 App 都需要播放音乐,那么两者在交替切换的过程中,播放音乐功能是否正常
- App 运行时接听电话、接收信息
- App 运行时提示系统升级
- App 运行时发生系统闹钟事件
- App 运行时进入低电量模式
- App 运行时第三方安全软件弹出告警
- App 运行时发生网络切换,比如,由 Wifi 切换到移动 4G 网络,或者从 4G 网络切换到 3G 网络等
其实这些需要覆盖的场景,也是做测试的测试用例集,每一场景都是一个测试用例的集合。
兼容性测试
即要确保 App 在各种终端设备、各种操作系统版本、各种屏幕分辨率、各种网络环境下,功能的正确性。通常都需要在各种真机上执行相同或者类似的测试用例,所以往往采用自动化测试的手段。 同时,由于需要覆盖大量的真实设备。
可以基于 Appium + Selenium Grid + OpenSTF 去搭建自己的移动设备私有云平台外,也可以使用第三方的移动设备云测平台完成兼容性测试。第三方的移动设备云测平台,国外最知名的是 SauceLab,国内主流的是 Testin
常见的 App 兼容性测试往往需要覆盖以下的测试场景:
- 不同操作系统的兼容性,包括主流的 Android 和 IOS 版本
- 主流的设备分辨率下的兼容性
- 主流移动终端机型的兼容性
- 同一操作系统中不同语言设置时的兼容性
- 不同网络连接下的兼容性,比如 Wifi、GPRS、EDGE(增强型数据速率GSM演进技术)、CDMA200(中国电信 3G 网络模式) 等
- 单一设备上,与主流热门 App 的兼容性,比如微信、淘宝等。
流量测试
由于 App 经常需要在移动互联网环境下运行,而移动互联网通常按照实际使用流量计费,如果 App 耗费的流量过多,那么一定不会很受欢迎。
流量测试,通常包含以下几方面内容:
- App 执行业务操作引起的流量
- App 在后台运行时的流量消耗
- App 安装完成后首次启动消耗流量
- App 安装包本身大小
- App 内购买或升级需要流量
流量测试,往往借助于 Android 和 iOS 自带的工具进行流量统计,也可以利用 tcpdump、Wireshark 和 Fidder 等网络分析工具。
对于 Android 系统,网络流量信息通常存储在 /proc/net/dev 目录下,也可以直接利用 ADB 工具获取实时的流量信息。另外 Android 的轻量级性能监控小工具 Emmagee,类似于 Windows 系统性能监视器,也能够实时显示 App 运行过程中 CPU、内存和流量等信息。
对于 iOS 系统,可以使用 Xcode 自带的性能分析工具集中的 Network Activity,分析具体的流量使用情况。
但是,流量测试除了得到 App 的流量数据,其目的是要想办法减少 App 产生的流量。减少 App 流量消耗的方法:
- 启用数据压缩,尤其是图片
- 使用优化的数据格式,比如同样的信息量的 JSN 文件就比 XML 文件小
- 遇到既要加密又要压缩一定是先压缩再加密
- 减少单次 GUI 操作触发的后台调用数量
- 启动客户端的缓存机制 等
耗电量测试
耗电量是移动应用能否成功的关键因素之一。如果在功能类似的情况下,你的 App 特别耗电、让设备发热比较严重,那么你的用户就会卸载。最典型的就是地图等导航类的应用,对耗电量特别敏感。耗电量测试通常从三个方面考量:
- App 运行但没有执行业务操作时的耗电量
- App 运行且密集执行业务操作时的耗电量
- App 后台运行的耗电量
耗电量检测既有基于硬件的方法,也有基于软件的方法。采用软件的方法,Android 和 iOS 都有各自自己的方法:
- Android 通过 adb 命令“adb shell dumpsys battery”来获取应用的耗电量信息;
- iOS 通过 Apple 的官方工具 Sysdiagnose 来收集耗电量信息,然后,可以进一步通过 Instrument 工具链中的 Energy Diagnostics 进行耗电量分析。
弱网络测试
移动应用的网络环境比较多样,常出现需要在不同网络之间切换的场景,即使是在同一网络环境下,也会出现网络连接状态时好时坏的情况,比如时高时低的延迟、经常丢包、频繁断线,在乘坐地铁、穿越隧道,和地下车库的场景下经常会发生。
所以,移动应用的测试需要保证在复杂网络环境下的质量。具体的做法就是:在测试阶段,模拟这些网络环境,在 App 发布前尽可能多地发现并修复问题。可以采用开源移动网络测试工具:Facebook 的 Augmented Traffic Control(ATC)。
它能够在移动终端设备上通过 Web 界面随时切换不同的网络环境,同时多个移动终端设备可以连接到同一个 Wifi,各自模拟不同的网络环境,相互之间不会有任何影响。也就是说,只要搭建一套 ATC 就能满足你所有的网络模拟需求。
边界测试
边界测试是指,移动 App 在一些临界状态下的行为功能的验证测试,基本思路是需要找出各种潜在的临界场景,并对每一类临界场景做验证和测试。
主要的场景有:
- 系统内存占用大于 90% 的场景
- 系统存储占用大于 95% 的场景
- App 不具有某些系统访问权限的场景,比如 App 由于隐私设置不能访问相册或者通讯录等
- 长时间使用 App,系统资源是否有异常,比如内存泄漏、过多的链接数等
- 出现 ANR 的场景(是指在Android上,应用程序响应不够灵敏时,系统会向用户显示的一个对话框)
- 操作系统时间早于或者晚于标准时间的场景
- 时区切换的场景
总结
移动应用根据技术架构的不同,主要分为 Web App、Native App 和 Hybrid App 三大类,这三类应用的测试方法本质上都属于 GUI 测试的范畴。
从业务功能测试的角度看,移动应用的测试用例设计和传统 PC 端的 GUI 自动化测试策略比较类似,只是测试框架不同,数据驱动、页面对象模型和业务流程封装依旧适用
各种专项测试是移动应用的测试重点,也有别于传统 GUI 测试。专项测试包括:交叉事件测试、兼容性测试、流量测试、耗电量测试、弱网络测试和边界测试
移动 APP 的测试方法,以及移动专项测试的思路与方法相关推荐
- 移动应用专项测试的思路和方法
对于移动应用,顺利完成全部业务功能测试往往是不够的.如果你的关注点只是业务功能测试,那么, 当你的移动应用被大量用户安装和使用时,就会暴露出很多之前完全没有预料到的问题,比如: 流量使用过多: 耗电量 ...
- APP性能测试——基于手机的专项测试
转载自http://bbs.51testing.com/thread-1199231-1-2.html 我之前的APP性能测试是基于服务端的,这里收藏一个基于手机的专项测试. Android篇 性能测 ...
- 【软件测试工程师】App 应用测试方法以及测试思路
分析三种主流的移动 App 类型,并给出和普通web测试不同的地方,给出测试的思路,并给出部分场景组合. 移动端测试还是 PC 端测试,业务测试其实都属于 GUI 测试的范畴,所以基本的测试思路,比如 ...
- App 应用测试方法以及测试思路……
分析三种主流的移动 App 类型,并给出和普通web测试不同的地方,给出测试的思路,并给出部分场景组合. 移动端测试还是 PC 端测试,业务测试其实都属于 GUI 测试的范畴,所以基本的测试思路,比如 ...
- App 应用测试方法以及测试思路
分析三种主流的移动 App 类型,并给出和普通web测试不同的地方,给出测试的思路,并给出部分场景组合. 移动端测试还是 PC 端测试,业务测试其实都属于 GUI 测试的范畴,所以基本的测试思路,比如 ...
- 移动app应用测试方法与测试思路(德鲁)
1 三种移动端产品类型的介绍 2 移动端应用的测试其自身特点,和其他传统测试又有一些独特 3 测试方法和思路. 4 5 移动端应用又可以进一步细分为三大类: 6 Web APP 指的是移动端的Web浏 ...
- 移动应用专项测试思路和方法
在之前的文章简单介绍了移动端应用类型及特点https://blog.csdn.net/dou_being/article/details/119304770,这篇文章主要介绍Web App.Nati ...
- 移动 App 应用测试方法与思路
移动 App 应用测试方法与思路 分析三种主流的移动 App 类型,并给出和普通web测试不同的地方,给出测试的思路,并给出部分场景组合. 附:安卓 App 测试常用 adb命令和 money 命令 ...
- Android 应用开发(28)----APP功耗测试方法
APP功耗测试方法 业界比较难测试的一个测试,比如新旧版本对比不一定能说明问题,所以耗电量测试只能定量测试,作为辅助数据帮助我们测试.功耗测试可以基于硬件测试方法(第三方精密仪器)和基于软件测评方法. ...
- app常见的专项测试以及面试题
1.为什么进行专项测试? 手工测试之后,自动化测试之后,接口测试,性能测试之后,线下环境.预发布环境都没有问题了,测试工作看似完整,但是到了用户生产环境,安装使用过程中还是有很多之前没有预料的问题被反 ...
最新文章
- 2010.10.30 OA 项目组一周工作报告
- 程序员四大焦虑瞬间:拿什么拯救你,我日益后退的发际线?
- WCF(Sender) to MSMQ to WCF(Receiver)
- Oracle用户密码过期和用户被锁解决方法【转】
- 子弹短信体验分析:一个单纯想“快”的IM工具 子弹短信体验分析:锤科情怀缩影,打败微信有点远
- 数据结构之最小生成树
- Spark RDD 复杂算子
- 机器人教练走进驾校_机器人教练走进中通驾校
- 字符串匹配代码C语言,KMP字符串匹配算法C语言实现
- 2018-01-03 烂尾工程: Java实现的汇编语言编译器
- Altium Designer 元件封装库与3D模型大全
- 《陶哲轩实分析》阅读
- 怎么购买虚拟主机合适?
- 迭代算法8——近似迭代法之求定积分
- 面部刮痧:别样的美丽疗法
- 惠普Z820安装win10系统攻略(固态作为系统盘)——思小瓜
- Beanstalkd源码分析—bury和kick命令的实现
- 企业架构TOGAF介绍
- 添加新的iconfont图标的方法(看了就会)
- 将EBAZ4205 ZYNQ 变为 OpenWrt 旁路由
热门文章
- linux phy fixed-link
- 【Linux】Ubuntu使用FlashFXP(FTP客户端)
- 解决 button 的背景图片被拉伸
- 手机怎么识别图片上的文字
- 计算机之父:天才冯·诺依曼的一生!
- 写得太好了,大约《越狱》批评(发布)
- Springboot 中类不能使用@Value注解从yml中加载值
- java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted
- 公众号点击图片变成另一张_朋友圈也能发九宫格图片,再也不犯选择困难症
- AddressBook 相关操作小计