Как смоделировать функцию, которая загружает большой двоичный контент с помощью 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

0 ответов

Другие вопросы по тегам