|
HtmlTestRunner这名字听着挺唬人,生成其实干的测试事儿特简单:把unittest跑出来的结果,变成一份能双击打开的报告网页。但就这么个东西,生成救过我一次大命。测试 去年有个项目,报告接口测试写了四百多条用例,生成跑起来全绿。测试可每次把结果甩给开发,报告对方要么甩回来一个txt文件截图,生成要么干脆问“这堆点号到底啥意思”。测试unittest默认的报告输出,一串点、生成F、测试E,报告懂的人看门道,不懂的人看热闹。开发老大站在我工位旁边,盯着满屏的绿点,憋了半天问了一句:“所以……到底测了啥?” 那一刻我意识到,测试报告不是给自己看的,是给那些不写测试的人看的。HtmlTestRunner的好处在于,它把“通过率”“失败原因”“耗时”这些冷冰冰的数字,变成了带颜色的表格和进度条。红的红,绿的绿,一眼扫过去就知道哪儿炸了。开发不用再追着你问“那个F是啥意思”,他自己打开网页,滚动到红色那一行,点开堆栈信息,问题就摆在那儿了。 用起来也糙。装个库,改一行测试入口代码,把原来的unittest.TextTestRunner()换成HtmlTestRunner.HTMLTestRunner(output='report'),完事儿。但有个坑得说——它默认的报告模板丑得跟2005年的论坛签名似的。蓝底白字,表格边框粗得像用马克笔画上去的。我头一回生成,打开网页那瞬间以为自己电脑中病毒了。后来学乖了,直接改它源码里的模板文件,把CSS整个换掉,字体调成无衬线,留白加大,颜色换成莫兰迪色系。折腾半小时,出来的报告终于像人做的了。 不过工具终归是工具。有一回我兴致勃勃把报告发给测试组长,对方回了个“收到”就没了下文。后来才知道,人家压根没打开那个HTML文件——公司邮箱默认屏蔽附件里的脚本,就算没屏蔽,IT那边安全策略也把本地HTML当危险品处理。白瞎了我精心调的配色。打那以后我学聪明了,生成报告后顺手截几张关键图,贴在邮件正文里,HTML文件只当存档用。 还有个细节,HtmlTestRunner对中文支持不算友好。用例名称里带中文,报告页面上偶尔会乱码。解决方案也简单,在生成报告的代码开头加一行reload(sys),或者干脆把报告文件用utf-8编码写出来。这问题不致命,但真遇到了挺膈应人——你辛辛苦苦写的“登录接口-参数缺失场景”,在报告里变成一串“锟斤拷”,那场面比报告丑还让人崩溃。 说到底,HtmlTestRunner就是个翻译官。把程序员之间的黑话,翻译成产品经理和开发老大能看懂的人话。它不解决测试本身的问题,但解决了测试结果“没人看”的问题。你要是团队里就你一个测试,那这工具爱用不用;但凡你得跟别人协作,哪怕只是每周发一封测试周报,它都能帮你省下十分钟解释“为什么有3个失败用例”的口舌。 最后提一嘴,新版Python里unittest的TestResult对象能拿到更多运行时数据,HtmlTestRunner也跟进了,支持展示每个用例的耗时、错误截图路径甚至自定义元数据。但别指望它自动生成什么“测试结论”——那是人该干的事儿。工具把事实摆清楚,怎么解读,还得靠你那张嘴。 |