返回业务状态流转测试
Main Track / Tutorial 08

移动端 App 测试实战教程

把商城交易放进真实设备环境,验证安装升级、系统中断、权限、网络变化和平台差异下的业务连续性。

9 个章节Android + iOS设备操作 + 日志证据
01

移动端比 Web 多了哪些变量

业务运行在设备与系统中
App 结果由四层共同影响
业务状态订单支付退款
应用状态前台后台与进程
系统能力权限通知相机
设备网络机型系统与链路

先准备设备矩阵

  • 按真实用户占比选择 Android/iOS 主版本与代表机型。
  • 覆盖高低性能、不同屏幕和至少一台真机。
  • 记录 App 版本、构建号、渠道、系统和网络。
  • 高风险支付与退款优先在目标设备组合验证。
模拟器适合快速回归,但不能完全替代真机上的相机、推送、网络切换、性能、厂商系统和生物识别验证。
02

验证安装、升级与卸载

版本变化不能破坏用户数据

应用生命周期场景

场景准备条件关键预期
首次安装新设备、低存储、不同系统版本启动正常,不生成脏数据
覆盖升级旧版本登录态、购物车、待支付订单兼容旧数据,核心状态不丢失
跨版本升级跳过一个或多个历史版本迁移脚本仍能正确执行
卸载重装本地缓存、通知权限、服务端账号本地数据按设计清除,服务端订单保留

升级测试步骤

  1. 安装线上或指定旧版本并登录。
  2. 创建购物车、待支付订单和退款中订单。
  3. 不清数据覆盖安装新版本。
  4. 首次启动检查迁移、权限提示和崩溃。
  5. 核对登录态、购物车与三个订单状态。
  6. 完成一次新下单、模拟支付和退款。

升级用例

  • 当旧版本存在待支付订单时,升级后订单仍可查询且金额不变。
  • 当升级过程中空间不足时,安装失败不破坏原可用版本。
  • 当卸载后重新安装时,本地敏感信息不被错误恢复。
03

测试前后台切换与系统中断

随时会被打断
中断后的恢复判断
交易进行中记录本地状态
系统中断后台、锁屏、来电
应用恢复重新查询服务端
继续或结束按真实状态展示

支付过程中的中断

中断操作检查
切到后台支付中按 Home,等待后恢复不重复支付,能查询最终结果
来电/通知收银台被系统界面覆盖恢复后页面和输入状态合理
锁屏提交订单后立即锁屏解锁后不重复提交且状态更新
进程被杀后台清理 App 后重启从服务端恢复订单真实状态
横竖屏/多窗口关键页面改变窗口形态不丢数据、不重复触发请求
恢复页面时以服务端状态为准。不要仅凭本地“支付中”动画决定成功或失败。
04

覆盖首次、拒绝和再次授权

权限也有状态流转
权限状态流转
未询问解释使用目的
已允许使用最小权限
已拒绝提供替代路径
永久拒绝引导系统设置

相机扫码退款凭证

  • 当首次扫码时,先解释用途再请求相机权限。
  • 当用户拒绝相机权限时,功能给出替代上传方式。
  • 当用户永久拒绝时,引导到系统设置但不死循环弹窗。
  • 当授权后又在设置中关闭时,再次扫码能识别变化。
  • 当照片包含个人信息时,只申请必要访问范围并按规则清理。
不要把“用户拒绝权限”当异常崩溃场景。核心交易若不依赖该权限,应当仍可继续完成。
05

在弱网、断网和网络切换中验证

慢、丢、断、切
网络异常要覆盖不同注入时点
发送前断网请求未发出
发送后丢包结果未知
响应慢超时与等待
恢复网络查询与幂等重试

交易弱网用例

条件当……时,……关键证据
提交前断网当无网络提交订单时,页面提示可恢复且不生成订单请求未到达或明确失败
响应前断网当订单请求已受理但响应丢失时,重试不会创建第二单幂等键与最终订单数
支付中切网当 Wi-Fi 切到蜂窝网络时,App 查询支付最终结果支付单与订单一致
高延迟当退款响应变慢时,按钮保持防重且允许离开后查询单一退款单与超时策略

