python - Django Pytest 图片上传图片单元测试
问题描述
我正在使用 Django 3.2.6、django-pytest 和 factory boy 来运行自动化测试。
这是我用来制作测试图像的功能:
from PIL import Image
from django.core.files.uploadedfile import SimpleUploadedFile
def test_image(name='test.jpg', size=(250,250)):
img = Image.new('RGB', size)
content = img.tobytes()
# return Django file for testing in forms and serializers
return SimpleUploadedFile(name, content=content, content_type='image/jpeg')
这是正在测试的视图:
class PhotoCreateView(LoginRequiredMixin, CreateView):
model = Photo
form_class = PhotoForm
success_url = '/'
template_name = 'photos/create.html'
def form_valid(self, form):
new_category = form.cleaned_data['new_category']
if new_category:
category = Category.objects.create(name=new_category)
form.instance.category = category
return super().form_valid(form)
这是测试类:
class TestPhotoCreateView:
url = reverse('photos:create')
def test_photo_create_view_authenticated_user_can_access(self, client, user):
client.force_login(user)
response = client.get(self.url)
assert response.status_code == 200
def test_photo_create_view_unauthenticated_user_cannot_access(self, client):
response = client.get(self.url)
assert response.status_code == 302
def test_photo_create_view_form_valid_existing_category(self, client, user):
client.force_login(user)
for _ in range(3):
CategoryFactory()
category = CategoryFactory()
image = test_image()
form_data = {
'category': category.pk,
'new_category': '',
'description': 'hello world',
'image': image,
}
response = client.post(self.url, form_data)
print(response.content)
photo = Photo.objects.get(description=form_data['description'])
assert photo.category == form_data['category']
所有的测试都通过了,除了test_photo_create_view_form_valid_existing_category
. 我跑了pytest --capture=tee-sys
,这个错误出现在图像字段中:
<p id="error_1_id_image" class="invalid-feedback"><strong>Upload a valid image. The file you uploaded was either not an image or a corrupted image.</strong></p>
如何让上传通过测试?
这个项目的所有代码都在这里:https ://github.com/leigh-data/photo_gallery
解决方案
推荐阅读
- python - Pandas 字符串的性能包含列
- java - 我们如何在 CAS-overlay 中包含特定于环境的属性
- android - Adobe AIR - 创建应用程序的屏幕截图并共享它(actionscript)
- excel - 在excel中的查询中加载单个单元格
- bash - Bash 将标准输入重定向为标准输入
- graph - 如何在谷歌图表中绘制月份与文本标签图
- python - 使用 Scapy 口袋捕获确定 TCP/IP 连接服务端口
- ucma - 不带 LYNC 服务器的 UCMA 独立 IVR
- magento2 - Magento 2 将 Apache docroot 移动到 pub 目录
- grid - Wxpython 网格 AppendRows