业务测试面试题 - App测试
1. APP测试与Web测试的主要区别是什么?
答:主要区别在于技术架构、测试重点和测试环境。
技术架构:APP属于C/S架构,需要安装客户端;Web属于B/S架构,通过浏览器访问。
测试重点:
- APP:安装、卸载、升级、中断测试(来电、消息)、手势操作、网络切换(2G/3G/4G/5G/Wi-Fi)、设备兼容性(分辨率、厂商OS定制)、功耗(电量、流量、CPU占用)。
- Web:浏览器兼容性(不同内核)、页面加载性能、缓存。
测试环境:APP测试需要大量真机或模拟器;Web测试环境相对统一。
2. 描述一下APP的测试流程。
答:遵循敏捷迭代流程,每个版本循环如下:
- 需求分析:参与评审,理解PRD,编写测试点(Checklist)。
- 测试计划:确定测试范围、策略、资源(设备池)、进度、风险。
- 测试设计:设计测试用例(功能、兼容、性能等),编写自动化脚本。
- 测试执行:
- 提测验证:开发提测后,先进行冒烟测试,通过后方可进入详细测试。
- 详细测试:执行测试用例,提交Bug并跟踪回归。
- 回归测试:Bug修复后,进行验证并执行关联用例。
- 验收测试:产品经理或业务方进行最终确认。
- 上线与线上监控:配合上线,监控线上日志、崩溃率、用户反馈。
3. 什么是冒烟测试?针对一个APP新版本,你的冒烟测试用例会包含哪些?
答:冒烟测试是对软件核心功能进行初步验证,确保主要流程畅通,Build可测。
- APP冒烟用例:
- APP能够成功安装/覆盖安装。
- APP能够正常启动,无崩溃(Crash)。
- 用户能成功登录/登出。
- 核心业务流程畅通(如电商APP:首页加载 -> 搜索商品 -> 加入购物车 -> 下单)。
- 主要Tab页切换正常。
- 网络切换后,APP数据能正常加载和刷新。
4. 如何制定APP的兼容性测试策略?
答:采用"主流机型全覆盖,长尾机型抽样"的策略。
- 操作系统:覆盖主流iOS和Android版本(如iOS 15-17,Android 11-13)。
- 设备厂商:覆盖主流品牌(华为、小米、OPPO、vivo、三星、荣耀)及原生Android(如Pixel)。
- 屏幕分辨率:覆盖主流分辨率(如全面屏、刘海屏、折叠屏)。
- 网络运营商:移动、联通、电信。
- 优先级:优先覆盖用户量最大的Top 20机型,其余利用云测平台进行覆盖。
5. APP的灰度发布(Gray Release)是什么?测试如何配合?
答:灰度发布是指先让一部分用户(如5%)使用新版本,逐步扩大范围,平滑过渡的上线方式。
- 测试配合:
- 准备阶段:确保灰度包是经过全面测试的稳定版本。
- 发布阶段:密切监控灰度用户的崩溃率(Crash Rate)、异常退出率、关键业务指标(如下单成功率)。
- 问题响应:一旦发现严重问题,立即上报,推动回滚(Rollback)或发布热修复(Hotfix)。
- 扩大范围:确认无问题后,逐步扩大灰度用户比例,直至全量。
6. 什么是Monkey测试?它在APP测试中有什么作用?
答:Monkey测试是向APP发送随机的用户事件流(如触摸、手势、按键),用来压力测试APP的稳定性和健壮性。
- 作用:
- 发现隐藏的Crash/ANR:通过随机操作发现一些极端情况下才会出现的崩溃。
- 压力测试:检验APP在长时间、高频率操作下的性能表现(内存泄漏等)。
- 快速验证:在测试初期快速验证版本的稳定性。
7. 如何查看和分析Android设备的日志?
答:使用Android SDK提供的 adb logcat 命令。
- 查看全部日志:adb logcat
- 过滤特定Tag/级别:adb logcat -s "TAG名:I" 或 adb logcat *:E (只看Error日志)
- 将日志输出到文件:adb logcat > log.txt
- 分析:在日志中搜索关键词如 Exception, Fatal, Crash, ANR 来定位问题。
8. 什么是ANR?导致ANR的原因有哪些?
答:ANR(Application Not Responding)是指应用程序无响应。
- 原因:
- 主线程被阻塞:在主线程中执行了耗时操作(如网络请求、大量数据库读写、复杂计算)。
- 死锁(Deadlock):线程间相互等待资源。
- BroadcastReceiver超时:在onReceive()方法中执行了过多操作。
- Service处理超时。
9. 什么是Crash?如何收集和分析Crash信息?
答:Crash是指应用程序发生了未捕获的异常而导致的意外终止。
- 收集:集成第三方SDK,如 Firebase Crashlytics、Bugly、Sentry。它们能自动捕获崩溃堆栈信息、设备信息、操作系统版本等,并上报到平台。
- 分析:在Crash管理平台查看堆栈跟踪(Stack Trace),定位到出错的代码行、方法和线程,结合日志分析原因。
10. 如何测试APP的安装、卸载和升级?
答:
安装:
- 全新安装(首次安装)。
- 覆盖安装(旧版本覆盖)。
- 较低版本覆盖更高版本(应失败)。
- 安装中断(如断电、拔数据线)。
卸载:
- 卸载后,文件、缓存、数据库是否全部清除。
- 卸载中断。
升级:
- 跨版本升级(如v1.0 -> v3.0)。
- 相邻版本升级(v1.0 -> v1.1)。
- 升级后,用户数据、配置、状态是否保留正确。
- 升级中断后的恢复情况。
11. 如何测试APP的中断事件?
答:在APP不同操作场景下,模拟:
- 来电/短信中断:检查中断后APP能否正常暂停和恢复。
- 通知中心消息:下拉通知栏点击消息,APP能否正确跳转。
- 锁屏/解锁:锁屏后恢复,APP状态是否保持。
- 低电量提醒/关机。
- 插拔USB数据线、耳机。
- 切换网络(Wi-Fi 移动数据):检查网络切换时数据是否重连、是否有提示、是否会Crash。
- 前后台切换:按Home键切到后台,再重新打开。
12. APP的性能测试主要关注哪些指标?
答:
客户端性能:
- 启动时间:冷启动、热启动时间。
- CPU占用率:在关键操作下,CPU占用不应过高。
- 内存占用:检查是否存在内存泄漏(内存使用量持续增长不释放)。
- 流量消耗:统计特定场景下的上行/下行流量。
- 电量消耗:APP对电池电量的影响。
- 帧率(FPS):页面滑动、动画是否流畅(通常应≥55fps)。
服务器端性能:通过API压测,关注响应时间、吞吐量、错误率。
13. 如何测试APP的耗电量?
答:
硬件工具:使用专业功耗仪,数据最准确。
软件工具:
- iOS:使用Xcode的Energy Organizer。
- Android:使用Battery Historian(需要Android 5.0+)分析 adb bugreport 文件,查看各组件的耗电详情。
测试场景:在待机、轻度使用(浏览)、重度使用(看视频、玩游戏)等场景下进行测试。
14. 如何测试APP的流量消耗?
答:
- Android:使用 adb shell dumpsys package | grep Uid 查看UID,然后通过 adb shell cat /proc/uid_stat//tcp_rcv 和 tcp_snd 查看接收和发送的流量字节数。或使用网络抓包工具(如Charles)统计。
- iOS:使用Xcode的Network工具监控流量。
- 第三方工具:如腾讯GT、iTest等。
- 测试点:关注应用在静止后台、频繁操作、大图加载、视频播放、断线重连等场景下的流量使用是否合理,是否有冗余请求、数据包过大等问题。
15. 如何测试APP的启动时间?
答:
冷启动(Cold Launch):进程不存在,从头启动APP。时间最长。
热启动(Warm Launch):APP还在后台,将其唤醒到前台。时间较短。
测量方法:
- adb命令(Android):adb shell am start -W -n package_name/activity_name 查看 TotalTime。
- 代码埋点:在Application的onCreate()开始和第一个Activity的onWindowFocusChanged()时记录时间差。
- 工具:使用Android Studio Profiler或Xcode Instruments的Time Profiler进行更精确的分析。
16. 如何测试APP在不同网络环境下的表现?
答:模拟各种网络场景:
网络制式:2G、3G、4G、5G、Wi-Fi。
网络质量:弱网(高延迟、高丢包、低带宽)、断网、网络切换(Wi-Fi和移动数据切换)。
测试工具:
- 硬件:网络衰减仪(如Spirent C50)。
- 软件:Charles、Fiddler(弱网模拟功能),Facebook ATC(Augmented Traffic Control)。
测试点:APP是否会发生Crash、ANR;是否有超时机制和友好提示;数据是否正确加载;重连机制是否有效。
17. 弱网测试的关注点是什么?
答:
- 功能性:请求超时后,APP是否处理得当(如提示"网络不佳"),而不仅仅是卡死或Crash。
- 用户体验:是否有加载中的动画(Loading),是否支持手动重试。
- 数据一致性:在弱网下提交表单(如付款),要防止重复提交,保证数据最终一致性。
- 性能:页面加载时间,操作响应时间。
18. 如何模拟弱网环境进行测试?
答:以Charles为例:
- 打开Charles,选择 Proxy -> Throttle Settings。
- 勾选 Enable Throttling。
- 选择预设的网络条件(如3G)或自定义带宽(Bandwidth)、延迟(Latency)、丢包率(Packet Loss)。
- 设置完成后,手机上所有的网络请求都将经过Charles的弱网模拟。
19. APP的权限测试主要测试哪些内容?
答:
权限申请时机:是否在需要使用时才申请(遵循最小化原则),而非一启动就申请所有权限。
授权结果处理:
- 用户允许权限后,功能是否正常。
- 用户拒绝权限后,APP是否正常处理(功能不可用,但有友好提示,且不会Crash)。
- 用户勾选"不再询问"并拒绝后,APP能否引导用户去系统设置页手动开启权限。
iOS与Android差异:Android权限分为普通权限(安装时授予)和危险权限(运行时申请);iOS所有隐私权限都需要运行时申请。
20. 如何测试APP的推送通知(Push Notification)?
答:
接收测试:
- APP在前台:通知是否展示,点击后是否正确跳转。
- APP在后台:通知是否展示,点击后是否唤醒APP并跳转到指定页面。
- APP进程被杀掉:通知是否展示,点击后是否能重新启动APP并跳转。
功能开关:测试在APP内和系统设置中关闭推送后,是否还能收到推送。
推送内容:推送的标题、内容、跳转链接(Deep Link)是否正确。
21. APP的升级测试有哪些测试点?
答:
- 升级方式:应用内更新、应用市场更新。
- 版本路径:相邻版本升级、跨版本升级、低版本覆盖高版本(应提示失败)。
- 数据继承:升级后,用户的登录状态、本地缓存、数据库、设置项等数据必须正确保留。
- 强制升级:对于不支持的老版本,是否有强制升级提示和逻辑。
- 更新内容:更新提示文案是否正确。
22. 如何对APP进行安全测试?
答:
- 数据存储安全:检查敏感数据(密码、token)是否明文存储在本地(SharedPreferences、数据库、文件中)。
- 传输安全:网络请求是否使用HTTPS,且证书校验是否严格(防止中间人攻击)。
- 代码混淆:是否开启了Proguard(Android)或代码混淆,增加反编译难度。
- 日志泄露:发布版本是否关闭了Debug日志,防止敏感信息通过logcat泄露。
- 组件暴露:Android的Activity、Service等组件是否被不必要的导出。
- WebView漏洞:是否忽略了SSL证书错误、是否允许执行JavaScript等。
23. 如何抓取和分析APP的网络数据包?
答:
工具:Charles 和 Fiddler 是最常用的抓包代理工具。
设置步骤:
- PC和手机连接到同一Wi-Fi。
- 在PC上设置代理工具的代理端口(如8888)。
- 在手机Wi-Fi设置中,手动配置代理服务器为PC的IP地址和端口。
- 在手机上安装并信任代理工具的CA证书(否则无法抓取HTTPS请求)。
分析:可以查看请求URL、方法、请求头、请求参数、响应状态码、响应内容等,帮助定位接口问题、验证数据传输安全性。
