移动端测试面试题¶
移动端测试面试重点包括 Appium 自动化、弱网测试、兼容性覆盖、崩溃分析和性能监控。
移动端测试和 Web 测试有什么区别?¶
主要区别:
1. 设备碎片化
- Web:浏览器种类有限
- 移动端:数千款机型、不同系统版本、分辨率
2. 网络环境
- Web:通常稳定 Wi-Fi
- 移动端:Wi-Fi、4G、5G、弱信号频繁切换
3. 交互方式
- Web:鼠标点击为主
- 移动端:触摸、滑动、长按、多点触控、陀螺仪
4. 权限管理
- Web:浏览器沙箱
- 移动端:系统级权限(相机、定位、存储)
5. 生命周期
- Web:页面切换
- 移动端:前后台切换、系统杀进程、推送唤醒
Appium 的架构是怎样的?¶
Appium 采用 C/S 架构:
客户端(测试脚本)→ Appium Server → 设备
通信流程:
1. 测试脚本发送 HTTP 请求给 Appium Server
2. Appium Server 将命令转发给设备
3. 设备执行操作并返回结果
底层驱动:
- Android:UiAutomator2、Espresso
- iOS:XCUITest
优点:
- 跨平台(Android + iOS)
- 支持多语言(Python、Java、JS)
- 不需要修改被测 App
弱网测试怎么模拟?¶
工具:
1. Charles:Proxy → Throttle Settings
2. Fiddler:Rules → Performance → Simulate Modem Speeds
3. Android 模拟器:设置 → 网络 → 限速
4. iOS 模拟器:Network Link Conditioner
常见弱网场景:
- 2G:56 kbps,延迟 300ms
- 弱 3G:780 kbps,延迟 200ms,10% 丢包
- 电梯/地铁:频繁断连
测试要点:
- 页面加载是否超时
- 请求失败是否有重试机制
- 数据是否有丢失或重复提交
- 弱网恢复后是否自动同步
兼容性测试怎么覆盖?¶
覆盖策略:
1. 确定矩阵
- 操作系统版本(Android 10-14、iOS 15-17)
- 屏幕分辨率(720p、1080p、2K、折叠屏)
- 厂商(华为、小米、OPPO、vivo、三星)
2. 优先级
- 核心功能:全矩阵覆盖
- 次要功能:抽查 Top 5 机型
- 边缘功能:只测最新系统
3. 数据来源
- 看埋点数据,确认用户量最大的机型
- 参考行业报告
4. 工具
- 真机实验室(AWS Device Farm、Firebase Test Lab)
- 云测平台(Testin、WeTest)
App 崩溃怎么分析?¶
Android 崩溃分析:
1. adb logcat 抓日志
2. 搜索 FATAL EXCEPTION、ANR、Crash
3. 看堆栈信息,定位崩溃代码行
4. 用 Android Studio 的 Logcat 过滤
iOS 崩溃分析:
1. Xcode → Window → Devices and Simulators → View Device Logs
2. 用 symbolicatecrash 解析符号表
3. 看崩溃线程的调用栈
常见崩溃原因:
- 空指针(NullPointerException)
- 数组越界
- 内存不足(OOM)
- 主线程阻塞(ANR)
- 第三方 SDK 兼容问题
ANR 是什么?怎么测试?¶
ANR(Application Not Responding)= 应用无响应
Android 中触发条件:
- 主线程阻塞超过 5 秒(输入事件)
- BroadcastReceiver 超过 10 秒
- Service 超过 20 秒
测试方法:
- adb logcat 搜索 ANR
- /data/anr/ 目录下的 traces.txt
- 监控主线程耗时操作
常见原因:
- 主线程做耗时操作(网络请求、大文件读写)
- 死锁
- 数据库操作在主线程
推送通知怎么测试?¶
测试要点:
1. 基本功能
- App 在前台时是否收到推送
- App 在后台时是否收到推送
- App 被杀后是否收到推送
2. 通知展示
- 标题、内容是否正确
- 图标、铃声是否正确
- 点击后是否跳转到正确页面
3. 特殊场景
- 多条推送是否正确展示
- 免打扰模式是否生效
- 权限关闭后是否不推送
- 网络断开后恢复是否补发
手势操作怎么自动化测试?¶
Appium 支持的手势:
- tap:点击
- swipe:滑动
- scroll:滚动
- pinch:缩放
- long_press:长按
- drag_and_drop:拖拽
代码示例(Python):
# 滑动
driver.swipe(start_x, start_y, end_x, end_y, duration)
# 长按
from appium.webdriver.common.touch_action import TouchAction
TouchAction(driver).long_press(el).wait(2000).release().perform()
注意:不同机型触摸响应可能不同,需要适当增加等待时间。
面试评分参考¶
| 维度 | 初级(1-2年) | 中级(3-5年) |
|---|---|---|
| 测试范围 | 知道功能+兼容性+弱网 | 能设计完整的移动端测试策略 |
| 自动化 | 会用 Appium 写基础脚本 | 能搭建框架、处理复杂手势 |
| 崩溃分析 | 能看日志找崩溃原因 | 能分析 ANR、OOM 等深层问题 |
| 性能监控 | 会用 adb 查看内存/CPU | 能监控帧率、内存泄漏、电量消耗 |