当前位置: 首页 > news >正文

13.原生测试框架Unittest解决用例组织问题 与测试套件的使用

13. 原生测试框架Unittest解决用例组织问题 与测试套件的使用

一、测试架构核心组件解析

1.1 系统组成模块

发现测试
装载用例
输出结果
TestLoader
TestSuite
TextTestRunner
测试报告

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_dirNone项目顶层目录(可选)

三、测试执行控制体系

3.1 运行器配置参数

runner = unittest.TextTestRunner(verbosity=2  # 输出详细程度控制
)
verbosity级别说明:
级别输出内容适用场景
0仅显示总测试数/失败数简洁模式
1显示进度点(默认)常规执行
2显示完整用例名称/错误详情调试排查

3.2 测试执行流程

Runner Suite TestCase 加载测试集合 1 执行setUp() 2 执行测试方法 3 记录结果 4 执行tearDown() 5 loop [每个测试用例] 生成报告 6 Runner Suite TestCase

四、测试组织结构优化

4.1 多模块加载配置

# __init__.py配置示例
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 扩展执行能力

# 添加HTML测试报告
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
# loader = unittest.TestLoader()# 测试加载器 发现测试对象
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'
]

「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

相关文章:

  • 多视图密集对应学习:细粒度3D分割的自监督革命
  • 【Axios】解决Axios下载二进制文件返回空对象的问题
  • MapReduce报错 HADOOP_HOME and hadoop.home.dir are unset.
  • 课程审核流程揭秘:确保内容合规与用户体验
  • 高频算法面试题总结
  • 【25软考网工】第六章 网络安全(1)网络安全基础
  • 【MYSQL错误连接太多】
  • 如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
  • 自定义prometheus exporter实现监控阿里云RDS
  • 5月9号.
  • 数据分析怎么做?高效的数据分析方法有哪些?
  • 多容器运行
  • Python训练营打卡DAY20
  • Android应用隐私合规:解决极光推送SDK提前收集WiFi信息问题
  • 三维底座+智能应用,重构城市治理未来
  • 【计算机视觉】OpenCV项目实战:get_inverse_perspective:基于OpenCV的透视图转化为不同平面
  • Uniapp编写微信小程序,使用canvas进行绘图
  • 企业如何将钉钉付款单高效集成到金蝶云星空?
  • 数智读书笔记系列032《统一星型模型--一种敏捷灵活的数据仓库和分析设计方法》
  • 开源数字人框架 AWESOME - DIGITAL - HUMAN:技术革新与行业标杆价值剖析
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 身临其境感受伟人思想力量,“马克思书房”在上海社科馆揭幕
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外
  • 5月12日至13日北京禁飞“低慢小”航空器
  • 花20万骑自行车?CityRide带火“骑行经济”