You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest是否依据依赖链确定module级fixture的yield时机?

问题解答

首先明确结论:pytest默认不会自动识别测试模块之间的依赖关系,如果你的integration_test_cleanup是module作用域,三个测试模块会各自实例化一个该fixture的副本,每个模块的测试执行完毕后,就会立即执行自己那个fixture的yield后清理逻辑——也就是说testmodule_one跑完就会触发清理,这会导致依赖它的testmodule_two和testmodule_three因为资源已被清理而报错。

你不需要把fixture拆分成session和module级的多个实例,直接修改fixture的作用域就能解决问题:

把scope="module"改成scope="session":

@pytest.fixture(scope="session")
def integration_test_cleanup():
    yield
    # 执行清理操作

session作用域的fixture整个测试会话只会创建一次,所有测试模块(包括依赖testmodule_one的两个模块)全部执行完成后,才会触发yield后的清理逻辑。

额外提醒:如果需要确保testmodule_two和testmodule_three一定在testmodule_one之后运行,可以借助pytest-dependency插件给测试用例标记依赖关系,避免执行顺序混乱导致的问题,但这一步不影响fixture清理时机的控制——session级fixture的清理始终会等所有测试跑完才执行。

内容的提问来源于stack exchange,提问作者red888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:25:26