SSAMKO의 개발 이야기

[Django] TestCase 이용해서 테스트 코드 짜기 본문

Django

[Django] TestCase 이용해서 테스트 코드 짜기

SSAMKO 2021. 1. 14. 07:34
반응형

Django를 이용해 백엔드 서버를 구성할 때, 큰 장점 중 하나인 테스트 코드 작성에 대해 알아보겠습니다.

 

테스트 코드를 작성하면, 사람이 손으로 직접 테스트를 하는 것보다 훨씬 빠르고, 정확하게 테스트를 진행할 수 있습니다.

django에서는 이 작업을 편리하게 도와주는 Test도구들이 있습니다.

이 중에서 TestCase를 사용해 간단히 API Test를 위한 코드를 작성해보겠습니다. 

 

먼저, django app을 만들면 자동 생성되는 tests.py를 삭제하거나 이름을 변경해줍니다. 

model, form, views 등을 각각 테스트할 수 있도록, test_model, test_form, test_views 처럼 각각의 파일을 만들어줍니다.

 

이는 각각의 테스트 코드를 별도로 작성하고, 진행할 수 있으며, '파이썬의 정신(the Zen of Python)'에서 추구하는 바와도 일치합니다.

 

간단히 API만을 테스트할 것이기 때문에 test_views.py만 가지고 진행하겠습니다.

 

아래와 같이 코드를 작성해줍니다. 

import json

from django.urls import reverse
from django.test import TestCase

class comroomAPITests(TestCase):
    def test_list(self):
        url = reverse("schedule")
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)
        data = json.loads(response.content)
        self.assertEquals(len(data),1)
        self.assertContains(response, 'time_table')

클래스 내에 이름이 test로 시작하는 함수들에 대해서 test를 진행합니다.

 

reverse는 url_name을 이용해 url을 가져오는 함수입니다.

TestCase.client를 이용해 테스트 할 API를 호출하고 응답을 가져옵니다.

TestCase.assertEquals()는 두 값을 비교해줍니다. 정상 코드(200)가 아니면 AssertionError가 발생합니다.

응답을 json.loads()를 이용해 data에 저장해주고, 안에 내용이 정상적으로 호출되었는지 확인합니다.

self.assertContains는 원하는 내용이 안에 포함되어 있는지 확인해줍니다. 

 

이런식으로 코드를 작성하고, 테스트를 하고자 할때는

굳이 runserver를 하지 않아도 됩니다. 아래 커맨드만 실행시켜주면 바로 테스트 결과를 확인할 수 있습니다.

python manage.py test yourApp
반응형
Comments