1、unittest核心组成:
TestFixture:对一个测试用例环境的搭建和销毁,一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现。如可以在setUp()中通过建立数据库连接来初始化,在tearDown()中清除数据库产生的数据,关闭连接等
TestCase:一个完整的测试流程,包括测试前的准备工作(setUp)、测试过程的代码、善后工作(tearDown)单元测试的本质就是一个测试用例,也就是一个完整的测试单元
TestSuite:把多个测试用例集合在一起执行,就产生的测试套件的概念TestSuite,TestSuite用来组装单个测试用例。通过addTest()加载TestCase到TestSuite中,从而返回一个TestSuite实例
TestRunner:用于测试执行,一般单元测试框架中都会提供丰富的执行策略和执行结果,在unittest单元测试框架中,通过TextTestRunner类提供的run()方法来执行测试套件/测试用例,TestRunner可以使用图形界面、文本界面,或返回一个特殊的值等方式,来表示测试结果
2、unittest简单应用
import unittest
class UnitTest(unittest.TestCase): # 创建继承类def setUp(self) -> None: # 初始化,前置条件self.n = 2self.list_1 = [4, 2, 7, 8, 4, 0]print("开始")def test_case1(self):self.assertIn(2, self.list_1) # 断言self.data中是否包含2print("测试用例1")def test_case2(self):self.assertTrue(self.n == 2) # 断言条件是否为真print("测试用例2")def test_case3(self):self.assertFalse(self.n != 2) # 断言条件是否为假print("测试用例3")def test_case4(self):self.assertNotEqual(self.n, 6) # 断言是否不相等print("测试用例4")def test_case5(self):a, b = 2, 2self.assertEqual(a, b) # 断言n是否等于2print("测试用例5")def tearDown(self) -> None: # 环境还原,执行每个测试用例的后置条件print("结束")
if __name__ == "__main__":unittest.main() # 执行当前文件所有test开头用例
3、unittest中suite套件运用
(1)执行用例方法一
if __name__ == "__main__":suite = unittest.TestSuite() # 创建测试套件case_list = ['test_case1', 'test_case2', 'test_case3', 'test_case4', 'test_case5']for i in case_list:suite.addTest(UnitTest(i)) # 添加测试用例run0 = unittest.TextTestRunner(verbosity=2)# verbosity :表示测试报告信息的详细程度,一共三个值,默认是2# 0 ( 静默模式 ) :你只能获得总的测试用例数和总的结果,如:总共 100 个 失败 10 成功 90# 1 ( 默认模式 ) :类似静默模式,只是在每个成功的用例前面有个 . 每个失败的用例前面有个 F# 2 ( 详细模式 ) :测试结果会显示每个测试用例的所有相关的信息run0.run(suite) # 执行套件中测试用例
(2)执行用例方法二
if __name__ == "__main__":suite = unittest.TestSuite() # 创建测试套件suite.addTest(UnitTest('test_case1'))suite.addTest(UnitTest('test_case2'))suite.addTest(UnitTest('test_case3'))suite.addTest(UnitTest('test_case4'))suite.addTest(UnitTest('test_case5'))run0 = unittest.TextTestRunner(verbosity=2)run0.run(suite) # 执行套件中测试用例
(3)执行用例方法三
if __name__ == "__main__":suite = unittest.TestSuite()#创建测试套件loader = unittest.TestLoader()# 创建一个加载对象suite .addTest(loader.loadTestsFromTestCase(UnitTest))run0 = unittest.TextTestRunner(verbosity=2)run0.run(suite) # 执行套件中测试用例
4、测试执行结果: