测试工程师教程
我入行第三年,测试程带我的工程老组长扔给我一个被用户骂崩溃的支付模块。日志翻了三小时,师教发现是测试程下单时库存扣减和支付回调的顺序反了——测试用例里全是“正常流程”,没人写“支付成功但库存扣减失败”的工程交叉场景。那天我意识到,师教测试工程师的测试程真正工作不是找bug,而是工程设计“世界出错的方式”。 大多数测试教程开篇就讲测试计划、师教用例模板、测试程缺陷生命周期,工程像在教人用菜刀前先背熟《刀具冶金学》。师教可实际工作中,测试程你面对的工程是一个由无数假设堆起来的系统:假设网络永远通畅,假设数据库不会锁死,师教假设第三方接口永远在3秒内响应。测试的核心能力,是识别这些假设,然后一一击碎它们。 举个具体例子。去年我们上线一个优惠券系统,开发自测全绿,测试用例覆盖了领券、核销、过期作废。上线第二天,用户发现用两张券能叠加出负金额订单——原来用例里每张券都绑定不同商品,没人想到同一商品能同时满足两张券的条件。这不是逻辑漏洞,是业务规则之间的“缝隙”。好的测试工程师会主动追问:哪些规则能同时成立?哪些状态能同时存在?这些组合里藏着90%的线上事故。 我的经验是,写用例前先画一张“状态迁移图”。把每个对象的状态列出来,比如订单有“待支付、已支付、已取消、已退款”,然后穷举所有状态之间的转换路径。单条路径容易测,难的是路径交叉。支付成功的瞬间用户点了取消怎么办?退款流程走到一半系统重启怎么办?这些“边界重叠区”才是测试的主战场。你不需要模拟所有真实场景,但必须模拟所有状态组合。 再说说自动化测试。很多团队迷信脚本覆盖率,把UI自动化跑得轰轰烈烈,可每次版本更新,最脆弱的恰恰是这些脚本——页面改个按钮位置,用例全挂。我见过最蠢的做法,是用自动化去验证“登录后显示用户名”这种功能,纯属浪费机器时间。自动化该盯的是接口层的幂等性、数据一致性、超时重试机制,这些才是机器比人眼强的地方。人眼适合看交互逻辑是否顺滑,机器适合反复锤同一扇门看它会不会塌。 最后说个常被忽略的点:测试工程师必须懂点产品心理学。用户不会按你的用例操作,他们会连点提交按钮十次,会在弱网下疯狂滑动页面,会在支付时切走应用再回来。这些“手贱行为”不是bug,是人性。我每次提测前,都会逼自己用“最蠢用户”的心态玩一遍功能——故意输错格式、快速切换页面、断网重连。往往能揪出一堆开发觉得“不可能发生”的崩溃。 测试这行干久了,会形成一种职业病:看任何系统都先想“哪里会塌”。这不是悲观,是种清醒。毕竟软件世界里,正常路径是设计出来的,异常路径才是活出来的。你写的每条用例,都是在替未来的用户预演灾难,然后提前把坑填平。这活儿不酷,但系统崩了的时候,能睡得着觉的只有你。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-