ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

小米手机测试笔试B卷复盘:从adb到功耗与用例设计

小米手机测试笔试B卷复盘:从adb到功耗与用例设计 1. 先聊聊这份B卷的整体观感1.1 为什么手机测试笔试跟普通开发岗完全不一样我是2019年秋天投的小米手机测试岗位当时手里已经拿过几家互联网公司的软件测试笔试offer以为自己摸清了套路。结果拿到这份B卷的时候还是被上了一课。普通软件测试笔试的核心是围绕接口、数据库、工具链jmeter、postman、自动化框架以及一些通用的算法逻辑。但小米这份手机测试B卷几乎是把手机测试工程师的日常工作直接搬到了试卷上。选择题里面没有太多纯粹的数据结构而是大量围绕Android系统机制、硬件模块行为、用户场景模拟展开。印象最深刻的是一道关于手机在弱光环境下相机对焦行为的题选项里混了ISO范围白平衡偏移PDAF相位对焦点数防抖补偿幅度这类参数如果不做手机专项测试光靠普通功能测试那套经验很容易栽进去。这份卷子真正想测的东西不是你会不会写测试计划而是你有没有手机测试的肌肉记忆——比如拿到一台手机你知道该从哪些维度去拆解、去设计用例、去判定异常。这也是手机测试区别于web/后端测试的核心被测对象不是一个逻辑服务而是一台集合了操作系统、底层驱动、传感器、通信协议、用户交互硬件于一体的复杂设备。你面对的测试维度天然就比纯软件测试多了一个量级。1.2 我拿到卷子后的第一反应与时间分配我记得整个笔试时间是90分钟题量大概有60道选择题、5道判断题、3道简答题外加一个大题——设计测试方案。说实话看到选择题密度的时候心里是有点慌的因为很多题都是给一段场景描述然后让你选最可能的原因或者下一步最应该执行的验证动作而不是纯粹考概念记忆。我当时的策略是先把所有选择题快速扫一遍把一眼能确定答案的题先勾掉其余拿不准的做标记等简答题写完再回头推敲。这个策略后来证明是对的因为简答题和方案设计题占分比高而且更依赖长时间思考如果一上来就跟选择题死磕后面时间根本不够。我印象里最后的测试方案大题我花了将近35分钟基本是把用例设计的框架、覆盖矩阵、风险点、数据埋点都写进去了这才勉强把整张卷子填满。如果你之后要面手机测试岗我的建议是选择题按每道题最多1分钟来卡超过就跳过简答和方案题至少预留40分钟。手机测试笔试的信息量比普通测试卷大很多时间管理就是第一道隐形考题。2. 踩过的坑与印象最深的几道题2.1 adb命令题最基础也最容易丢分B卷里有一道选择题大概意思是当一个app出现ANRApplication Not Responding时通过adb抓取CPU占用和线程堆栈优先使用哪条命令组合。选项给了一大堆adb shell top、adb shell dumpsys cpuinfo、adb shell debuggerd -b、adb shell am force-stop这样的组合。这道题我其实当时犹豫了很久。因为单看每一条命令都眼熟但组合起来场景就完全不同了。正确答案的思路是主线上要先定位当前是否有进程处于ANR状态再用adb shell dumpsys activity processes去看进程的ANR记录同时用adb shell debuggerd -b抓取native堆栈再用adb shell top -n 1 -m 10 -t去抓那一刻的线程CPU占用。而am force-stop是事后清理进程用的不是排查用的把它放在优先使用里就是错的。后来我做手机测试时间长了才理解这种题不是为了让你背命令而是为了看你有没有真实的ANR排查经历。真实的排查链路应该是先复现问题保持现场再通过logcat看ANR关键字通常会有ANR in ...的字样接着抓/data/anr/目录下的traces文件最后结合CPU、内存、IO状态综合判断是主线程被卡、死锁还是Binder调用超时。光会一条命令不够得会按顺序组合。另外B卷里还考了一道关于adb reverse的题我当时觉得这命令用得少就随便蒙了一个。结果后来发现在真机调试时adb reverse tcp:8080 tcp:8080可以把手机上的请求转发到电脑本地服务非常实用。如果你准备手机测试岗adb devices、adb install这些入门命令只是底子真正常考的是adb shell dumpsys系列、adb shell am系列、adb shell monkey、adb shell settings、adb reverse、adb bugreport这些偏排障和系统控制的命令。2.2 测试用例设计题相机弱光场景的完整答案B卷有一道比较典型的用例设计简答题请为手机相机夜景/弱光模式设计一份核心测试用例并说明优先级。这道题分值高也很能拉开差距。我当时写的时候其实漏了不少点后来从业经验丰富了才总结出真正完整的思路。这道题不能只写打开相机调到夜景模式拍照看照片是否清晰那是功能测试新手的答案。手机测试的用例设计需要从环境条件、硬件参数、用户操作、系统资源、异常场景多个维度去拆。现在我会这样设计环境维度弱光环境本身要分级。0.1 lux几乎全黑、1 lux月光级、10 lux黄昏室内、50 lux较暗室内每一档都要单独跑因为相机的ISP算法在不同光照下触发逻辑完全不同。参数维度夜拍模式下要验证ISO上限、曝光时间、多帧合成张数、降噪强度在参数符合规格的情况下成片是否达到亮度、细节、噪点的平衡。需要对比自动模式和手动模式。操作维度手持稳定性对长曝光的影响三脚架模式与手持模式行为是否不同拍摄动态物体时的拖影程度连续按快门20次后是否出现发热降频、取景预览卡顿。系统资源维度拍照时后台同时跑大型游戏观察相机进程是否被杀存储空间不足时夜拍是否崩溃电量低于5%时闪光灯策略和夜景算法是否发生降级。异常场景维度来电中断拍摄切后台再切回来锁屏再解锁前后摄频繁切换这些操作是否导致相机卡死或黑屏。我当时只写了场景、步骤、预期结果没有写优先级和风险点。后来复盘发现阅卷人很看重你能否把用例分优先级因为在手机测试里P0用例是上市前的红线P1是主流程补充P2是可以延后修复的体验类问题。如果一道用例设计题全部平铺没有优先级观点说明你还不懂版本迭代中的测试策略。2.3 性能与功耗题手机测试的核心指标怎么答B卷简答题里有一道关于电池续航测试的题目问的是如何设计一个手机续航的专项测试方案并说明需要采集哪些数据。这个题我当时只答了循环播放视频、看耗电曲线、对比竞品太单薄了。实际上手机续航测试有一套和硬件强相关的完整框架。首先是场景定义。要区分待机续航、通话续航、视频播放续航、游戏续航、导航续航等不同场景每个场景的屏幕亮度、音量、网络状态、后台应用数量都必须锁定。很多新手漏掉的恰恰是场景控制变量——比如测视频续航时连的是Wi-Fi还是5G后台有没有同步任务亮度是手动固定还是自动调节这些都会直接影响测试结论。其次是数据采集。除了系统设置里的电池电量百分比更重要的是用adb shell dumpsys battery去实时读取电量、温度、电压、电流状态用adb shell dumpsys batterystats获取每个应用的耗电排名、wakelock持有时间、cpu唤醒时间。如果想要更精细的电量趋势要使用外接功率计比如Monsoon或者Power Monitor来采集真实的电流波形。然后是结论判定。续航测试不能只看能撑多少小时还要看功耗曲线是否平稳——有没有某一段突然掉电跳崖有没有温度过高导致的限频有没有应用在后台频繁唤醒CPU这些都是比总时长更值得关注的问题点。我当年笔试只写到一半后来在真实项目中才把功耗的分析框架补全。如果你现在准备面试建议把功耗分析模型放在重点从场景建模、数据采集、异常定位到竞品对标每一个环节都要能展开讲。3. 手机测试笔试背后的知识体系拆解3.1 硬件与系统的交叉点ROM、内核、驱动、协议通过这份B卷你会发现手机测试工程师的知识边界远远超出黑盒点一点。比如有一道选择题涉及手机Wi-Fi测试选项里提到了802.11k/v/r漫游协议、MIMO天线切换、Wi-Fi 6的OFDMA等。如果只看应用层你会觉得这些选项很偏但手机测试就是要懂这些因为很多时候你发现一个网速慢的bug根因可能是天线切换策略有问题或者路由器漫游触发条件不满足。手机本身是一个软硬件深度耦合的系统。ROM层决定了系统UI和功能特性内核层决定了驱动的行为和功耗策略底层协议决定了通信的兼容性。测试的时候你不可能把每一层都吃透但你必须知道问题可能出在哪一层以及怎么用对应的工具去验证。举个实际例子用adb shell dumpsys wifi可以看到当前Wi-Fi的连接信息、信号强度、频率带宽、漫游状态用adb shell cmd connectivity可以查询网络连通性用adb shell dumpsys battery可以看无线充电的状态。这些命令本身就是连接软件与硬件的桥梁笔试考这些实际上是在确认你有没有跨层排查的意识。3.2 专项测试方法论从monkey到稳定性测试B卷中关于稳定性测试的题目也不少特别是monkey测试相关。常见问法是请说明monkey测试的作用、参数含义以及如何分析monkey测试的崩溃结果。Monkey本身的用法不复杂关键是考察你对结果的分析能力。比如使用adb shell monkey -p com.android.camera -s 12345 --throttle 300 --pct-touch 70 -v 10000跑相机应用如果你只是跑完看有没有崩溃那根本不够。真正要做的是使用-s固定seed保证复现性定期抓取logcat日志记录各个阶段的时间点如果出现ANR或crash要能结合日志中的堆栈信息定位到具体的代码路径还要检查跑完monkey之后的系统状态比如内存是否泄漏、是否有残留进程、存储是否被占满。我当时笔试有一道判断题问monkey测试通过就意味着稳定性达标。显然这种说法是错的monkey只是随机乱点覆盖面随机很多真实用户场景比如弱网、来电、通知栏交互monkey根本模拟不到。稳定性测试需要monkey、脚本化遍历、故障注入、长时间老化测试组合使用这也是手机厂商内部通行的做法。3.3 数据与日志bugreport、logcat、trace文件的读取思路B卷的大题之一给了几段logcat日志、一段dump信息要求你判断这个bug最可能的类别和下一步排查方向。这种题在普通软件测试笔试里很少见但在手机测试中非常核心。读日志是手机测试的基本功但很多人只会logcat -v time然后看着满屏日志眼晕。我个人的经验是先按优先级过滤重点看FATAL EXCEPTION、ANR in、am_crash、am_anr这些关键字再看进程ID和线程ID确认日志是否来自被测应用最有效地是用adb logcat -b crash查看崩溃缓冲区或者直接抓取bugreport它会把系统状态、进程列表、功耗统计、网络状态、传感器信息一次性打包出来。笔试里那道题正好给了几行关键的日志我看出了OutOfMemoryError就判断是内存溢出相关但后面的选项还让我选最应该执行的验证动作。正确答案并不是直接改代码而是用adb shell am dumpheap抓取Java堆检查是否存在内存泄漏或大对象同时配合dumpsys meminfo看应用的内存分布。能看到这一层说明你真的处理过内存问题。如果只盯着异常堆栈的字面意思很容易选错下一步。4. 如果让我重考一次我会提前准备这些4.1 刷题之外一定要动手实操的命令当初我备考的时候把很多精力花在看面经、记概念上但忽视了真机操作。结果B卷里不少题目只要我在手机上跑过一遍命令很多选项就不会那么犹豫了。比如adb shell dumpsys gfxinfo是干什么的跑一次就能看到帧渲染时间、Jank数adb shell dumpsys activity top能看当前Activity的详情adb shell am start -W能看启动耗时和等待动画。这些命令不是背出来的而是用出来的。所以我建议准备手机测试笔试的朋友提前找一台Android手机刷个开发者选项把USB调试打开然后每天花一个小时把adb shell下常见的命令都跑一遍尝试通过命令获取电量、内存、CPU、网络、传感器、应用列表等各种信息。更重要的是要试着用这些命令去验证某个具体的场景比如某应用在后台播放音乐时CPU占用是多少这才是笔试里那种场景化选择题的正确打开方式。4.2 背熟几个框架和测试理论手机测试虽然有大量硬件和系统层面的知识点但基础的测试理论依然要扎实。比如等价类划分、边界值分析、场景法、正交实验法这些在用例设计题中还是核心方法论。B卷里有一道关于联系人姓名输入框的用例设计题本质上就是边界值和特殊字符的考核。你不能只会对着手机硬件喊我测过很多手机基础理论不扎实设计出来的用例覆盖度就是不如别人。另外Android系统相关的机制也需要重点掌握Activity的四种启动模式、Service生命周期、BroadcastReceiver动态注册与静态注册的区别、ContentProvider的访问权限、Binder通信机制等。这些内容在手机测试笔试的简答题中经常会以xxx场景下为什么会出现xxx现象的方式出现因为很多bug背后都是系统组件生命周期的问题。4.3 笔试时如何组织答案让阅卷人眼前一亮手机测试的笔试答案尤其简答题最忌一坨文字从头写到尾。阅卷人每天批改大量试卷他们会快速抓住你的框架感。我的建议是回答任何用例设计或方案题都遵循测试对象-环境条件-操作步骤-预期结果-优先级-风险点六段式结构。以弱光相机测试为例开头用一句话点明测试目标是验证夜景算法在低照度下的成片质量、对焦速度、稳定性然后分段列出环境条件矩阵不同光照等级再给出具体操作步骤和预期结果最后注明P0/P1/P2优先级以及可能存在的风险点比如算法在极限暗光下完全不可用是否需要接受降级策略。这样的答案逻辑清晰信息量足阅卷人一眼就知道你是有真实经验的。另外一个小技巧是在做选择判断不确定的时候可以尝试用排除法和测试思维去推哪个选项是测试阶段会真正执行的动作而不是开发和产品维度才做的事。比如观察日志、查看CPU占用这类测试动作往往更接近答案而重构代码、改需求这类选项基本可以直接排除。5. 从笔试题反推岗位需要的真实能力5.1 手机测试工程师的日常不只是点屏幕很多人对手机测试的理解还停留在每天拿着各种手机乱点看会不会闪退。但经历过这套笔试题之后你会发现真正的手机测试工程师更像是一个系统健康检查专家。日常工作中你需要理解底层日志判断一个卡顿是CPU忙、线程阻塞还是GC频繁你需要熟悉硬件行为知道在弱光、强磁、高温、强干扰环境下手机的各模块应该呈现什么状态你需要和开发人员用同一种语言对话比如说到ANR你能准确说出trace文件里主线程的堆栈状态说到功耗你能通过抓取wakelock持有时间找出是谁在偷偷耗电。这些能力恰恰是笔试在选拔初期就要剔除只会黑盒点点点的候选人。5.2 这份B卷暴露出的行业趋势回看这份2019年小米秋招的B卷会发现很多题目放到今天依然实用甚至有些方向被后来的行业进一步放大了。比如相机测试涉及的多帧合成、夜景算法今天已经成为各手机厂商内卷的核心卖点功耗测试从单纯看时长演变成对能效调度的精细评估Wi-Fi协议相关的测试更是随着Wi-Fi 6/6E/7的普及变得越来越复杂。手机测试这个岗位并没有被AI取代而是随着手机功能复杂度的提升要求越来越高。如果你打算进入这个方向我的建议是不要把笔试题当作一次性的考试而是当成一份知识地图。这份地图能告诉你手机测试工程师需要关注的点远比你想象的多从Android系统底层到上层应用再到用户的实际使用习惯每一环都可能是bug的源头。把这份B卷真正吃透你会发现自己不只是准备了一场笔试而是提前进入了手机测试这个领域的大门。
返回列表