Как смоделировать функцию, которая загружает большой двоичный контент с помощью Betamax?
Я написал тест для одной функции, которая загружает большой zip-файл с помощью модуля запросов. Я обнаружил несоответствие Content-Length при сравнении выполнения теста с бетамаксом и без него. Используя Betamax, Content-Length извлеченной двоичной строки намного больше. Кроме того, мне нужно передать эту двоичную строку в BytesIO, а затем в
zipfile.ZipFile
, но получил
zipfile.BadZipFile: Bad magic number for central directory
исключение. Сообщите мне, если моя проблема не связана с этим обсуждением.
Моя тестовая установка:
import betamax
from betamax.fixtures import unittest
mode = os.getenv('BETAMAX_RECORD_MODE')
with betamax.Betamax.configure() as config:
config.cassette_library_dir = 'tests/test_funcs/cassettes'
config.default_cassette_options['record_mode'] = mode
print(f'Using record mode <{mode}>')
def the_function(session):
# session = requests.Session()
from io import BytesIO
from zipfile import ZipFile
response = session.get("https://ww2.stj.jus.br/docs_internet/processo/dje/xml/stj_dje_20211011_xml.zip")
zip_in_memory = BytesIO(response.content)
try:
my_zip = ZipFile(zip_in_memory, 'r')
my_zip.testzip()
result = True
except Exception:
result = False
return result
class BaseTest(unittest.BetamaxTestCase):
custom_headers = None
custom_proxies = None
_path_to_ignore = None
_no_generator_return_search = False
def setUp(self):
super(BaseTest, self).setUp()
if self.custom_headers:
self.session.headers.update(self.custom_headers)
if self.custom_proxies:
self.session.proxies.update(self.custom_proxies)
self.worker_under_test = self.worker_class()
self.worker_under_test._session = self.session
def test_search(self):
result = the_function(self.session)
assert result
Я прохожу
self.session
для работы при тестировании и использования его для получения конечной точки. Через эту конечную точку я получаю zip-файл в виде строки байтов (
response.content
). Я обнаружил, что тест проходит без ошибок, если я не использую сеанс Betamax. Мой
$BETAMAX_RECORD_MODE
env var установлен на "все".
Возможная связанная проблема: https://github.com/betamaxpy/betamax/issues/122