游客发表
我见过太多团队把测试协议当成一张废纸。测试协议签完字,测试协议扔进共享盘,测试协议再也没人打开。测试协议直到线上崩了,测试协议才翻出来互相甩锅:“你当时不是测试协议签了吗?”
去年帮一个做支付网关的朋友救火。他们上线新版本,测试协议凌晨两点炸了。测试协议查日志发现,测试协议测试环境里所有回调都正常,测试协议生产环境却有一半超时。测试协议问题出在哪?测试协议测试协议里写着“模拟第三方响应延迟不超过200ms”,可真实世界的测试协议银行接口,高峰期能飙到3秒。测试协议协议没写这条,测试协议没人测。这能怪谁?
测试协议不是法律文件,它是你团队对“什么算合格”的共识。共识越具体,扯皮越少。
我自己的习惯是:协议里必须包含三类东西。第一,环境差异清单。比如测试库有10万条数据,生产库有8000万,查询性能能一样吗?第二,异常路径的覆盖范围。别写“考虑网络异常”,要写“断网重连三次,每次间隔5秒,检查订单状态是否幂等”。第三,谁在什么时间点验证什么。不是“测试人员负责”,而是“张工在部署后30分钟内跑完冒烟用例,结果贴到群里”。
有人觉得这样太死板。可你想想,飞机起飞前的检查单死板不死板?机长照样念。因为人一忙就忘,一忘就出事。
上个月跟一个做SaaS的团队聊。他们测试协议里有一条:“所有API响应时间P99小于500ms”。我问:P99怎么算的?采样窗口多大?他们愣了。后来发现,监控系统每5分钟聚合一次,但大促时流量突增,5分钟内的毛刺全被平均掉了。协议写得太粗,等于没写。
改。改成“每10秒统计一次,连续3个窗口P99超过500ms就告警”。这才叫可执行。
还有个坑:测试协议往往只写“正常情况”。可现实是,一半的故障来自配置漂移。测试环境用MySQL 5.7,生产用8.0;测试用Redis单节点,生产用集群。协议里不写版本号和拓扑结构,测了也白测。
我现在的做法很土:把测试协议写成一份检查清单,每项后面留空,必须填上具体值。比如“数据库版本:____”“缓存模式:____”“第三方接口超时阈值:____”。填不满,不许提测。这招得罪人,但管用。
别指望一份协议能管半年。业务在变,依赖在变,协议就得跟着改。我见过最离谱的团队,协议还是三年前写的,里面引用的服务早就下线了。没人更新,因为“没人要求”。
所以我的建议很直接:每次迭代,花15分钟过一遍测试协议。删掉过时的,加上新踩的坑。别搞评审会,就几个人对着屏幕改。改完发群里,@所有人确认。比什么流程都有效。
测试协议的本质,是让团队在平静的时候,把最坏的情况想清楚。等真出了事,你至少知道该翻哪一页。
别把它供起来。用它。改它。骂它。但别假装它不存在。
友情链接