#python #python-requests #pytest #betamax
#python #python-запросы #pytest #betamax
Вопрос:
Я написал тест для одной функции, которая загружает большой zip-файл, используя модуль запросов. Я обнаружил несоответствие в длине содержимого при сравнении выполнения теста с betamax и без него. При использовании 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
функцию to и использую ее для получения конечной точки. Через эту конечную точку я получаю zip-файл в виде строки bytes ( response.content
) . Я обнаружил, что тест выполняется без ошибок, если я не использую сеанс Betamax. Для моей $BETAMAX_RECORD_MODE
переменной env установлено значение «все».
Возможная связанная проблема: https://github.com/betamaxpy/betamax/issues/122