移动端测试岗位高频面试题及解析
文章目录
- 一、基础概念
- 二、自动化测试
- 三、性能测试
- 四、专项测试
- 五、安全与稳定性
- 六、高级场景
- 七、实战难题
- 八、其他面题
一、基础概念
-
移动端测试与Web测试的核心区别?
解析:网络波动(弱网测试)、设备碎片化(机型适配)、中断事件(来电/切后台)、手势操作(滑动/长按)、传感器(GPS/陀螺仪)。
本质:移动端需模拟真实用户环境。 -
如何测试APP的兼容性?
解析:三阶策略——① 云测试平台(如Firebase/Testin)覆盖主流机型;② 重点测试OS大版本(iOS 15+/Android 12+);③ 特殊分辨率(折叠屏/刘海屏)。 -
Monkey测试的目的是什么?
解析:用随机事件(点击/滑动)暴力压测,暴露崩溃/ANR(Application Not Responding)问题。注意:需设事件间隔和黑白名单。
二、自动化测试
-
Appium原理?为何能跨平台?
解析:通过 WebDriver协议 转发命令:iOS→XCUITest,Android→UIAutomator2。跨平台关键:一套脚本兼容双端(需定位策略一致)。 -
移动端自动化元素定位最佳实践?
解析:优先级:accessibilityId > XPath > 坐标。避免绝对XPath(易失效),用相对路径或组合定位(如//Button[@text='登录']
)。 -
如何解决自动化测试中的动态元素问题?
解析:① 显式等待(WebDriverWait);② 正则匹配(如id^="btn_"
);③ 通过父元素定位子元素。
三、性能测试
-
APP启动时间如何测量?优化点?
解析:- 测量:
adb shell am start -W packagename
(冷启动/热启动) - 优化:减少主线程耗时、延迟加载非必要资源、启动图缓存。
- 测量:
-
内存泄漏常见场景?检测工具?
解析:- 场景:静态Context引用、未注销监听器、Handler延迟消息。
- 工具:Android Profiler / Xcode Instruments → Leaks检测。
四、专项测试
-
弱网测试模拟方案?
解析:- 工具:Charles限速(Throttling)、Network Link Conditioner(iOS)、硬件设备模拟丢包。
- 关键指标:请求超时率、数据重传率、UI响应延迟。
-
如何测试APP的耗电量?
解析:- Android:
adb shell dumpsys batterystats
; - iOS:Xcode → Energy Log;
- 关注:CPU唤醒锁(WakeLock)、高频网络请求。
- Android:
五、安全与稳定性
-
如何防止APK反编译?
解析:代码混淆(ProGuard)、加固(360加固宝)、敏感数据加密存储(Keystore/Keychain)。 -
Crash率突然飙升,如何定位?
解析:
① 查看崩溃堆栈(Firebase/Bugly);
② 关联版本变更(新代码/依赖库);
③ 复现路径(用户操作序列)。
六、高级场景
-
小程序/H5混合应用测试重点?
解析:- Bridge通信:Native与H5数据交互;
- 容器兼容性:微信/支付宝SDK差异;
- 缓存机制:离线资源加载。
-
自动化测试框架如何选型?
解析:场景 推荐方案 纯原生APP Espresso (Android) / XCTest (iOS) 跨平台 Appium + WebDriverIO 高性能需求 Maestro(无代码方案)
七、实战难题
-
“无法复现”的偶现崩溃如何处理?
解析:三步走——
① 抓取设备日志(adb logcat / Console.app);
② 关键线程状态(主线程阻塞?);
③ 注入监控代码(如卡顿检测函数)。 -
UI自动化测试跑得慢,如何优化?
解析:- 并行化:Selenium Grid分发多设备;
- 跳过动画:
adb shell settings put global window_animation_scale 0
; - 用例分层:核心功能优先。
八、其他面题
- Push消息测试要点
解析:
- 场景覆盖:APP在前台/后台/杀死状态能否收到推送
- 点击跳转:点击后是否跳转正确页面(如活动页/消息中心)
- 多设备互斥:A设备登录后B设备推送自动失效
- H5页面白屏排查步骤
解析:
- 查网络:JS/CSS资源是否加载失败(Chrome DevTools)
- 查缓存:强缓存导致资源未更新(清理LocalStorage)
- 查容器:WebView内核兼容性问题(特别是低端Android)
- 查接口:首屏数据接口超时/报错
- ROOT/越狱设备测试必要性
解析:
- 安全测试必测:防止敏感数据被恶意读取(如银行APP)
- 绕过权限机制:验证APP在非法环境下的防御能力(如拒绝运行)
-
接口Mock方案
解析:
| 工具 | 核心能力 |
|---------------|--------------------------|
| Charles | Map Local(本地替换接口) |
| WireMock | 动态构造响应(支持REST) |
| Fiddler | AutoResponder(模拟异常) | -
自动化测试报告包含要素
解析:
- 三要素:用例通过率 + 失败截图/视频 + 性能数据(内存/CPU)
- 高阶:失败日志链接 + 缺陷自动提单(如集成Jira)
- Android权限测试特殊点
解析:
- 动态权限弹窗:自动化需处理弹窗(如Appium的
autoGrantPermissions
参数) - 后台权限:定位/存储权限在后台时的行为(如Android 10+限制后台定位)
23 .iOS证书导致安装失败场景
解析:
- 设备未注册:UDID未添加到开发者证书
- 证书过期:开发证书(.p12)或描述文件(.mobileprovision)失效
- 签名冲突:企业证书与App Store证书混用
- ANR发生条件
解析:
- 主线程阻塞:
- 5秒内无响应(Activity生命周期)
- 10秒内无响应(BroadcastReceiver)
- Monkey脚本定制
解析:
adb shell monkey -p com.app.example \ --throttle 300 \ # 事件间隔300ms --pct-touch 40 \ # 触摸事件占40% -s 123 \ # 随机种子 --ignore-crashes \ # 忽略崩溃继续执行 1000 # 事件次数
- 自动化测试中OCR的应用
解析:
- 验证码处理:Tesseract OCR识别图片验证码(仅测试环境)
- 复杂UI断言:识别截图中的文字(如Toast提示/游戏分数)
- 多语言测试陷阱
解析:
- 布局错乱:德语长单词撑破控件 / 阿拉伯语右对齐(RTL)
- 特殊字符:俄语/日语换行截断
- 本地化缺失:未翻译内容显示为KEY(如
btn_login
)
- 测试左移实践
解析:
- 开发阶段介入:
- 代码提测前要求单元测试覆盖率达80%
- 静态扫描(SonarQube)阻塞严重BUG合入
- 接口自动化与开发联调同步进行
- 云测试平台选型考量
解析:
- 真机占比:是否含老旧机型(如Android 4.4)
- 调试能力:能否获取ADB日志/性能数据
- 成本:按设备时长收费 vs 按用例数收费
- 测试完成标准?
解析:
- 质量红线:
- 致命BUG清零(Crash率 < 0.1%)
- 核心用例100%通过(登录/支付等)
- 业务指标:
- 关键路径转化率达标(如购物车下单率)