常见的python的unitest用法
#!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys import time import datetime import unittest class NginxTest(unittest.TestCase): def setUp(self): #预置环境 print ‘--------------NginxTestsetUp--------------\n‘ def tearDown(self): #清理环境 print ‘--------------NginxTestclear--------------\n‘ def test_nginx(self): print ‘test_nginx‘ def test_nginxlog(self): print ‘test_nginxlog‘ @unittest.skip("must skipping") #必须跳过下面用例,相当少用 def test_mustskip(self): print ‘test_mustskip‘ # def test_1(self): # a=1 # return 1 @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")#根据条件跳过下面这个用例 def test_maybeskip(self): print ‘test_maybeskip‘ def suite_1(self):#非test开头的用例在NginxTest中不会被跑到 print ‘suite_1‘ def suite_2(self): print ‘suite_2‘ class PhpTest(unittest.TestCase):#因为每个接口的预置环境可能不一样,所以每个接口的用例应该都用单独class来包含,不过每个class的用例都还是要用test开头 def setUp(self): #预置环境 print ‘--------------PhpTestsetUp--------------\n‘ def tearDown(self): #清理环境 print ‘--------------PhpTestclear--------------\n‘ def test_php(self): print ‘test_php‘ def test_phplog(self): print ‘test_phplog‘ def suite():#这个表示测试集,不要放在class内,否则会提示"没有这样的测试方法在<class‘myapp.tests.SessionTestCase‘>:的runTest ",我觉得它唯一的好处就是调试的时候可以单独调试它而已,我一般不用它,调试时可以注销不需要的class啊 ;-) suite = unittest.TestSuite() suite.addTest(NginxTest("suite_1")) suite.addTest(NginxTest("suite_2")) unittest.TextTestRunner().run(suite) if __name__ == ‘__main__‘: unittest.main(exit = False,verbosity=2)#它是全局方法,把它屏蔽后,不在suite的用例就不会跑,exit = False表示中间有用例失败也继续执行;还有比较常用的verbosity=2,表示显示def名字 suite()#执行suite
如果接口相当多,为了方便维护,建议每个class用独立的py来写,然后用一个“总入口”去import所有py,然后再调用就行了,这是suite就派上用场了
举个例子,case.py如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import time import datetime import unittest class LuaTest(unittest.TestCase): def runTest(self): print ‘anything‘ def setUp(self): #预置环境 print ‘--------------LuaTestsetUp--------------\n‘ def tearDown(self): #清理环境 print ‘--------------LuaTestclear--------------\n‘ def test_lua(self): print ‘test_lua‘ def test_lualog(self): print ‘test_lualog‘ def casesuite(): suite = unittest.TestSuite() suite.addTest(LuaTest("test_lua")) suite.addTest(LuaTest("test_lualog")) unittest.TextTestRunner().run(suite)
调用case.py的“总入口py”就得这样写:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys import time import datetime import unittest import case if __name__ == ‘__main__‘: case.casesuite()
如果case.py没有用casesuite“收集”它的用例的话,总入口调不了里面的用例的,不知道是不是我的用法有问题,如果有朋友知道欢迎提示。有的文章说用discover可以实现同样的需求,不过我不会。。。
最后说一下,我最常用的方法是assertEqual、assertNotEqual。
原文:http://www.cnblogs.com/idbeta/p/5040187.html