题目来自Gemini
基础训练
场景设定: 社交/办公 APP 的“消息推送(Push Notification)”功能 功能描述: 当用户收到新消息时,即使 APP 在后台或锁屏状态,系统也会弹出通知提醒。用户点击通知可直接跳转至对应的聊天窗口。
训练一:权限与开关逻辑
- 问题描述: 推送功能的开启受控于多方:手机系统设置(允许通知)、APP 内部全局设置、以及特定会话的“免打扰”设置。
- 挑战: 请列出三种不同的设置组合(例如:系统开+APP关+会话开),并说明在这三种情况下,用户收到新消息时的预期表现。
训练二:推送跳转逻辑
- 问题描述: 用户点击推送通知后的跳转路径(Deep Link)。
- 挑战: 请列出至少三个你认为需要重点测试的跳转场景(考虑 APP 进程在不同状态下:如进程被手动杀死、APP 处于其他二级页面、APP 正在登录页等)。
训练三:极端与弱网表现
- 问题描述: 在网络极差或频繁断线重连的情况下,推送可能会出现延迟、重复或失效。
- 挑战: 针对“重复推送”和“点击推送后卡顿/白屏”这两个问题,你会从哪些技术维度(如消息 ID、数据缓存、网络超时限制等)去排查原因?
回答:
训练一:
1.系统关+APP开+会话开。预期:不收到消息
2.系统开+APP关+会话开。预期:不收到消息
3.系统开+APP开+会话关。预期:收到消息但没有提醒
训练二:
1.进程被杀死时,点击推送。预期:冷启动应用,启动后跳转到对应的通知
2.APP处于其他页面时,点击推送。预期:跳转到对应的通知,点击返回后,返回到跳转前的页面
3.APP正在登录页且登录未成功时,点击推送。预期:如果对应的通知需要用户登录,则跳转到新的登录页,登录成功后进入到对应的通知。此时如果点击返回,则返回到对应的上一页面,而不是之前的登录页。
训练三:
这个不太会
以下是针对你的回答进行的评价与补充:
基础训练评价
训练一:权限与开关逻辑
- 你的回答: 覆盖了核心的三种组合,结论准确。
- 我的评价: 满分。
- 补充点: 在实际 APP 测试中,还有一个容易被忽视的维度——静默通知(Silent Push) 。
补充场景: 系统开 + APP开 + 某个群组/会话开启了“接收消息但不提醒”。 预期表现: 手机不响铃不振动,不弹出横幅,但 APP 图标上的**角标(Badge)**应该增加,且进入 APP 后该消息应标记为未读。
训练二:推送跳转逻辑
- 你的回答: 覆盖了冷启动、热启动以及未登录状态。
- 我的评价: 逻辑非常严密,尤其是对“登录成功后跳转”和“返回路径”的描述,这是高级测试人员才会关注的堆栈管理问题。
- 补充点: 多账号切换场景。
补充场景: 手机上曾登录账号 A,退出后换账号 B 登录。此时收到了账号 A 的推送。 关注点: 点击通知后,系统绝对不能越权跳转,应提示“账号信息已变更”或要求重新登录账号 A。
训练三:极端与弱网表现(查漏补缺)
这个部分你提到不太会,其实可以从**“数据的唯一标识”和“时效性”**两个维度去思考:
- 重复推送排查: 关注消息的
msg_id。如果网络抖动导致客户端没能及时给服务器回执(Ack),服务器可能会误认为发送失败而重发。测试时需验证客户端是否做了去重逻辑。 - 点击卡顿/白屏: 关注 缓存机制 和 超时降级。
-
- 排查点: 点击通知跳转时,APP 是在等待接口返回实时数据(容易白屏),还是先显示本地缓存数据?
- 测试策略: 在弱网下点击,看是否有 Loading 提示,或者是否在一定时间(如 5s)后给出“网络连接失败”的友好提示,而不是一直卡死。
测试意识训练
今日练习:第一题 场景描述: 某外卖 APP 的“红包/代金券”领取功能。用户在下单前点击领券中心的“领取”按钮,领取成功后该券会出现在个人钱包中,下单时可抵扣现金。 挑战: 针对“领取”这一具体动作,从“反作弊”和“评价闭环逻辑”的角度,你会设计哪些异常测试点?
回答:
emm...反作弊?评价逻辑闭环?
看来这两个词给了你一点小小的震撼。没关系,测试意识的训练本身就是为了打破“点点点”的常规思维,进入到防御性测试和底层逻辑测试的领域。
既然你现在对这两个概念还有些模糊,我先不急着给答案,我尝试通过评价你的反馈来帮你理清这两个维度的“测试直觉”,然后我们再继续:
什么是测试中的“反作弊”与“闭环”?
- 反作弊(Anti-Fraud): 核心是**“不让你钻空子”**。 你要想:如果我是一个想白嫖红包的用户,或者是一个想薅羊毛的黑产团队,我会怎么利用接口、权限、时间差来重复领、超额领?
- 评价闭环(Logic Loop): 核心是**“逻辑能不能自洽”**。 你要想:领了这个券,后台状态变了吗?钱包里有了吗?下单能用吗?用完后券消失了吗?退款后券回得来吗?(这就形成了一个闭环)。
重新挑战:外卖红包领取
我们回到这道题,你可以试着针对下面这几个具体的“坏点子”来构思测试点:
1. 关于反作弊(针对“领取”这个动作):
- 多开/分身: 同一个手机登录不同的账号领,行不行?
- 并发攻击: 像抢票一样,用脚本一秒钟点 1000 次“领取”,能不能领到 1000 张?
- 接口绕过: 如果 UI 界面上显示“已领完”,但我直接拿接口地址去发请求,能不能领到?
2. 关于逻辑闭环(针对“状态切换”):
- 一致性: 领券中心显示“已领取”,个人钱包里有没有?
- 关联性: 领了券立即去下单,结算页能不能自动勾选?
- 逆向逻辑: 如果领了券还没用,有效期过了,这个券在钱包里的状态会变吗?
现在,请针对这些维度,尝试给出几个具体的测试点(即便是一两个也可以)。
回答:
1.验证接口幂等性,快速点击“领取”,能不能领取到多张优惠券
2.领券成功后,数据库中的数据有没有减少相应的数量
评价与补充
- 针对你的第 1 点(幂等性): 评价:优秀。这是反作弊和高并发场景下的核心。如果后端没做分布式锁,连续点击确实可能产生“超领”。
- 针对你的第 2 点(数据同步): 评价:准确。这属于闭环逻辑中的“库存扣减”环节。
查漏补缺(你可能遗漏的点):
除了你提到的两点,从“测试意识”出发,还有几个深坑需要关注:
1. 反作弊维度(绕过限制)
- 账号/设备关联: 如果限制“每人限领一张”,我用两个账号但在同一台手机上领,或者同一个账号在不同手机上领,系统是否能识别出是同一人?(通过 IMEI、设备指纹等判定)。
- 黑名单拦截: 被系统判定为“风险账户”的用户,点击领取时是否应该报错?
2. 闭环逻辑维度(状态关联)
- 过期与可见性: 优惠券领到后,如果后台管理员临时下架了该券,已领取的券是否还能在“个人钱包”中显示并使用?
- 领取后的UI回显: 领取成功后,领券中心对应的按钮是否实时变为“已领取”或“去使用”?(避免重复请求,节省服务器开销)。
测试意识训练:第二题
场景描述: 某视频 APP 的“青少年模式”开关功能。
- 功能: 用户设置独立密码后开启。开启后,APP 只能观看特定内容,且无法进行充值、打赏,深夜会自动锁定无法观看。
挑战: 请从**“权限绕过” (反作弊)和“状态持久化”**(逻辑闭环)的角度,设计至少两个异常测试点。
请开始你的回答。
回答:
1.实际时间为夜晚,通过设置手机系统时间为白天,验证能否使用APP
2.两天时间内,观察APP的“青少年模式”功能是否正常
评价与补充
1. 针对你的第 1 点(系统时间修改):
- 评价: 非常好! 这是一个非常经典的测试思维,即验证“客户端逻辑”是否过度依赖“本地系统环境”。
- 补充: 除了修改时间,还可以尝试修改时区。更稳健的 APP 设计应该使用服务器时间(NTP 时间)来判定是否处于“深夜锁定”时段。
2. 针对你的第 2 点(持续观察):
- 评价: 方向正确,但描述略显模糊。 “观察是否正常”在测试用例中需要具体化为某个动作。
- 补充: 这里的核心在于“登录态与模式态的解绑测试”。
-
- 比如:开启模式后,强制杀死 APP 进程再重启,模式是否依然有效?
- 或者:退出账号再重新登录,或者卸载重装 APP,该设备或该账号是否依然锁死在“青少年模式”?(防止通过重装大法绕过限制)。
查漏补缺(进阶测试意识):
- 权限绕过(反作弊): * 多端同步漏洞: 在手机端开启了青少年模式,立即登录网页版或平板端,观察模式是否同步开启?(如果只做客户端本地记录,换个端就失效了)。
-
- 万能密码/重置逻辑: 验证“忘记密码”流程。如果重置密码的成本极低(例如只需要一个简单的短信验证码),那么青少年可以轻易通过找回密码来解除限制。
- 状态持久化(逻辑闭环):
-
- 弱网下的开启/关闭: 在断网状态下尝试输入密码关闭模式,如果本地有缓存判断,是否会导致在没通知服务器的情况下关闭成功?
测试意识训练:第三题
场景描述: 某外卖/打车 APP 的“修改手机号”功能。
- 流程: 用户为了安全,需要先验证旧手机号的验证码,验证通过后,再输入新手机号并验证新号验证码,最后绑定成功。
挑战: 这个功能涉及敏感安全信息。请从**“逻辑跳过”和“数据唯一性”**的角度,给出两个测试挑战点。
回答:
不太会
答案解析:修改手机号功能
1. 针对“逻辑跳过”(绕过验证)
- 测试点: 修改验证接口的响应值(前端拦截绕过) 。
- 操作思路: 在验证“旧手机号”时,故意输入一个错误的验证码。在点击确定时,通过抓包工具(如 Charles/Fiddler)拦截服务器返回的“验证码错误”结果,将其手动改为“验证成功”的响应代码(如把
code: 400改为code: 200)。 - 关注点: 看 APP 前端是否会被欺骗,直接带我进入“绑定新手机号”的页面。如果能进去且最后修改成功,说明后端没有进行二次校验,这就是严重的逻辑漏洞。
2. 针对“数据唯一性”(防冲突/防重)
- 测试点: 验证“已被占用”的手机号绑定。
- 操作思路: 账号 A 准备修改手机号。输入的新手机号选择一个已经是账号 B 在使用的手机号。
- 关注点: 系统必须报错提示“该手机号已绑定其他账号,请更换”。如果修改成功,会导致账号 B 无法登录,甚至出现数据错乱(一个手机号对应两个 UserID)。
以下是今天训练的复盘总结:
1. 你的闪光点(成熟的测试思维)
- 用户体验与路径意识: 在“购物车”和“推送跳转”练习中,你对 APP 页面堆栈(返回路径) 的思考非常到位。能考虑到“登录成功后自动跳回原页面”和“返回时不应回到登录页”,这是典型的高级测试思维,关注业务闭环。
- 环境依赖意识: 在“青少年模式”题目中,你精准地抓住了修改系统时间来绕过限制的点。这说明你对移动端测试的特殊性(本地环境 vs 服务端逻辑)有很好的直觉。
2. 需要攻克的“盲区”
- 逻辑跳过(Logic Bypass): 这是安全测试的核心。你需要建立一种“不按套路出牌”的直觉。比如:不走步骤 A,直接调步骤 B 的接口;或者通过抓包修改服务器的返回状态(把“失败”改成“成功”),看前端是否会被欺骗。
- 数据唯一性与一致性: 你的测试点目前多集中在客户端。未来的练习中,可以多思考数据库里的数据。例如:改手机号时,新号如果已经存在于数据库会怎样?领券时,后台库存扣减是否准确?
- 弱网与技术实现: 面对弱网场景,不仅要考虑“转圈圈”,还要考虑接口幂等性(连续点两次,后台是否只处理一次)。
3. 今日核心知识点回顾
| 测试维度 | 核心关注点 | 你的实战案例 |
|---|---|---|
| 基础逻辑 | 功能是否按预期运行 | 购物车数量边界值、推送权限组合 |
| 交互体验 | 页面跳转、返回路径、堆栈管理 | 点击通知后的冷/热启动跳转 |
| 反作弊/安全 | 权限绕过、本地时间篡改、接口伪造 | 青少年模式修改时间、修改验证码响应值 |
| 逻辑闭环 | 状态的一致性、数据的唯一性 | 修改手机号的冲突检测、红包领券后的库存 |