Skip to content

业务测试面试题 - 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、方法、请求头、请求参数、响应状态码、响应内容等,帮助定位接口问题、验证数据传输安全性。

Powered by VitePress

🔒 需要口令解锁

关注微信公众号 测开阿Duang
回复关键词 「密码」 获取口令

公众号二维码

解锁后本浏览器长期有效