Python pytest怎么实现类似Unittest的setup效果_使用yield实现后置处理

pytest 中 setup_method 和 setup_class 怎么用

pytest 本身不叫 setup,但行为上完全能替代 unittest 的 setUpsetUpClass。直接在测试类里定义 setup_method(每条测试前调用)或 setup_class(整个类首次运行前调用)就行,pytest 会自动识别并执行。

注意:这两个方法名必须拼写准确,且不能带参数(除了 self),否则 pytest 会忽略它们。

  • setup_method 接收一个参数 method,可用于判断当前运行的是哪个测试函数(比如跳过某些耗时操作)
  • setup_class 只在类内第一个测试开始前执行一次,适合初始化数据库连接、启动 mock server 等重操作
  • 它们没有返回值要求,也不支持 yield;想做后置清理,得换别的机制

用 yield fixture 实现 setup + teardown 组合

真正灵活、推荐的方式是用带 yield 的 fixture —— 它天然支持“先 setup,再运行测试,最后 teardown”三段式流程。pytest 在 yield 前的部分当 setup,在 yield 后的部分当 teardown。

示例:

@pytest.fixture
def db_connection():
    conn = create_test_db()  # setup 阶段
    yield conn                # 测试用这个 conn
    conn.close()              # teardown 阶段,一定会执行(哪怕测试崩溃)
  • 这个 fixture 默认作用域是 function,即每个测试函数独享一份 setup/teardown
  • scope="class" 就等效于 setUpClass + tearDownClass
  • yield 后的代码即使测试抛异常也会执行,比 try/finally 更可靠

fixture scope 和 autouse 的坑

很多人误以为加了 autouse=True 就等于全局 setup,结果发现 teardown 没触发、或者被多次执行。关键点在于 scope 和 autouse 的组合逻辑:

Metaphor

一个新出炉的AI搜索引擎Metaphor

下载

  • autouse=True + scope="function":每个测试前 setup,测试后 teardown,安全可控
  • autouse=True + scope="session":整个 pytest 运行只 setup 一次,但 teardown 只在最后执行一次 —— 如果中间某个测试崩溃导致进程退出,teardown 可能根本不会跑
  • 多个 autouse fixture 之间无执行顺序保证,别依赖它们的先后关系做资源依赖

更稳妥的做法是显式声明依赖,比如让 db_connection fixture 依赖 tmpdir,pytest 会自动按需调用。

yield fixture 被中断时的 teardown 行为

yield fixture 的 teardown 部分不是“绝对保险”的。以下情况它可能不执行:

  • 测试进程中被 os._exit() 强制终止(绕过 Python 正常退出流程)
  • pytest 进程被 SIGKILL(kill -9)杀死
  • 测试中调用了 sys.exit() 且没被 pytest 的异常捕获机制兜住(少见,但存在)

所以,涉及文件写入、端口绑定、临时进程启动这类操作,建议在 teardown 里加日志或状态检查,而不是假设“只要 yield 写了就一定执行”。

相关推荐:

《太吾绘卷:天幕心帷》促织化形专属技能效果介绍

《太吾绘卷:天幕心帷》中的异品促织王和呆物是可以化形的,而且化形之后还有特殊的专属技能,首先是呆物的让手技能,效果是若最终决斗胜利,对方额外随机增上一份赌注的奖品。 太吾绘卷天幕心帷促织化形有什么专属技能 呆物:让手:若最终决斗胜利,对方额外随机增上一份赌注的奖品(若对方仅有保底的历练奖品,则该奖品翻倍) 天蓝青:净天:阻止对手的技能生效 八败:逆命:被进攻牙钳+1,被反击角力+1,被鸣叫气势+1...

仙逆战天道仙术效果大全

仙逆战天道仙术效果大全:唤雨(群体易伤叠加)、定身(全屏12800%伤+眩晕)、呼风(聚怪持续伤)、雷元(加经验)、擒龙(地形阻敌8秒+眩晕)、冰盾(5层免疫)、星转(4秒无敌)、聚灵(5秒+30%伤)、融魂(回400防)。分属增伤、控制、生存、辅助,灵活搭配应对不同战局。 仙逆战天道仙术效果大全 1、仙术·唤雨 效果:群体减益,输出放大 说明: 使用后凝聚仙元释放持续240秒的唤雨之术,场内所有...

原神超越之匙属性效果一览

就在最近原神进就要上线月之八版本了,在本次版本更新了许多新内容,有新剧情,新角色,新圣遗物,新的任务,还有新的武器,那么下面就来告诉大家月之一版本新五星武器超越之匙属性效果一览。 原神超越之匙属性效果一览 全新武器「双手剑·超越之匙」,一起来看看吧~ (以90级精炼1阶为例) 本文内容来源于互联网,如有侵权请联系删除。

原神尘光七谕属性效果一览

尘光七谕,是游戏中的5星法系武器,在「虚空劫灰往世书」「月之七」版本中作为限定武器上线卡池,那么有不少小伙伴好奇尘光七谕属性效果是什么,下面就来告诉大家。 原神尘光七谕属性效果一览 当队伍触发「魔导·秘仪」效果时,本次的全新五星武器会有特殊的特效表现哦~详情请看实机展示部分! 本文内容来源于互联网,如有侵权请联系删除。

原神灾悔属性效果一览

灾悔,是游戏《原神》中的5星长柄武器,在「虚空劫灰往世书」「月之七」版本中作为限定武器上线卡池,那么有不少小伙伴好奇灾悔属性效果是什么,下面就来告诉大家。 原神灾悔属性效果一览 当队伍触发「魔导·秘仪」效果时,本次的全新五星武器会有特殊的特效表现哦~详情请看实机展示部分! 本文内容来源于互联网,如有侵权请联系删除。

原神狼的武功歌属性效果一览

狼的武功歌,是游戏中的5星双手剑武器,在「捕风的归客」「月之五」版本中作为限定武器上线卡池,那么有不少小伙伴好奇狼的武功歌属性效果是什么,下面就来告诉大家。 原神狼的武功歌属性效果一览 当队伍触发「魔导·秘仪」效果时,本次的全新五星武器会有特殊的特效表现哦~详情请看实机展示部分! 本文内容来源于互联网,如有侵权请联系删除。

金铲铲之战s8棱彩羁绊新效果大全

S8返场中四大老牌羁绊开放10人口棱彩形态,机制全面质变:福牛守护者(生存翻盘型)新增濒死锁血与群体击飞,逆风能力顶尖;源计划(火力压制型)无人机海量铺场且转移加速,物法双修压制力拉满;地下魔盗团(理财发育型)叠层翻倍且至尊宝箱保底五费整卡与神装,兼顾战力与暴富;战斗机甲(合体坦核型)融合为巨型终极机甲,全屏冲击并附带锁血护盾,坦度与伤害大幅跃升。整体大幅提升后期上限与策略深度。 金铲铲之战s8棱...

云顶之弈s17法官效果表

云顶之弈S17版本星神主题,就在最近云顶之弈也做了不少调整,对羁绊,英雄,强化符文等都有调整,那么有不少小伙伴好奇s17法官效果有什么,下面就给大家带来s17法官效果一览图。 云顶之弈s17法官效果表 图注:X/Y分别代表2/3法官奖励 本文内容来源于互联网,如有侵权请联系删除。