Вы можете выбрать ваши данные, преобразовать их в строку и кэшировать эту строку. Это добавляет некоторое время для кодирования / декодирования, но это не должно быть существенным.
Вот пример из документации по 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-битное кодирование), хотя я уверен, что есть лучшие методы. По сути, вам нужно преобразовать произвольные байты в строку и обратно любым способом.