Pytest Cache Fixture使用Pickle而不是JSON



我想缓存我正在创建的对象,这需要很长时间才能创建。但是,不可能将其编码为JSON对象,因此内置的缓存功能将抛出错误。有没有一种方法可以使用pickle而不是JSON进行缓存?

您可以提取数据,将其转换为字符串,并缓存此字符串。这为编码/解码增加了一些时间,但这不应该是实质性的
以下是添加了酸洗的pytest文档中的示例:

import pickle
import pytest

def expensive_computation():
print("running expensive computation...")
return 42

@pytest.fixture
def mydata(request):
val = request.config.cache.get("example/value", None)
if val is None:
val = expensive_computation()
res = pickle.dumps(val).decode('cp437')
request.config.cache.set("example/value", res)
else:
val = pickle.loads(val.encode('cp437'))
return val

def test_function(mydata):
assert mydata == 42

请注意,我使用旧的"cp437"进行编码/解码,因为这似乎涵盖了任意字节(任何8位编码都应该如此(,尽管我相信还有更好的方法。基本上,您需要通过任何方式将任意字节转换为字符串并返回。

最新更新