执行原则

  1. 准备可清理的测试订单并记录初始状态。
  2. 设置延迟、丢包、断网或网络切换条件。
  3. 在请求前、发送后、响应前分别注入变化。
  4. 恢复网络后查询服务端最终状态。
  5. 核对重复请求、提示、重试、数据和日志。
06

测试推送、深链与扫码

从系统入口回到正确业务
外部入口进入业务页面
推送/深链/扫码携带定位信息
App 唤起解析安全参数
身份校验登录与数据权限
业务查询展示最新状态

外部入口测试

能力测试点商城预期
推送前台、后台、进程关闭、权限关闭退款进度通知准确,点击进入对应退款单
深链已登录、未登录、链接过期、参数篡改登录后回到授权订单,不泄露他人信息
扫码正常、模糊、无效、重复、相册导入识别安全,错误可恢复,不重复领券
支付回跳成功、取消、App 被杀、重复回跳始终查询服务端结果,不仅信任回跳参数
推送文本和深链参数都不应被视为可信业务事实。打开页面后重新鉴权并查询最新订单或退款状态。
07

处理 Android 与 iOS 差异

同一目标,不同系统行为

平台差异清单

方向AndroidiOS
返回行为系统返回键、手势返回、Activity 栈导航返回手势、视图栈
权限版本与厂商差异较多权限文案和系统策略更统一
后台厂商省电可能杀进程系统后台时间限制严格
推送厂商通道与系统通知设置APNs、专注模式和通知摘要
安装APK/AAB、签名与渠道包TestFlight/企业签名与描述文件

平台用例

  • 当 Android 用户按系统返回键离开支付页时,二次确认且不取消已受理支付。
  • 当 iOS 用户侧滑返回时,页面行为与导航按钮一致。
  • 当系统通知权限关闭时,退款进度仍可在 App 内查询。
  • 当低内存导致进程回收时,重启后从服务端恢复交易状态。
08

使用 ADB 与设备日志定位问题

让现象有时间线
移动端问题证据链
屏幕现象录屏与时间
设备日志Crash / ANR
网络请求request_id
服务与数据订单最终状态
Android 常用只读排查命令
adb devices
adb shell getprop ro.build.version.release
adb shell dumpsys package com.example.mall
adb logcat -c
adb logcat -v time | findstr /i "order payment refund crash"
adb shell dumpsys activity activities

定位“支付后 App 无响应”

  1. 记录设备、系统、App 版本和发生时间。
  2. 复现前清空日志,避免旧信息干扰。
  3. 同时记录订单号、request_id 和屏幕录制。
  4. 检查崩溃、ANR、网络异常和 Activity 切换。
  5. 把客户端时间线与接口、服务日志和业务数据对齐。
  6. 分享前删除令牌、账号和个人信息。
ADB 适用于已授权的测试设备。iOS 使用 Xcode Devices and Simulators 或 Console 收集对应设备日志,分析思路仍是“时间 + 业务 ID + 状态”。
09

完成一次移动商城实战

真机验证与证据闭环

练习

  1. 选择 Android 与 iOS 各一台代表设备并记录环境。
  2. 准备旧版本中的登录态、购物车和三种订单状态后升级。
  3. 在支付中执行后台、锁屏、切网和杀进程。
  4. 验证相机权限首次允许、拒绝和设置中关闭。
  5. 验证退款推送和订单深链在登录前后的行为。
  6. 收集一次失败的设备日志并关联请求和订单数据。
  7. 按“当……时,……”写 12 条用例并给出结果。

设备与版本

  • 矩阵有依据
  • 升级数据保留
  • 卸载行为明确
  • 平台差异已覆盖

环境变化

  • 前后台已覆盖
  • 权限状态已覆盖
  • 弱网断网已覆盖
  • 进程恢复已覆盖

业务证据

  • 请求可追踪
  • 状态以服务端为准
  • 数据没有重复
  • 日志已经脱敏