跳到主要内容

被自己写的校验坑到半夜三点

敏姐转开发
敏姐转开发

· 阅读约 3 分钟

先交代一下前情:我独立负责的那个小模块里有个对账任务,每天凌晨两点跑,把上游推过来的流水跟我们自己的账比一遍,出差异报告。这任务以前是老同事的,我接手之后按做测试的习惯,在入口加了一层参数校验,商户号、金额、账期格式不对的直接抛异常,想着早点暴露问题比让脏数据流进去强(这句话现在回头看有点打脸)。

出事是九月下旬的一个周四。我十一点多洗漱完躺下,习惯性最后刷一眼监控,看见对账任务的告警红着。心里还想着可能是上游又晚了,点进去一看,跑是跑了,跑到 2:03 就挂了,异常退出。

我第一反应是不至于,因为本地我都跑过——不是,本地我只跑过正常数据,脏数据那条路径根本没过过。然后开始翻日志,翻到最后一行:

IllegalArgumentException: 商户号格式不合法: ["M007132 "]

这行我看了得有五分钟。M007132,看着一点问题没有。我还照着敲了一遍去比,一模一样。后来鬼使神差给日志里的值加了引号才发现,引号里面,M007132 后面跟了一个空格。

就一个空格。

上游那天做了一次历史数据补推,有一批数据从别的系统导过来,字段拼接的时候多带了个空格。量不大,几百条。但问题是我那个校验是整批遍历的,碰到第一条不合法的直接抛,整个批次回滚,后面几万条一条都没对。

我坐在那儿,脑子里全是“这是我自己加的”。当初加校验的时候,我甚至写了七八条用例覆盖各种不合法格式(这习惯现在看是好的),唯独没想过,校验本身该是拦路的,还是该记一笔放行。我这算是把兜底写成了单点故障,不知道我这么讲准不准确。

凌晨两点多先临时处理,把校验从抛异常改成记录、跳过、计数,跑完出一份跳过明细,第二天人工看。改的时候手都是抖的,那个文件我熟,但凌晨改和生产相关的东西,改一行看三遍。三点十七分重新触发,跑通了。差异报告里多了个“跳过 216 条”的小节,我盯着这个数字看了会儿,说不上是踏实还是别的什么。

后面就想,上游多一个空格这事,我作为测试出身的人应该最先想到才对。以前测接口,脏数据都是我自己造的,空格、全角、超长、emoji,什么都往上招呼。轮到自己写,脑子里全是“正常路径通了就算完”。这话我以前说过开发同事不止一次。

改完那版三点四十多提交的,没敢合主干,先放分支等白天再走流程。躺下快四点,睡不着,翻来覆去想的反而是那 216 条被跳过的数据账期对不对得上,白天要怎么跟对账那边的人解释。后来迷迷糊糊睡过去了。

哦对,还有一件事忘了说,改完之后我把校验那块用例补了几条,专门测“部分数据不合法时整批的行为”,之前我只覆盖了“单条不合法”这种情况,等于边界就画窄了。用例这事真不能图省事……

先这样吧,白天还有一堆事。想到再补。

敏姐转开发
敏姐转开发

测试八年,转开发第一年。慢一点没关系,返工最贵。

查看主页 →