如何在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
相关产品推荐
相关产品推荐

