说说测试的事
Dec 19, 2015
1 minute read

我是一个不专业的程序员。每次接到新的题目,在纸上画画逻辑,想想手头现有的资源,琢磨琢磨程序结构,然后就直接把代码写出来了。写完以后一般是在命令行或者网页上走一遍。发现哪里不对再到代码里打点,插日志,然后再走一遍。就这样一遍一遍重复,最后自己认为没问题了,“走起,上线!”

时间没过多久,接到新的需求说要在上次的功能上加点儿东西。Easy,加!嗯,这里这个流程可以封装一下,于是封装了一个函数。接着开始实现新的需求。写完了以后在命令行或者网页上走一遍新的需求,发现没问题,“走起,上线!”

过了不一会儿接到消息说,原来运行正常的某个功能不好使了。你们这帮人,错就说错在哪,不好使是什么意思?打开日志一看,还真不好使了。于是又补了点儿日志,查查到底怎么个情况。噢,原来上次封装的那个函数那里出了点问题,改吧。改完再走一遍原来的流程,发现没啥问题,“走起,上线!”

又过了一会儿,说刚刚做的新需求又出问题了……你这不是跟我闹呢么!

人肉测试

前面写得有点夸张,真是这样的话早被开除800回了。这里问题也很明显:每次实现功能之后,没有进行系统完整的测试就匆忙(哪来的自信)上线了。我需要些测试来保证程序的质量

于是我想了个办法,把需要测试的功能点列个表,每次做完的时候要逐个检查每项功能是否正确。怎么检查?当然是网页上的流程就去点网页,命令行的流程就去执行命令行,涉及到数据的再去检查数据库记录咯!一开始,这个方法是有效的,直到每次上线前我要检查500个功能点……

你不说你是程序员么

检查一个功能点要1分钟的话,检查500个功能点就要500分钟,一天都过去了还上不了线只能加班。如果每天都有新需求过来,每天都要上线的话……太可怕,不敢想。我们这儿没有专职的测试人员,只能写程序的程序员自己来测试功能,等等……

对啊,我不是程序员么?既然我能写程序,为啥我就不能写个程序去测试我的程序呢?这样就不用每次上线之前都手动检查之前的功能点了啊!说干就干,不能整天把时间浪费在点网页上(甚至有些移动端的网页还要掏出手机来各种操作,简直了)!

说干就干的单元测试

我想,至少要保证程序的每个小单元正确,这样把它们拼装起来才能正确吧!于是,找个了文件,先对里面的这个类写个测试程序好了。建个文件,引用下这个类,创建个实例。然后针对要测试的第一个方法写个函数,调用这个函数,判断下输出是否符合预期。如果不符合,在命令行里打出一行错误信息。

按照上面的流程写完整个类的测试代码,“走起!”如我所愿(嘴角露出了自满的微笑),并没有报错。但是,其实我并没有满足。因为在测试程序里,每个要测试的方法我只调用了一次,还有一些边界条件需要检查。并且,有些函数里有逻辑分支,我要想想怎么把这些分支都测到。

经过一番折腾,终于写完了一个小程序去测试一个类啦!并且我试着在类上加一些对原有逻辑有破坏性的代码,这时再跑一遍测试程序,果然报错了,赞!

于是这一天什么工作都没做,只是写了个测试脚本。要苦逼加班了!

写什么测试啊浪费时间

因为这几天一直在琢磨测试的事,被吐槽工作进度太慢。你瞅瞅那谁家小谁,100个功能都做完了你还在这磨洋工!我说我在写测试啊,然后又被训了:“你这明显增加代码量啊,平白无故给自己增加负担知道不知道?给你的工资可不包含这部分代码,这是你自己要写的。浪费时间……”

但是我不死心啊,哼,你懂什么,除了催就知道催。我这可是工作自动化

原来还有测试框架

见识短浅了,自己写了一套东西以后才发现原来还有一堆叫做测试框架的玩意儿。研究了一下找个用的人多的直接拿来用好了。这东西用着确实爽,哪儿还用自己写报错信息,哪还用自己写些if else判断函数输出,早有人帮你写好了。什么assert,一会儿should一会儿又expect的,整不明白反正就用吧!

从测试中受益

渐渐地发现,别人在网页检查数据的时候,我在写测试代码检查网页的数据;别人在数据库里检查数据的时候,我在写测试代码检查数据库的数据;别人在发网络请求检查返回数据处理的时候,我伪造了网络请求返回了期望的数据;别人在网页上走流程的时候,我一个命令自动生成了一堆数据在几秒钟内走了一遍完成的流程……这回咱说上线就上线,就是这么自信

哼哼哼,那谁家小谁做100个功能,我也能做100个功能,我还能“尽量”保证这100个功能的稳定。

慢慢地发现,好像工作也并没有那么复杂了。因为大部分烦人的验证过程都交给了测试程序去做。并且后来我做了个脚本,每当项目的一个文件有变化的时候,就自动执行相应的测试。如果测试没通过,就发个通知给我。后来索性就先写测试,然后再写程序代码,写着写着测试通过了,我就知道这段逻辑大致没啥问题啦!

因为空下来很多时间,这段时间我就到处去看其他乱七八糟的项目,偶尔还玩玩游戏。后来,空下来的这段时间,我就只用来玩游戏。后来就被开除了。😂



comments powered by Disqus