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

4.前后置处理:setup_class/setup_method 详

承接上一篇 Pytest 入门:用例命名规则 + 命令行 + pytest.ini 配置,本篇专门解决遗留问题:Pytest 测试类禁止__init__构造方法,如何实现用例数据 / 环境初始化?

一、什么是前后置(setup/teardown)

自动化测试里的前后置:在测试用例执行之前做环境初始化、数据准备、连接数据库 / 接口登录;用例执行之后做资源释放、关闭连接、清理测试脏数据。 因为 Pytest 测试类不允许自定义__init__构造函数,框架内置两套类级别前后置方法,同时预留高级 Fixture 方案,三种实现方式:

  • setup_method / teardown_method:每个用例独立前后置(方法级别)
  • setup_class / teardown_class:整个测试类只执行一次前后置(类级别)
  • @pytest.fixture:Pytest 官方推荐灵活前后置

二、方法级前后置:setup_method & teardown_method

作用

针对类中每一条 test 开头的测试方法执行 1 次用例就跑 1 次前置 + 后置

适用场景:每个接口用例都需要重新登录、每次请求前重置测试数据。

完整示例代码

# test_setup_demo.py class TestExample: # 每个测试方法执行前自动执行 def setup_method(self): print("【前置】每个用例执行前:初始化数据/登录账号") # 每个测试方法执行完毕自动执行 def teardown_method(self): print("【后置】每个用例结束后:清理测试数据/关闭连接") def test_example1(self): print("=====执行测试用例1=====") def test_example2(self): print("=====执行测试用例2=====")

执行命令

# -s 开启控制台print打印 pytest -vs test_setup_demo.py

运行输出结果

plaintext

test_setup_demo.py::TestExample::test_example1 【前置】每个用例执行前:初始化数据/登录账号 =====执行测试用例1===== PASSED 【后置】每个用例结束后:清理测试数据/关闭连接 test_setup_demo.py::TestExample::test_example2 【前置】每个用例执行前:初始化数据/登录账号 =====执行测试用例2===== PASSED 【后置】每个用例结束后:清理测试数据/关闭连接

执行逻辑总结:

用例 1:setup_method → test_example1 → teardown_method

用例 2:setup_method → test_example2 → teardown_method

三、类级前后置:setup_class & teardown_class

整个测试类只运行 1 次前置、全部用例跑完只运行 1 次后置,不随单条用例重复执行。

适用场景:一个业务模块所有接口共用一套登录 token、只需要在类开头创建一次测试账号,全部用例跑完再销毁账号。

完整示例代码

# test_setup_demo.py class TestExample: # 整个测试类执行前,仅运行1次 def setup_class(self): print("【类前置】全类只执行1次:全局登录、创建测试账号") # 整个测试类所有用例跑完后,仅运行1次 def teardown_class(self): print("【类后置】全类结束:销毁账号、关闭数据库连接") def test_example1(self): print("=====执行测试用例1=====") def test_example2(self): print("=====执行测试用例2=====")

执行结果

test_setup_demo.py::TestExample::test_example1 【类前置】全类只执行1次:全局登录、创建测试账号 =====执行测试用例1===== PASSED test_setup_demo.py::TestExample::test_example2 =====执行测试用例2===== PASSED 【类后置】全类结束:销毁账号、关闭数据库连接

执行逻辑总结:setup_class → test_example1 → test_example2 → teardown_class

四、组合使用:类前置 + 方法前置(企业最常用)

实际项目中经常混用两种前后置:类级别做全局初始化,方法级别做单用例私有初始化

class TestExample: # 全类一次初始化 def setup_class(self): print("【类前置】登录系统,获取全局token") # 每条用例单独初始化 def setup_method(self): print("【方法前置】单条用例:创建本次测试临时数据") def teardown_method(self): print("【方法后置】单条用例:删除临时数据") def teardown_class(self): print("【类后置】全类跑完:退出登录,释放token") def test_case1(self): print("执行用例1") def test_case2(self): print("执行用例2")

五、高频踩坑:为什么不能用__init__替代 setup?

回顾上一节知识点:Pytest 测试类禁止自定义__init__(self)构造方法

  1. Pytest 自动收集用例时会自动实例化测试类,自定义__init__会破坏框架实例化逻辑,导致用例收集失败、告警;
  2. __init__在类实例化时仅执行一次,无法灵活实现「每条用例都重新初始化」的需求;

✅ 正确替代:需要全类初始化用setup_class,需要单用例初始化用setup_method

六、两种前后置选型对照

方法执行时机执行次数适用场景
setup_method/teardown_method每条测试用例前后用例数 = N 则执行 N 次单接口独立环境、每次用例独立数据
setup_class/teardown_class整个测试类首尾一个类仅执行 1 次模块接口共用登录、全局资源初始化
http://www.jsqmd.com/news/938849/

相关文章:

  • 印度电子维修市场行话解析:从COMB IC到PF,连接理论与实践的桥梁
  • 苏州母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • AI瞄准助手终极指南:3分钟让普通玩家拥有职业级瞄准精度
  • 营销人必抢的AI协同工作流(2024 Q2最新兼容矩阵已发布)
  • 锦州CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • Lindy自动化上线前必须完成的11项合规性验证:GDPR、SOX及海关AEO认证交叉校验清单
  • |____2.5 FreeRTOS 深度解析--多优先级
  • 从‘选最早结束’到‘证明它最优’:给算法新手的贪心算法通关指南(附活动选择问题详解)
  • 黑河母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 2026年发电机组靠谱排名,济宁明恒发电怎么样? - 工业推荐榜
  • 上饶母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 5:原生 assert 断言
  • 代理现货NCP360SNT1G是安森美(onsemi)推出的带过压保护功能的‌电压监控芯片‌,同时也可作为USB接口过压保护控制器使用
  • 2026年无代码AI应用生成平台盘点:10款推荐
  • 锦州母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 广元母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 金诚回收
  • 衡水CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • 纯HTML+PHP表单交互实战:新闻列表的提交、处理与动态渲染
  • 5分钟掌握B站视频下载器:解锁4K大会员内容的终极指南
  • 韶关CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 五金回收
  • 6:参数化
  • Claude商业计划书避坑手册:高盛/红杉内部评审打分表首次流出(含87分以上关键项解析)
  • 锦州母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 五金回收
  • 从POC到千万级QPS:AI服务稳定接入核心生产系统的7步黄金路径,含K8s+Istio+Prometheus实操配置
  • 7. Fixture :自动化前后置
  • 从‘韩信点兵’到‘中国剩余定理’:一个Python循环带你入门数论算法
  • 广州CMA甲醛检测治理公司深度测评:绿居净环保稳居榜首 - 金诚回收
  • 衡水母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 五金回收
  • 守护风电场 “无线神经”:LN-090A 宽频高速手持式频谱分析仪
  • 鸣潮工具箱:一站式游戏优化解决方案,3分钟提升你的游戏体验