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.mzph.cn/bicheng/80327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 脚部贴地不穿过地板方案

UE自带的IK RIG和ControlRig技术 【UE5】角色脚部IK——如何让脚贴在不同斜度的地面(设置脚的旋转)_哔哩哔哩_bilibili 实验后这个还是有一部分问题,首先只能保证高度不能穿过,但是脚步旋转还是会导致穿模 IK前,整个模型在斜坡上会浮空 参考制作:https://www.youtube.com/w…

关于 js:4. 异步机制与事件循环

一、同步 vs 异步 1. 什么是同步(Synchronous) 同步代码就是一行一行、按顺序执行的。当前行没有执行完,下一行不能动。 示例: console.log("A"); console.log("B"); console.log("C");输出&am…

如何通过外网访问内网?对比5个简单的局域网让互联网连接方案

在实际应用中,常常需要从外网访问内网资源,如远程办公访问公司内部服务器、在家访问家庭网络中的设备等。又或者在本地内网搭建的项目应用需要提供互联网服务。以下介绍几种常见的外网访问内网、内网提供公网连接实现方法参考。 一、公网IP路由器端口映…

java的输入输出模板(ACM模式)

文章目录 1、前置准备2、普通输入输出API①、输入API②、输出API 3、快速输入输出API①、BufferedReader②、BufferedWriter 案例题目描述代码 面试有时候要acm模式,刷惯leetcode可能会手生不会acm模式,该文直接通过几个题来熟悉java的输入输出模板&…

什么是移动设备管理(MDM)

移动设备管理(MDM)是一种安全解决方案,旨在监控、管理和保护企业的移动设备(包括智能手机、平板电脑、笔记本电脑和计算机)。MDM软件是IT部门的关键工具,其核心功能包括设备配置、安全策略实施、远程控制及…

c++中构造对象实例的两种方式及其返回值

c中,构造对象实例有两种方式,一种返回对象实例,一种返回该对象实例的指针。如下所示: 一、两种返回值 RedisConn conn1; //得到实例conn1;RedisConn *conn2 new RedisConn();//得到指针conn2;RedisConn conn3 new RedisConn()…

【Unity笔记】PathCreator使用教程:用PathCreator实现自定义轨迹动画与路径控制

在Unity开发过程中,角色移动、摄像机动画、轨道系统、AI巡逻等功能中,路径控制是常见又复杂的需求之一。如何优雅、高效地创建路径并控制对象沿路径运动,是游戏开发、动画制作乃至工业仿真中的关键问题。 在这篇文章中,我将介绍一…

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

[人机交互]交互设计过程

*一.设计 1.1什么是设计 设计是一项创新活动,旨在为用户提供可用的产品 –交互设计是“设计交互式产品、以支持人们的生活和工作” 1.2设计包含的四个活动 – 识别用户的需要( needs )并建立需求( requirements &…

1. 视频基础知识

1. 图像基础概念 像素:像素是一个图片的基本单位,pix是英语单词picture,加上英语单词“元素element”,就得到了pixel,简称px。所以“像素”有“图像元素”之意。分辨率:指的是图像的大小或者尺寸。比如 19…

代理IP是什么,有什么用?

一、什么是代理IP? 简单理解,代理IP是一座桥梁——你通过它连接到目标服务器,而不是直接暴露自己。这里的“IP”是网络世界中的地址标签,而代理IP在运行时,蹦跶到台前,成为目标服务器看到的那个“地址”。…

日常代码逻辑实现

日常代码逻辑实现: 1.防抖 解释: 防抖是指n秒内只执行一次,如果n秒内事件再次触发,则重新计算时间 应用场景: 搜索框输入联想(避免每次按键都发送请求)窗口尺寸调整 代码实现:…

北斗导航 | RTKLib中模糊度解算详解,公式,代码

模糊度解算 一、模糊度解算总体流程二、核心算法与公式推导1. **双差模糊度定义**2. **浮点解方程**三、LAMBDA算法实现细节1. **降相关变换(Z-transform)**2. **整数最小二乘搜索**3. **Ratio检验**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集选择策…

基于大模型的母婴ABO血型不合溶血病全方位预测与诊疗方案研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、母婴 ABO 血型不合溶血病概述 2.1 发病机制 2.2 临床表现 2.3 流行病学特征 三、大模型在母婴 ABO 血型不合溶血病预测中的应用 3.1 模型选择与构建 3.2 预测指标与数据输入 3.3 模…

驱动-互斥锁

互斥锁可以说是“量值” 为 1 的 信号量, 最终实现的效果相同, 既然有了信号量, 那为什么还要有互斥锁呢? 这就是我们这里需要了解并掌握的 文章目录 参考资料互斥锁的介绍互斥锁结构体 - mutex互斥锁 API互斥锁实验源码程序-mute…

人工智能100问☞第17问:智能体的定义及其基本特征?

目录 一、通俗解释 二、专业解析 三、权威参考 智能体是能够通过传感器感知环境、自主决策并借助执行器采取行动以实现特定目标的智能实体或系统。 一、通俗解释 智能体就像一台能自己“看、想、动”的智能机器。比如你手机里的语音助手,它能听懂你说的话&…

Linux系统入门第十一章 --Shell编程之函数与数组

一、Shell函数 1、函数的用法 Shell函数可用于存放一系列的指令。在Shell脚本执行的过程中,函数被置于内存中,每次调用函数时不需要从硬盘读取,因此运行的速度比较快。在Shell编程中函数并非是必须的元素,但使用函数可以对程序进…

Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”

Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机” Baumer工业相机​为什么偏爱“黑白相机”?​工业视觉中为什么倾向于多使用黑白相机黑白相机在工业视觉中的应用场景有哪些? Baumer工业相机 工业相机是常用与工业视觉领域的常用专业视觉…

MiM: Mask in Mask Self-SupervisedPre-Training for 3D Medical Image Analysis

Abstract Vision Transformer在3D医学图像分析的自监督学习(Self-Supervised Learning,SSL)中展现了卓越的性能。掩码自编码器(Masked Auto-Encoder,MAE)用于特征预训练,可以进一步释放ViT在各…

SQL注入的绕过方式

1.注释与空白符绕过 利用#,--,/**/替代被过滤的注释符 利用%09(Tab),%0A(换行) ,/**/代替空格:如union%0Aselect%0A1,2,3 2.编码绕过: URL编码,双重编码,十六进制编码,Unicode编…