unittest用例执行的流程




unittest 的用例执行大致有三种常见方式,核心其实都是围绕 运行器(TestRunner) 和 用例/套件的 run
方法 来展开的:
通过 测试运行器 TestRunner 执行
最常见的就是使用 unittest.TextTestRunner 。
运行器会接收一个 测试套件(TestSuite) 或者 测试用例(TestCase),然后统一调度。
示例:
特点:
runner.run(suite) 负责执行,内部会调用 测试套件的 run 方法。
日志、统计、结果封装都由 TextTestRunner 处理。
实际项目里最常用。
直接调用 测试用例的 run 方法
unittest.TestCase 本身也有一个 run 方法,可以直接执行单个用例。
示例:
特点:
case.run(result) 会执行生命周期( setUp → test_xxx → tearDown )。
需要手动传入一个 TestResult 实例。
很少在业务中直接用,更多用于框架二次封装。
import unittest
class MyTest(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 1, 2)
if name " main ":
suite = unittest.TestLoader().loadTestsFromTestCase(MyTest)
runner = unittest.TextTestRunner()
runner.run(suite)
import unittest
class MyTest(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 1, 2)
if name " main ":
case = MyTest("test_add")
result = unittest.TestResult()
case.run(result) # 直接运行单个用例
print(result)
直接调用 测试套件的 run 方法
TestSuite 其实就是一组 TestCase 的集合。
套件的 run(result) 会循环执行内部所有用例。
示例:
特点:
suite.run(result) 内部会遍历用例,调用每个 case 的 run(result) 。
也是底层原理,但一般我们通过 TestRunner 来调度,不会手动调用。
执行链路:
也就是说:
最上层: TestRunner (比如 TextTestRunner),用户主要和它交互。
中间层: TestSuite 的 run 方法,负责组织多个用例。
底层: TestCase 的 run 方法,真正执行测试逻辑





浙公网安备 33010602011771号