刚进公司的时候第一次听说自动化测试和自动化运帷的概念。后来项目大了之后,平凡上下线,最耗时的事情就是测试了。之前就听说过TDD(Test-Dtriven Development),但是那个时候也只是听听,知道那么回事。近段时间交易项目平凡上下线,改动较大,由于测试不完全,导致了不少问题。于是我决定在项目中加入单元测试。
Python中标准库自带的单元测试模块(unittest也叫pyunit)。
pyunit中又四个重要的概念
test fixture : 每个固件执行完之后都会调用清理函数tearDown,在执行之前都会执行初始化函数setUp。
test case : 测试用例,就是一个最小单元的测试。注意:这里的测试用例的概念和unittest.TestCase的概念不一样,这里的test case是unittest.TestCase中以test开头的函数,TestCase之所叫TestCase只不过是因为很多初始化和清理的函数相同,可以写到一起。
test suite : 这是一些test case的集合。
test runner : 测试执行。
1 |
|
这里的ElevenTest类继承自TestCase,但是这个类不是一个测试用例,它里面又两个测试方法,这里的测试方法才是测试用例。注意,只有方法名以test开头的才会被当成是测试方法,不然不会记录统计。
这里的每一个测试方法都是一个text fixture,也就是说没执行一个测试方法都会调用setUp和tearDown方法。ElevenTest也是一个text fixture,当ElevenTest执行完之后,会执行setUpClass和tearDownClass。同时这整个文件(module)也是一个text fixture,当这个module执行完之后会调用setUpModule和tearDownModule方法。
当然test suite可以包含很多unittest.TestCase,同时它也能包含其他TestSuite。
unittest模块只是争对单元测试开发的,用起来很方便,但是对于集成测试没有什么十分大的作用。之前我的做法是事先将所有的环境建好,所有的测试用力全部放在一套单独的数据库中,后来想想既然模块中提供了setUp和tearDown方法,就在初始化的时候就把测试的环境建好了,然后在tearDown将环境恢复。创建环境的大部分操作都是有相同部分的。所以可以单独给自己写一个测试基类。另外环境相同的测试方法可以放在同一个TestCase中。