Как проверить загрузку файла в pytest?

Как сериализовать объект файла при использовании json.dumps ?

Я использую pytest для тестирования загрузки файлов в django и у меня есть эта функция

def test_file_upload(self):
     # file_content is a bytest object
     request = client.patch(
        "/fake-url/",
        json.dumps({"file" : file_content}),
        content_type="application/json",
    )

Я пытался установить file_content как объект байтов, но получаю эту ошибку TypeError: Object of type bytes is not JSON serializable Мне нужно отправить весь файл в конечную точку как сериализованный json

Вы можете использовать эту библиотеку-макет для тестирования загрузки файлов;

from mock import MagicMock
from django.core.files import File

mock_image = magicMock(file=File)
mock_image.name="sample.png"

# Another test operations...

def test_file_upload(self):
     # file_content is a bytest object
     request = client.patch(
        "/fake-url/",
        {"file" : mock_image},
        format="multipart",
    )

Подробный другой ответ; как загрузить файл для модульного тестирования в django

Ваша конечная точка API ожидает многочастную форму, содержащую файл. Ниже приведена функция, которую я использую для отправки многочастной формы из локального файла для тестирования. Если у вас уже есть байты файла, пропустите строку open и просто используйте file_content в ContentFile.

def send_multipart_form(self, filename):
    with open(filename, "rb") as f:
        file_data = ContentFile(f.read(), os.path.basename(filename))
        res = self.client.put(
            self.url,
            data=encode_multipart(boundary=BOUNDARY, data={"file": file_data}),
            content_type=MULTIPART_CONTENT,
        )
        return res
Вернуться на верх