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

Pytest如何仅从磁盘读一次大文件,为各测试提供内存中全新df副本

实现方案

你可以通过pytest的fixture作用域分层实现需求:先定义session级fixture只读取一次文件到内存,再定义function级fixture每次给测试返回原始数据的深拷贝,既避免重复读盘,又保证每个测试拿到的都是全新副本。

import pytest
import pandas as pd

# session 作用域fixture:整个测试运行过程仅执行1次,只读一次磁盘
@pytest.fixture(scope="session")
def raw_df():
    return pd.read_csv("data.csv")

# 默认function作用域fixture:每个测试用例调用前都会返回全新副本
@pytest.fixture
def df_fixture(raw_df):
    # deep=True表示深拷贝,为默认值可省略,有复杂嵌套数据时建议显式声明
    return raw_df.copy(deep=True)

def test_1(df_fixture):
    assert len(df_fixture) == 1_000_000

def test_2(df_fixture):
    # 拿到的是全新副本,不会和其他测试互相影响,也不会重复读盘
    assert sum(df_fixture["col1"]) == 10_000_000
  • session级fixture的生命周期和整个测试会话绑定,只要测试不结束,读取到内存的原始DataFrame就不会被释放
  • 如果你确定测试不会修改DataFrame的嵌套结构,可以用raw_df.copy(deep=False)提升拷贝速度,注意这种方式下修改嵌套内容会同步修改原始数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:21:02