缓存 fixture 函数结果 Pytest

Cache fixture function result Pytest

我有一系列 python 测试来测试两个数据帧的相等性:

@pytest.fixture()
def prepare_data():
    (...)
    (time-consuming operations running on a cloud instance)

    return df1, df2

test_columns_are_equal(prepare_data):
    assert prepare_data[0].columns == prepare_data[1].columns

test_schemas_are_equal(prepare_data):
    assert prepare_data[0].dtypes.equals(prepare_data[1].dtypes)

test_something_else(prepare_data):
    assert(...)

现在的问题是 prepare_data 正在为每个测试重新 运行,并在我的服务器上触发大量操作。

我想要的是在第一次调用时缓存 prepare_data() 的结果,然后 运行 缓存输出上的测试。

迟到总比不到好,@pytest.fixture(scope='module') 只会为整个模块生成一次固定装置,并在访问它的测试之间共享它。其他场景还有'class'、'session'和'package'的作用域

注意:请注意,如果测试用例改变了夹具,那么您将遇到意外的测试行为,具体取决于执行的测试集合和执行顺序。这就是默认为每个测试用例单独生成夹具的原因。

参见 pytest fixture 文档的范围会话。 https://docs.pytest.org/en/latest/reference/reference.html#pytest.fixture