| 组件名称 |
核心作用 |
使用场景 |
典型生命周期 |
与其他组件关系 |
| TestFixture |
准备和清理(setUp/tearDown) |
数据库连接/断开、临时文件创建/删除、模拟对象初始化 |
setUp() → 测试方法 → tearDown() |
被TestCase继承使用 |
| TestCase |
测试最小执行单元(继承unittest.TestCase) |
编写具体测试方法(test_开头的方法) |
实例化 → 执行测试方法 → 销毁 |
包含多个TestFixture,组成TestSuite |
| TestSuite |
测试用例集合容器(可嵌套组合测试) |
批量执行测试、自定义测试顺序、分组测试 |
添加测试用例 → 执行套件 → 生成报告 |
组合多个TestCase,交给TestRunner执行 |
| TestRunner |
测试执行的调度器和输出控制器(如TextTestRunner) |
控制测试输出格式(文本/HTML)、决定失败处理策略 |
加载TestSuite → 测试 → 输出结果 |
驱动TestSuite执行,生成测试报告 |
如下是按自定义顺序测试的例子
也可以修改 runner 的参数以自动匹配测试用例, 但执行顺序会自动按照字母序.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| import unittest
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
class TestBase(unittest.TestCase): @classmethod def setUpClass(cls): print("Start TestFunc") cls.conf = {}
cls.conf = {"db_path": "test.db"}
class TestFunc(TestBase):
def test_1_add(self): print("add") self.assertEqual(3,add(1,2))
def test_2_minus(self): print("minus") self.assertEqual(3,minus(5,2))
def test_3_multi(self): print("multi") self.assertEqual(6,multi(2 ,3))
def test_4_divide(self): print("divide") self.assertEqual(2,divide(4,2))
def suite(): """创建自定义测试套件并指定执行顺序""" suite = unittest.TestSuite() suite.addTest(TestFunc("test_1_add")) suite.addTest(TestFunc("test_2_minus")) suite.addTest(TestFunc("test_4_divide")) suite.addTest(TestFunc("test_3_multi")) return suite
if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2) runner.run(suite())
|
https://segmentfault.com/a/1190000016315201