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

课外活动:简单了解原生测试框架Unittest前置后置的逻辑

简单了解原生测试框架Unittest前置后置的逻辑

一、测试框架执行顺序解析

1.1 基础执行流程

import unittestclass A(unittest.TestCase):@classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{self._testMethodName}")def test_a(self):print("▶ 执行测试逻辑A")def test_b(self):print("▶ 执行测试逻辑B")def tearDown(self):print(f"【TEST END】{self._testMethodName}")@classmethoddef tearDownClass(cls):print(f"【CLASS END】{cls.__name__}")

1.2 执行顺序可视化

TestClass TestCase setUpClass() 1 setUp() 2 test_method() 3 tearDown() 4 loop [每个测试方法] tearDownClass() 5 TestClass TestCase

二、核心方法功能解析

2.1 类级别方法

方法触发时机执行次数典型应用场景
setUpClass()测试类初始化时1次数据库连接建立
tearDownClass()测试类所有方法执行完成后1次资源释放/日志归档

代码实现特征:

@classmethod
def setUpClass(cls):# 必须使用classmethod装饰器# 通过cls参数访问类属性# 不能直接调用实例方法

2.2 实例级别方法

方法触发时机执行次数典型应用场景
setUp()每个测试方法执行前N次(N=测试方法数)测试数据初始化
tearDown()每个测试方法执行后N次环境清理/结果验证

方法调用关系:

测试启动
├── setUpClass()
│   ├── setUp() -> test_a() -> tearDown()
│   └── setUp() -> test_b() -> tearDown()
└── tearDownClass()

三、代码执行过程深度分析

3.1 实际执行日志

【CLASS START】A
【TEST START】test_a
▶ 执行测试逻辑A
【TEST END】test_a
【TEST START】test_b
▶ 执行测试逻辑B
【TEST END】test_b
【CLASS END】A

3.2 关键执行节点说明

  1. 类初始化阶段

    • 创建测试类实例前执行setUpClass()
    • 适用于全局配置加载
  2. 测试方法执行周期

    setUp
    test_method
    tearDown
  3. 类销毁阶段

    • 所有测试执行完毕后调用tearDownClass()
    • 必须使用@classmethod装饰器

四、特殊场景处理机制

4.1 异常中断处理

def setUp(self):try:# 初始化操作except Exception as e:self.skipTest(f"初始化失败: {str(e)}")@classmethod
def tearDownClass(cls):if hasattr(cls, 'db_conn'):cls.db_conn.close()  # 确保资源释放

4.2 多层级继承场景

class BaseTest(unittest.TestCase):@classmethoddef setUpClass(cls):print("父类初始化")class ChildTest(BaseTest):@classmethoddef setUpClass(cls):super().setUpClass()  # 必须显式调用父类方法print("子类初始化")

五、最佳实践建议

  1. 资源管理原则

    • setUpClass中打开文件/数据库连接
    • tearDownClass中关闭连接
    • setUp中初始化测试数据
    • tearDown中清理临时数据
  2. 执行效率优化

    15% 10% 50% 25% 方法执行时间占比 setUpClass tearDownClass setUp/tearDown 测试逻辑
    "setUpClass" : 15
    "tearDownClass" : 10
    "setUp/tearDown" : 50
    "测试逻辑" : 25
    

六、完整代码

"""
Python :3.13.3
Selenium: 4.31.0
"""import unittestclass A(unittest.TestCase):@classmethoddef setUpClass(cls):print(cls.setUpClass.__name__)def setUp(self):print(self.setUp.__name__)def test_a(self):print(self.test_a.__name__)def test_b(self):print(self.test_b.__name__)@classmethoddef tearDownClass(cls):print(cls.tearDownClass.__name__)def tearDown(self):print(self.tearDown.__name__)

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

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

相关文章:

  • 录播课视觉包装与转化率提升指南
  • 【NextPilot日志移植】整体功能概要
  • 迪士尼机器人BD-X 概况
  • 5G + AR:让增强现实真正“实时交互”起来
  • 前端取经路——框架修行:React与Vue的双修之路
  • 数据来源合法性尽职调查:保障权益的关键防线
  • Android不能下载Gradle,解决方法Could not install Gradle distribution from.......
  • 2025最新:3分钟使用Docker快速部署单节点Redis
  • python+open3d获取点云的最小外接球体及使用球体裁剪点云
  • 蓝桥杯青少 图形化编程(Scratch)每日一练——校门外的树
  • VGGNet详解
  • java集成telegram机器人
  • [特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)
  • 赋能金融科技创新,Telerik打造高效、安全的金融应用解决方案!
  • Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址
  • 从ellisys空口分析蓝牙耳机回连手机失败案例
  • 正则表达式(Regular Expression)详解
  • 关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题
  • 【Python 字符串】
  • Java常用API:深度解析与实践应用
  • 【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
  • 安装 Docker
  • ZC706开发板教程:windows下编译ADRV9009
  • vue 中如何使用region?
  • PyTorch 实战:从 0 开始搭建 Transformer
  • 解决word里插入公式后打不开的问题
  • Linux-openeuler更换yum镜像源
  • uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图)
  • 村田与RohdeSchwarz联合开发用于测量Digital ET省电效果的RF系统
  • 网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)