13. 原生测试框架Unittest解决用例组织问题 与测试套件的使用
一、测试架构核心组件解析
1.1 系统组成模块
1.2 关键组件功能对照表
组件 | 功能描述 | 对应代码实现 |
---|
TestLoader | 扫描发现测试用例 | unittest.defaultTestLoader |
TestSuite | 装载测试集合容器 | unittest.TestSuite() |
TextTestRunner | 执行测试并输出结果 | unittest.TextTestRunner() |
TestCase | 测试用例基类 | unittest.TestCase |
二、测试发现机制详解
2.1 路径配置实现
CASE_PATH = join(dirname(__file__), './chap4/case')
路径处理要点:
- 使用
os.path
保证跨平台兼容性 - 相对路径转换为绝对路径
- 支持多级目录结构扫描
2.2 测试加载流程
for test in tests:test_suit = loader.discover(start_dir=CASE_PATH, pattern=test )suit.addTest(test_suit)
discover方法参数解析:
参数 | 值示例 | 作用说明 |
---|
start_dir | ‘./chap4/case’ | 测试代码根目录 |
pattern | ‘test_*.py’ | 文件匹配模式(支持通配符) |
top_level_dir | None | 项目顶层目录(可选) |
三、测试执行控制体系
3.1 运行器配置参数
runner = unittest.TextTestRunner(verbosity=2
)
verbosity级别说明:
级别 | 输出内容 | 适用场景 |
---|
0 | 仅显示总测试数/失败数 | 简洁模式 |
1 | 显示进度点(默认) | 常规执行 |
2 | 显示完整用例名称/错误详情 | 调试排查 |
3.2 测试执行流程
四、测试组织结构优化
4.1 多模块加载配置
tests = ['test_module_1.py', 'test_module_2.py'
]
组织策略对比:
策略类型 | 示例 | 特点 |
---|
模块粒度 | test_*.py | 按功能模块划分 |
类粒度 | ClassName | 按测试场景划分 |
方法粒度 | test_methodName | 精确控制单个测试 |
4.2 执行范围控制
tests = ['test_*.py', 'TestClass', 'module.TestClass.test_method'
]
五、工程化实践建议
5.1 目录结构规范
project/
├── src/ # 源码目录
├── tests/ # 测试目录
│ ├── __init__.py # 测试配置
│ ├── module1/ # 模块测试包
│ └── module2/
└── runner.py # 统一执行入口
5.2 扩展执行能力
from HTMLTestRunner import HTMLTestRunner
runner = HTMLTestRunner(output='report.html',verbosity=2
)
六、完整代码
"""
Python :3.13.3
Selenium: 4.31.0start.py
"""
from os.path import join, dirname
import unittest
from chap4.case import testsCASE_PATH = join(dirname(__file__), './chap4/case')
suit = unittest.TestSuite()
loader = unittest.defaultTestLoader
for test in tests:test_suit = loader.discover(start_dir=CASE_PATH, pattern=test)suit.addTest(test_suit)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suit)
"""
Python :3.13.3
Selenium: 4.31.0test_module_1.py
"""import unittestclass A(unittest.TestCase):def test_a1(self):self.assertEqual(1,2)def test_a2(self):...class B(unittest.TestCase):def test_b1(self):...def test_b2(self):...
"""
Python :3.13.3
Selenium: 4.31.0test_module_2.py
"""import unittestclass C(unittest.TestCase):def test_a1(self):...def test_a2(self):...class D(unittest.TestCase):def test_b1(self):...def test_b2(self):...
"""
Python :3.13.3
Selenium: 4.31.0__init__.py
"""tests = ['test_module_1.py','test_module_2.py'
]
「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