当前位置: 首页 > 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'
]

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

http://www.xdnf.cn/news/360721.html

相关文章:

  • H5 移动端适配最佳实践落地指南。
  • 影楼精修-牙齿美型修复算法解析
  • 数据类型:List
  • robotframe启动ride.py
  • C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程
  • C#学习——继承、封装、多态
  • 安科瑞DJSF1352-RN直流电能表的技术特点与应用
  • ZYNQ笔记(十九):VDMA VGA 输出分辨率可调
  • 各类音频放大器电路原理简析
  • MSF 生成不同的木马 msfvenom 框架命令
  • html object标签介绍(用于嵌入外部资源通用标签)(已不推荐使用deprecated,建议使用img、video、audio标签)
  • Nx与Monorepo
  • 【软件测试】测试用例的概念与常见测试的模型
  • Django ORM: values() 和 annotate() 方法详解
  • 2025-05-09 提示学习概念
  • Edu教育邮箱申请2025年5月
  • 【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决
  • lambda 表达式
  • 摄像头模组高像素模组
  • AI模型蒸馏技术在微控制器上的内存占用与精度平衡实践
  • Java中的反射
  • C++23 中的 views::chunk:深入探索与应用
  • shopping mall(document)
  • 虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机的解决方案
  • 云原生架构下的微服务通信机制演进与实践
  • 每天批次导入 100 万对账数据到 MySQL 时出现死锁
  • TCP套接字通信核心要点
  • AI内容检测如何助力企业应对内容治理挑战
  • MySQL数据库操作
  • 纯Java实现反向传播算法:零依赖神经网络实战