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 = 2
self.list_1 = [4, 2, 7, 8, 4, 0]
print("开始")
def test_case1(self):
self.assertIn(2, self.list_1) # 断言self.data中是否包含2
print("测试用例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, 2
self.assertEqual(a, b) # 断言n是否等于2
print("测试用例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、测试执行结果: