一、APP 测试流程
APP 测试流程与 Web 测试流程相似,具体分为以下七个阶段:
- 编写测试计划:依据需求说明书,全面规划测试工作,明确测试目标、范围、策略等关键要素。
- 制定测试方案:合理分配测试任务、确定测试人员安排以及规划测试时间进度,确保测试工作有序推进。
- 测试准备工作:搭建与实际使用场景相符的测试环境,精心准备各类测试数据,并根据测试需求确定合适的测试方法。
- 设计与编写测试用例:详细设计并编写全面的测试用例,随后组织相关人员进行用例评审,根据评审意见补充完善测试用例,确保其完整性和有效性。
- 执行测试:首先进行冒烟测试,快速验证 APP 的基本功能是否可用。接着对主功能流程展开全面测试,包括客户端的各个功能模块以及功能之间的业务逻辑交互。在测试过程中,根据缺陷修复情况适时进行回归测试,确保问题得到彻底解决且未引入新的问题。
- 提交测试结果:整理并提交详细的测试结果,其中应包含测试用例、测试计划以及测试过程中发现的缺陷报告等相关文档,为项目决策提供有力依据。
- 日常维护性测试:在 APP 上线后,持续关注其运行状况,定期进行维护性测试,及时发现并解决可能出现的问题,保障 APP 的稳定运行。
APP 测试周期通常依据项目的开发周期来确定,一般为两到三周,具体时长可根据项目实际情况以及版本质量进行适当调整。
二、APP 测试通用测试用例
(一)功能测试
测试项 | 测试点 |
---|---|
注册 | 略 |
登录 | 1. 输入错误的登录用户名和密码,检查界面是否有清晰的提示信息。 2. 用户主动退出登录后,再次启动 APP,确认是否进入登录界面。 3. 更改密码后,验证登录时是否能对新密码进行有效校验。 4. 检查未登录状态下,对部分受限页面的操作是否得到有效控制。 5. 切换账号登录,核实登录信息是否及时更新。 6. 对于限制一个账号仅能在一台设备登录的软件,测试当账号在多个手机登录时,原用户是否被踢下线,并是否有相应提示。 7. 模拟用户登录状态保持过长时间,检查 Session 过期时,是否出现“虽显示登录状态,但系统提示用户未登录”的情况。 |
注销 | 略 |
上传 | 1. 确认上传文件是否存在格式、大小限制,以及上传时间是否符合预期。 2. 在未上传资料时点击上传按钮,检查是否有相应提示。 3. 点击提交后,验证文件是否上传成功,且能否正常浏览。 4. 上传文件后刷新页面,查看系统对文件的处理是否正常。 5. 上传文件后多次进行回退、前进操作,检查 APP 是否能正常响应。 6. 验证图片是否支持主流格式,如 jpeg、jpg、gif、png、bmp 等。 7. 确认音频文件是否支持主流格式,如 mp3、wav 等。 8. 检查视频文件是否支持主流格式,如 mp4、wmv、avi、mov、flv、swf 等。 9. 核实文档文件是否支持主流格式,如 doc、docx、xlsx、xls、excel 等。 10. 确认压缩包文件是否支持主流格式,如 zip、rar、tar、gz、7z 等。 11. 测试是否支持单个文件上传以及批量上传功能。 12. 在上传过程中模拟网络中断,检查 APP 是否能进行正常处理。 13. 文件上传结束后,查看是否有提示信息,并是否能回到原界面。 |
下载 | 1. 检查下载文件是否存在大小和格式要求。 2. 执行导出全部数据操作,验证数据的准确性。 3. 尝试导出大量数据,观察界面或程序是否会崩溃,以及导出时间是否合理。 4. 在下载时同时进行其他操作,检查是否会导致文件损坏。 |
添加 | 1. 输入必填项后点击添加按钮,检查记录是否成功添加。 2. 不填写必填项直接点击添加按钮,查看是否有相应提示。 3. 在内容项中输入空格后点击添加按钮,验证记录能否添加成功。 4. 仅填写必填项后点击添加按钮,确认记录能否添加成功。 5. 重复提交相同记录,检查系统是否有相应提示。 6. 在内容项中输入系统不允许出现的字符后点击添加按钮,查看系统是否有相应提示。 7. 在内容项中输入 html、js 脚本后点击添加按钮,检查记录能否添加成功。 8. 确认新添加的记录是否排列在首行。 |
删除 | 1. 选择任意一条记录进行删除操作,检查能否删除成功。 2. 选择不连续的多条记录,执行批量删除操作,验证能否删除成功。 3. 选择连续的多条记录,进行批量删除,确认能否删除成功。 4. 删除操作时,检查系统是否有确认删除的提示。 |
查询 | 1. 确认默认是否显示全部内容。 2. 使用单个查询条件进行查询,检查系统能否查询出相关记录。 3. 采用多个查询条件进行组合查询,验证系统能否准确查询出相关记录。 4. 测试系统是否支持模糊查询功能。 5. 将查询条件全部设置为空,查看系统能否查询出相关记录。 6. 查询后,检查文本框中内容是否保存上一次查询的条件。 7. 查询大量数据时,观察按钮响应是否及时。 |
安装 | 1. 软件安装完成后,验证是否可以正常运行。 2. 检查安装过程中是否支持取消操作。 3. 当安装空间不足时,查看是否有相应提示。 4. 确认安装时是否提供选择安装到本地还是 SD 卡的路径。 5. 测试是否支持通过第三方工具进行安装。 6. 检查是否支持从不同的应用市场下载安装,以及是否可以重复安装。 |
卸载 | 1. 验证是否可以通过桌面或软件安装包进行卸载操作。 2. 检查卸载过程中是否支持取消操作,单击取消后,确认软件是否能正常运行。 3. 卸载文件后,查看是否删除所有相关的安装文件夹。 |
升级 | 1. 当客户端有新版本时,确认是否有更新提示。 2. 对于非强制升级版,检查用户是否可以取消更新,且老版本能否正常使用。同时,确认用户下次启动 App 时,是否仍出现更新提示。 3. 对于强制升级版,在给出强制更新提示后,若用户未更新而退出客户端,下次启动 App 时,检查是否仍出现强制升级提示。 4. 测试在线跨版本升级后,APP 是否能正常使用。 5. 确认升级后数据是否保持不变,如登录状态、设置的信息、加载的资源等。 |
重启 | 1. 检查应用程序在本地客户端是否缓存一部分数据以供下次调用,对于支持离线浏览的程序,验证离线状态下能否正常浏览本地数据。 2. 在离线时刷新获取新数据,若无法获取,确认是否能给出友好提示。 3. 对于不提供离线查看界面数据的系统,检查是否有相应提示,且界面更新后无任何数据。 4. 离线后,退出 APP 再重新开启,验证是否能正常浏览。 5. 离线后,切换到后台再回到 APP,确认是否可以正常浏览。 6. 离线后,锁屏再解锁回到应用前台,检查是否可以正常浏览。 |
推送 | 略 |
交互 | 略 |
网络 | 略 |
(二)其他测试
测试项 | 测试点 |
---|---|
权限 | 1. 检查 APP 在发送短信、拨打电话、连接网络等操作时,若无网络,是否有提醒。 2. 确认是否允许 APP 访问相册、拍照、录音、定位等权限,并检查权限申请与使用流程是否合规。 |
交叉测试 | 1. 检查 APP 在操作的过程中其他的APP同时被唤起的时候怎么处理 2.来回切换不同的APP是否能正常唤起该APP 。 3.权限冲突,APP调用和其他APP同一个权限时候怎么处理,是否冲突 |
UI | 1. 依据 UI 设计原型图,检查页面布局是否符合用户使用习惯。 2. 查看是否恰当利用窗体和控件的空白区域以及分割线条,以提升界面美观度和易用性。 3. 测试窗口切换、移动、改变大小时,界面显示是否正常。 4. 刷新页面后,确认页面显示是否正常。 5. 检查 APP 在不同浏览器下渲染出来的页面显示是否正常(若 APP 支持浏览器访问)。 6. 验证在不同分辨率下,页面布局显示是否正常。 7. 对于无权限操作,检查按钮是否置灰或不显示,无法输入的输入框是否设置为 disable 状态。 8. 确认页面无错别字,提示性文字措辞是否恰当、准确。 9. 检查页面显示是否无乱码。 10. 对于必填的控件,确认是否有必填提醒,如使用 * 标识。 11. 检查控件(如菜单、对话框、按钮、单选框、复选框等)的布局、风格是否正确,界面是否美观,操作是否友好。 |
(三)兼容性测试
测试项 | 测试点 |
---|---|
平台兼容 | 验证应用是否可在 Android 和 iOS 两个主流平台上正常运行。 |
系统版本兼容 | 1. 检查是否兼容不同的 Android 版本,如 4.1.1、4.2.1 等;以及不同的 iOS 版本,如 8.3、9.1、10、11、12 等。 2. 确认能否适配各种屏幕尺寸,如 Android 系列的 4.X、5.X 等,iOS 系列的 4 英寸、4.8 英寸、5.5 英寸等。 |
分辨率适配 | 在不同分辨率下,确保界面图标、文字大小显示合理,主流分辨率下图标展示完整,文字不被遮挡。 |
设备兼容 | 选取市面上主流的 Android 手机,如小米、华为、vivo、OPPO 等;以及 iOS 系统手机,如 iPhone 6、6s、6 Plus、7、8、X、XR 等进行测试,检查 APP 在这些设备上的兼容性。 |
(四)专项测试
测试项 | 测试点 |
---|---|
CPU | 略 |
内存 | 略 |
流量 | 略 |
耗电量 | 略 |
发热量 | 略 |
FPS | 略 |
GPU | 略 |
三、APP 测试常见面试问题
(一)APP 的测试资源准备有哪些?
- 准备主流的 iOS 设备和 Android 设备,涵盖不同品牌、型号及屏幕尺寸,以满足兼容性测试需求。
- 对于涉及支付宝/银联支付的项目,提前申请支付宝/银联账户,并准备相关测试数据。
- 若项目中有秒杀专题,需合理规划秒杀时间表,用于测试秒杀功能的准确性和稳定性。
- 针对有优惠券使用的项目,预先添加各类优惠券数据,以全面测试优惠券的领取、使用等功能。
(二)APP 测试的稳定性如何测试?
稳定性测试通常在软件产品基本功能无缺陷后开展。一般使软件系统处于持续运行模式,模拟正常情况与临界情况进行测试,观察系统是否出现异常。常使用 Monkey 工具,向系统发送随机事件流,如按键输入、触摸屏输入、手势输入等,以此实现对软件的稳定性测试。
(三)APP 测试与 Web 测试的区别?
从功能测试层面看,APP 测试与 Web 测试在流程和功能测试方法上有相似之处,但在以下方面存在差异:
- 系统结构
- Web 项目:基于 B/S 架构,依托浏览器运行。只要更新服务器端,客户端便会同步更新。
- APP 项目:属于 C/S 结构,必须配备客户端。若修改服务端,客户端所有核心版本均需进行回归测试。
- 性能监测
- Web 项目:重点监测响应时间、CPU 使用率、内存占用等指标。
- APP 项目:除上述指标外,还需关注流量消耗、电量消耗等移动设备特有的性能指标。
- 兼容性
- Web 项目:主要考虑不同浏览器(如 Firefox、Chrome、IE 等)以及操作系统(如 Windows 7、Windows 10、Linux 等)的兼容性。
- APP 项目:需兼顾多种设备系统,如 iOS(iPad、iPhone)、Android(三星、华为、联想等)、Windows(Win7、Win8)、OSX(Mac),同时要考虑不同手机型号、分辨率、屏幕尺寸带来的兼容性问题。
- 专项测试
- APP 特有:包括干扰测试(如中断、来电、短信、关机、重启等);弱网络测试(模拟 2G、3G、4G、Wi-Fi 网络状态及丢包情况)与网络切换测试(网络断开后重连、3G 与 4G/Wi-Fi 切换等);安装、更新、卸载及相关中断、前后台切换测试;界面操作测试(如手势、横竖屏切换、多点触控、前后台切换);安全测试(安装包反编译、签名、权限设置等);边界测试(可用存储空间少、无 SD 卡/双 SD 卡、飞行模式、系统时间有误、第三方依赖登录等);权限测试(设置 APP 对通讯录、相册、照相机等权限的获取)。
- 测试工具
- 自动化工具:APP 自动化测试常用 Appium,Web 自动化测试一般使用 Selenium。
- 性能测试工具:APP 性能测试常用 Monkey、JMeter,Web 性能测试常用 LR、JMeter。
(四)你知道哪些 APP 云测平台?
常见的 APP 云测平台有百度云测、Testin 云测、众测平台等。这些平台提供了丰富的设备资源和测试服务,可帮助测试人员高效地进行 APP 测试。
(五)App 测试中 iOS 和 Android 有哪些区别呢?
- 操作方式:Android 长按 home 键可呼出应用列表并切换应用,右滑则终止应用;而 iOS 的操作方式有所不同,例如通过上滑屏幕底部调出应用切换界面。
- 分辨率测试:Android 端设备分辨率种类繁多,约 20 多种,而 iOS 设备分辨率相对较少。
- 操作系统特性:Android 操作系统版本多样,iOS 版本相对较少且只能单向升级,无法降级。新的 iOS 系统资源库与低版本系统应用可能不完全兼容,若低版本 iOS 系统应用调用新资源库,可能直接导致闪退。
- 操作习惯差异:在 Android 测试中,需关注 Back 键是否被重写,点击 Back 键后的反馈是否正确;同时测试应用数据从内存移动到 SD 卡后能否正常运行。iOS 则需重点关注与自身系统交互习惯相关的操作。
- Push 测试:在 Android 中,点击 home 键使程序后台运行时接收 push,点击后唤醒应用,需检查是否能正确跳转;在 iOS 中,需关注点击 home 键关闭程序和屏幕锁屏情况下 push 消息红点的显示以及点击后的响应情况。
- 安装卸载测试:Android 的下载、安装平台、工具和渠道较为丰富多样;iOS 主要通过 App Store、iTunes 和 TestFlight 进行下载安装。
- 升级测试:APP 可升级的必要条件包括:新旧版本具有相同的签名、相同的包名以及用于区分版本的标识符(如版本号)。在升级测试中,需针对不同系统特性进行针对性测试。
(六)APP 出现 ANR,是什么原因导致的?
APP 出现 ANR(Application Not Responding),主要原因可归结为以下两类:
- 主线程耗时操作:主线程执行了诸如数据库操作、网络编程等耗时任务,导致主线程阻塞,无法及时响应用户操作。
- CPU 资源竞争:其他进程占用过多 CPU 资源,致使本进程无法获取足够的 CPU 时间片,例如其他进程频繁的读写操作可能引发此类问题。
细分而言,导致 ANR 的原因如下:
- 耗时的网络访问,如长时间等待网络响应。
- 大量的数据读写操作,占用过多系统资源。
- 复杂的数据库操作,导致数据库锁等待或查询时间过长。
- 硬件操作,如调用 camera 等硬件设备时出现阻塞。
- 调用 thread 的 join()方法、sleep()方法、wait()方法,或者在等待线程锁时,导致主线程等待时间过长。
- service binder 的数量达到上限,影响系统通信。
- system server 中发生 Watch