真实面经题目 · 原创解析
抖音点赞功能如何设计测试用例,并在弱网、重试和状态一致性下验证结果?
这题考测试开发能否把一个看似简单的点赞按钮拆成状态机、一致性、弱网、并发和观测问题。好的答案要覆盖正常路径、边界路径、异常网络、重复操作、最终状态校验、自动化与监控,而不是只列点击前后图标变化。
真实面经题目 · 原创解析
这题考测试开发能否把一个看似简单的点赞按钮拆成状态机、一致性、弱网、并发和观测问题。好的答案要覆盖正常路径、边界路径、异常网络、重复操作、最终状态校验、自动化与监控,而不是只列点击前后图标变化。
我会先把点赞看成一个有状态的交互,而不是一个按钮。基础用例覆盖未点赞到已点赞、已点赞到取消点赞、连续点击、刷新后状态保持、切换视频后状态保持、登录/未登录、被删除或不可见视频、点赞数展示和个人喜欢列表更新。重点场景是弱网和重试:在高延迟、丢包、断网、请求超时、请求成功但响应丢失、恢复网络后重放、连续快速点击等情况下,客户端可以有乐观展示,但最终必须和服务端状态一致,不能出现点赞数重复增加、按钮状态反复跳、取消后又恢复点赞等问题。验证时我会同时看 UI、接口响应、服务端查询结果、埋点日志和跨页面状态;如果没有服务端直查条件,也要通过刷新、重登、换端或拉取列表验证最终一致性。弱网可以用系统网络调试工具、代理工具、移动端网络模拟、服务端 mock 或自动化框架注入延迟和失败来构造。指标上关注点赞成功率、失败回滚率、重复请求率、最终一致性错误率、弱网下 p95 响应时间、用户重试率和错误提示曝光。用例设计的重点是证明点赞在异常链路下可恢复、可解释、可观测,而不是只证明正常点击能变色。
点赞至少包含未点赞、点赞中、已点赞、取消中、失败回滚等状态。客户端可能为了体验做乐观更新,但乐观状态不等于最终状态。测试时要明确每次点击后本地 UI、请求状态、服务端状态、计数和列表归属分别应该是什么。
主路径包括点击点赞、取消点赞、刷新保持、切换页面保持、点赞数变化和喜欢列表更新。边界包括未登录点赞、视频下架、作者拉黑或权限变化、重复进入同一视频、不同入口展示同一视频、长时间停留后再操作等。基础用例要先证明功能语义正确。
弱网不是简单把网速调慢。需要模拟高延迟、低带宽、丢包、断网、DNS 或连接失败、请求超时、响应丢失、请求成功但客户端重试、网络恢复后批量发送等情况。每种情况都要观察按钮状态、计数、错误提示、重试策略和最终状态。
用户可能在弱网下连续点击点赞和取消,多个请求可能乱序返回。测试目标不是要求每个中间状态都稳定,而是保证最终意图和服务端结果一致,且计数不能重复增加或减少。可以通过快速连点、延迟首个响应、打乱响应顺序和重复发送同一操作来验证。
点赞状态通常会在信息流卡片、视频详情、作者页、个人喜欢列表、推荐刷新后的同一视频和可能的多端登录中出现。测试不能只看当前按钮变色,还要通过刷新、重新拉取、切换账号或换设备验证最终状态,避免局部缓存和服务端事实不一致。
弱网用例适合沉淀为自动化和专项回归:构造网络 profile、记录请求、截图或录屏、查询最终状态、校验埋点。线上还要监控点赞失败率、重试率、重复请求率、状态回滚率、弱网投诉和接口错误码分布,便于定位是客户端、网络还是服务端问题。
可以做乐观更新,但必须有明确的失败回滚和最终校验策略。测试时要验证请求失败、超时、响应丢失和恢复网络后,UI 不会长期停留在错误状态。
从黑盒角度可以重复发送同一操作、快速连点、让响应超时后重试,再检查最终点赞状态和计数是否只变化一次。不要假设内部幂等键,只验证对外结果是否满足幂等语义。
先区分是本地缓存、接口响应、服务端最终状态还是列表刷新问题。可以抓请求、刷新页面、重新登录、换入口查看同一视频,并对照埋点和错误码缩小范围。
要验证登录引导、登录后是否延续原操作、取消登录后的状态、重复点击登录入口和登录态过期。重点是不能在未授权状态下误展示已成功,也不能丢失用户明确的操作意图。
可以固定网络 profile,脚本执行点赞、取消、连点和刷新,再收集请求日志与最终状态断言。自动化应覆盖稳定的关键路径,把复杂随机网络留给专项测试或混沌测试。