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

如何在pytest测试类中复用同一个DataFrame作为fixture?

在pytest中用fixture复用DataFrame

把原来__init__方法里初始化的DataFrame改成pytest fixture,只需按以下步骤操作:

  • 将DataFrame的初始化逻辑移到带@pytest.fixture装饰器的函数中,根据需求设置scope(比如scope="class"让整个测试类复用同一个实例,scope="module"让整个模块复用)
  • 在测试类的测试方法中,直接将fixture名称作为参数传入,pytest会自动注入实例

修改后的完整代码如下:

import pytest
import utils
import numpy as np
import pandas as pd
from datetime import datetime

# 定义fixture,scope设为class表示整个测试类复用同一个DataFrame实例
@pytest.fixture(scope="class")
def df_input():
    return pd.DataFrame({
        'table_id': ['all_legs_predictions_20220914_20220607',
                     'all_legs_predictions_20210914_20210607'],
        'prefix': [datetime(2022, 9, 14, 0, 0),
                   datetime(2021, 9, 14, 0, 0)],
        'suffix': [datetime(2022, 6, 7, 0, 0),
                   datetime(2021, 6, 7, 0, 0)]
    })

class TestGetDatesCorrespondingToReference:
    # 测试方法接收df_input fixture作为参数
    def test_get_dates_corresponding_to_reference(self, df_input):
        actual = df_input.pipe(utils.get_dates_corresponding_to_reference, "20221105")
        
        expected = pd.DataFrame({
            'table_id': ['all_legs_predictions_20220914_20220607'],
            'prefix': [datetime(2022, 9, 14, 0, 0)],
            'suffix': [datetime(2022, 6, 7, 0, 0)]
        })
        pd.testing.assert_frame_equal(actual, expected)

关键说明:

  • 若要让多个测试类共享该DataFrame,可将scope改为"module"
  • fixture函数可放在测试文件的类外或类内,类外定义的fixture通用性更强
  • 测试方法只需声明fixture参数,pytest会自动处理实例的创建与注入,无需手动初始化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:10:37