自动化单元测试要点 软件测试
用单元测试的框架MSTEST,做单元测试,集成测试快1年了,总结一下工作中学到都东西。
单元测试,集成测试有什么用?
1. 改进产品质量
软件测试,很多时候围绕着两个问题:
Verification和Validation,常说的双V。前面的Verification就是Is the software built correctly?。后面的Validation就是Have we built the right software?
单元测试,更多的是Verification。所以有时候经过我单元测试和集成测试以后的功能模块,在交给其他同事做功能测试的时候,依然会有一些 BUG,这时候开发可能会埋怨我测试得不够完全,诸如此类。但是其实很多时候,我的关注点是单个方法的功能、行为,没有站到更高的位置来测试这个模块。对于这样的问题,开发和测试应该互相体谅,我本人也会提高自身的水平。希望在单元测试和集成测试中也加入更多关于Validation的思考。
有一个提法叫Tests as Specification,单元测试本身其实就是模拟某个模块的使用者(其他的程序)来进行测试。很多时候我写的测试代码也是其他开发人员的参考,尤其在一些事实上或者只是号称自己是敏捷开发的组织里面,测试代码有可能成为详细设计的替代品,因为有可能根本没有详细设计文档。
单元测试的另一个工作就是发现并且定位BUG。对于BUG的定位和重现,在单元测试代码的编写过程中,每个Assert语句后面都要加上尽可能详细的信息,例如导致这个Assert语句失败的每个参数值,期望结果,实际结果等,这些信息可以帮助开发和测试快速定位问题,减少不必要的DEBUG时间。
2. 降低项目的风险
软件测试,其实是用有限来验证无限的一个过程,很多时候做什么样的测试,做到什么样的程度,很多时候都跟风险有关系。
作为产品的安全网,各种测试在项目中都扮演着重要的角色。例如,中美交互的几十个Web Service接口的回归测试,现在有若干个测试,每天定时做回归测试,因为没人知道在美国的服务器会发生什么事情;对于中国的Web Service,在上线前都会通过回归测试,才部署上线。还有全站的Platform Service接口,每次上线前都需要在做回归测试。软件测试的另一个有趣的结论就是:测试只能证明软件有BUG,但是无论什么样的测试,都不能证明被测软件是没有BUG的。问题出来了,我做完回归测试,都通过了,但是我却不能证明这个软件是没有BUG的。其实每次上线,团队都承担着风险,只不过这样的风险在完成回归测试之后,大家上线的信心增加,风险明显地减小。
什么样的测试才是好的测试?
1. 容易运行
什么样的单元测试是容易运行?答案很简单,自动化的单元测试就是容易运行的测试。如果一批测试在运行之前每次都需要重装系统然后还要找一大堆需要依赖的软件来装上,最后还要输入奇怪的命令才能运行,那么就不是一个好的测试(本人真的见过这样的测试,囧)。个人认为,配置好的持续集成系统,可以实现很好的自动化测试;如果没有一个完善的CI,那么一个one click的自动化测试运行也是一个较好的选择。
文章来源于领测软件测试网 https://www.ltesting.net/