本文介绍如何为 python unittest 测试用例设置执行优先级,借助 unitplus 库实现按耗时长短智能调度(如长耗时测试优先运行),从而提升多核并行测试效率,并支持灵活的测试筛选与计划管理。
在大型 Python 项目中,随着测试用例数量增长,单纯依赖 unittest 或 pytest 的默认执行顺序(通常按方法名字母序)会导致资源利用不均:短测试快速完成而长测试积压在队列尾部,严重拖慢整体 CI/CD 流水线耗时。理想策略是让高耗时、高优先级的测试尽早启动——这正是测试优先级(Test Priority)机制的价值所在。
原生 unittest 不支持优先级标记,但可通过轻量增强库 unitplus 实现。它完全兼容标准 unittest 语义,无需重构现有测试结构,仅需两步即可启用优先级调度:
✅ 第一步:安装与基础用法
pip install unitplus
将测试类继承自 unitplus.TestCase(而非 unittest.TestCase),并通过 @unitplus.test(priority=…) 装饰器显式声明优先级:
# testcases/test_demo.py
import unitplus
class TestClass(unitplus.TestCase):
# 类级默认优先级(可选)
priority = 'p1'
@unitplus.test(priority='p2') # 最高优先级,最先执行
def test_high_priority(self):
import time; time.sleep(3) # 模拟长耗时操作
self.assertTrue(True)
@unitplus.test(priority='p1') # 中等优先级
def test_medium_priority(self):
self.assertEqual(2 + 2, 4)
@unitplus.test(priority='p0') # 最低优先级,最后执行
def test_low_priority(self):
self.assertIn('a', 'abc')
def test_low_priority2(self): # 无装饰器 → 使用类级默认 priority='p1'
self.assertTrue(True)
? 优先级命名规范:unitplus 使用字符串形式(如 ‘p0’, ‘p1’, ‘p2’),按字典序升序执行(即 ‘p0’
✅ 第二步:构建可调度的测试计划(TestPlan)
为实现“按优先级分批执行”或“仅运行指定优先级子集”,unitplus 提供 TestPlan 机制。以下示例将仅运行 p0 和 p1 级别测试(跳过最耗时的 p2,适用于快速验证场景):