0

我为一个使用 requests 模块下载大型 zip 文件的函数编写了一个测试。在比较测试执行与 betamax 和没有它时,我发现 Content-Length 存在差异。使用 Betamax,提取的二进制字符串的内容长度要大得多。除此之外,我需要将该二进制字符串传递给 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被测函数并使用它来获取端点。response.content通过该端点,我得到了字节字符串 ( )形式的 zip 文件。如果我不使用 Betamax 会话,我发现测试运行没有错误。我的$BETAMAX_RECORD_MODE环境变量设置为“全部”。

可能的相关问题:https ://github.com/betamaxpy/betamax/issues/122

4

0 回答 0