python unittest理解
一、运行流程

二、使用方法:
1、定义一个继承unittest.TestCase的类,类中已test_开头方法就是执行时的测试用例
########################### #name:test_unittest.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ def add(a, b): return a+b def minus(a, b): return a-b def multi(a, b): return a*b def divide(a, b): return a/b
########################## #name:test_case.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ import test_unittest import unittest class MyTest(unittest.TestCase): def test_add(self): self.assertEqual(5,test_unittest.add(2,3)) def test_minus(self): self.assertEqual(2,test_unittest.minus(5,3)) def test_multil(self): self.assertEqual(6,test_unittest.multi(2,3)) def test_divide(self): self.assertEqual(2,test_unittest.divide(6,2)) if __name__ == '__main__': unittest.main(verbosity=2)
2、上述直接执行,可以将多个测试方法,加入到一个TestSuile(测试套件)中,执行一个或多个测试套件
############################################ #name:test_unittest.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ def add(a, b): return a+b def minus(a, b): return a-b def multi(a, b): return a*b def divide(a, b): return a/b ########################################### #name:test_case.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ import test_unittest import unittest class MyTest(unittest.TestCase): def test_add(self): self.assertEqual(5,test_unittest.add(2,3)) def test_minus(self): self.assertEqual(2,test_unittest.minus(5,3)) class MyTest2(unittest.TestCase): def test_multil(self): self.assertEqual(6,test_unittest.multi(2,3)) def test_divide(self): self.assertEqual(2,test_unittest.divide(6,2)) if __name__ == '__main__': unittest.main(verbosity=2) #############################################
#name:test_suite.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ import test_unittest from test_case import * import unittest if __name__ == '__main__': suite = unittest.TestSuite() suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_case.MyTest','test_case.MyTest2'])) runner = unittest.TextTestRunner(verbosity=2) runner.run(suite)
3、将结果输出到文件
if __name__ == '__main__': suite = unittest.TestSuite() suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_case.MyTest','test_case.MyTest2'])) with open('result1.txt','a') as f: runner = unittest.TextTestRunner(stream=f,verbosity=2) runner.run(suite)
4、setUp()与tearDown()
setUp() 和 tearDown 分别会在每条用例执行前后执行一次,用于环境的准备和复原
setUpClass() 和 tearDownClass() 分别会在每个unittest.TestCase 类执行前后执行一次
class MyTest(unittest.TestCase): def setUp(self): print 'setUp is running!' def tearDown(self): print 'tearDown is running!' def test_add(self): self.assertEqual(5,test_unittest.add(2,3)) def test_minus(self): self.assertEqual(2,test_unittest.minus(5,3)) class MyTest2(unittest.TestCase): @classmethod def setUpClass(cls): print 'setUpClass is running!' @classmethod def tearDownClass(cls): print 'tearDownClass is running!' def test_multil(self): self.assertEqual(6,test_unittest.multi(2,3)) def test_divide(self): self.assertEqual(2,test_unittest.divide(6,2))

5、跳过一条用例
skip装饰器一共有三个 unittest.skip(reason)、unittest.skipIf(condition, reason)、unittest.skipUnless(condition, reason),skip无条件跳过,skipIf当condition为True时跳过,skipUnless当condition为False时跳过。
6、使用HTMLTestRunner
6.1 下载HTMLTestRunner到当前文件 https://github.com/GoverSky/HTMLTestRunner_cn
6.1 修改代码,更改runner
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import test_unittest from test_case import * import unittest from HTMLTestRunner_cn import HTMLTestRunner if __name__ == '__main__': suite = unittest.TestSuite() suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_case.MyTest','test_case.MyTest2'])) # with open('result1.txt','a') as f: # runner = unittest.TextTestRunner(stream=f,verbosity=2) # runner.run(suite) with open('runner.html','a') as f: runner = HTMLTestRunner(stream=f, verbosity=2, title='我就是尝试下',description='我不知道这是什么意思') runner.run(suite)


浙公网安备 33010602011771号