You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Pytest图片上传单元测试提示无效图片如何解决?

问题解决方法

错误原因

你当前的test_image函数生成的不是合法JPEG格式文件,直接调用PIL图像的tobytes()方法得到的是原始RGB像素数据,没有JPEG格式的文件头和编码结构,Django的ImageField在校验上传文件时会识别为非法图片,因此抛出对应报错。

此外原有测试用例的断言逻辑存在类型不匹配问题:photo.category是Category模型实例,form_data['category']是分类的主键数值,直接比对会返回False,需要同步调整。

修改方案

1. 调整测试图片生成函数

from PIL import Image
from django.core.files.uploadedfile import SimpleUploadedFile
from io import BytesIO


def test_image(name='test.jpg', size=(250,250)):
    img = Image.new('RGB', size)
    # 将图片按JPEG格式编码写入内存缓冲区
    img_buffer = BytesIO()
    img.save(img_buffer, format='JPEG')
    img_buffer.seek(0)
    # 使用编码后的JPEG数据生成上传文件
    return SimpleUploadedFile(name, content=img_buffer.read(), content_type='image/jpeg')

2. 调整测试用例断言语句

将test_photo_create_view_form_valid_existing_category方法中的断言语句修改为以下任意一种即可:

# 方案1:比对分类主键
assert photo.category.pk == form_data['category']
# 方案2:直接和生成的category实例比对
assert photo.category == category

内容的提问来源于stack exchange,提问作者Leigh Forrest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:15:05