我为一个使用 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
环境变量设置为“全部”。