Posts /

Python/Django 임시 파일과 함께하는 API 테스트

30 Dec 2018

이미지 파일 업로드 테스트하기

이미지 파일 필드가 있는 모델의 경우, 테스트용 파일을 따로 업로드 해놓는 것이 애매할 수 있다. 그것을 해결하기 위한 임시파일 생성과 테스트 후 생기는 파일의 처리법을 알아보자.

테스트는 Django Restframework rest_framework.test.APITestCase 를 이용함.

테스트 클래스

from django.urls import reverse

from rest_framework.test import APITestCase

class ExampleTests(APITestCase):

    def test_create_model(self):
        url = reverse('example_create')
        ...

1. 파일 생성하기

with open('/...파일경로', 'rb') as file:
    data = {
        'title': 'Title',
        'image_field': file
    }
    response = self.client.post(url, data, format='multipart')
def get_test_image():
    file = BytesIO()
    image = Image.new('RGBA', size=(25, 25), color=(155, 0, 0))
    image.save(file, 'png')
    file.name = 'test_image.png'
    file.seek(0)
    return file

...

data = {
    'title': 'Title',
    'image_field': get_test_image()
}
response = self.client.post(url, data, format='multipart')

2. 테스트로 생성된 파일 처리하기

업로드 테스트의 결과로 파일은 Django 셋팅에서 지정한 MEDIA 경로로 업로드 된다. 테스트용 경로를 따로 지정해줄 필요가 있다. 방법은 두가지가 있는데,

import tempfile

from django.test import override_settings


@override_settings(MEDIA_ROOT=tempfile.gettempdir())
def test_create_model(self):
    ...

# 혹은

@override_settings(MEDIA_ROOT=tempfile.TemporaryDirectory(prefix='media_test').name)
def test_create_model(self):
    ...

임시 파일과 디렉토리

참조문서


Twitter Facebook Google+