[파이썬][Django] Django의 테스트 기능은 어떤것이 있을까? 예제 포함
Django는 테스트를 작성하고 실행하기 위한 다양한 기능을 제공합니다. 아래에서 몇 가지 주요한 Django 테스트 기능과 예제를 소개하겠습니다.
1. 단위 테스트 (Unit Tests)
단위 테스트는 개별 함수, 메서드 또는 클래스의 기능을 테스트하는 데 사용됩니다. Django에서는 unittest
또는 pytest
를 사용하여 단위 테스트를 작성할 수 있습니다. 아래는 unittest
를 사용한 예제입니다.
# myapp/tests.py
from django.test import TestCase
from .models import MyModel
class MyModelTestCase(TestCase):
def setUp(self):
self.obj = MyModel.objects.create(name="Test Object")
def test_object_name(self):
self.assertEqual(self.obj.name, "Test Object")
def test_object_creation(self):
self.assertIsInstance(self.obj, MyModel)
2. 기능 테스트 (Functional Tests)
기능 테스트는 애플리케이션의 기능을 테스트하고 사용자 시나리오를 검증하는 데 사용됩니다. Django에서는 Selenium
과 같은 웹 자동화 도구와 함께 기능 테스트를 작성할 수 있습니다.
# functional_tests.py
from selenium import webdriver
class MySiteFunctionalTest(TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.browser.implicitly_wait(3)
def tearDown(self):
self.browser.quit()
def test_can_visit_home_page(self):
self.browser.get('http://localhost:8000')
self.assertIn('My Site', self.browser.title)
3. API 테스트
Django REST framework를 사용하여 API를 개발한 경우, API 테스트도 간단하게 작성할 수 있습니다. APITestCase
클래스를 사용하여 API 요청을 테스트합니다.
# api/tests.py
from rest_framework.test import APITestCase
from rest_framework import status
from .models import MyModel
class MyModelAPITest(APITestCase):
def setUp(self):
self.obj = MyModel.objects.create(name="Test Object")
def test_list_objects(self):
response = self.client.get('/api/mymodels/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
def test_create_object(self):
data = {'name': 'New Object'}
response = self.client.post('/api/mymodels/', data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
4. 테스트 실행
테스트를 실행하려면 Django의 manage.py
도구를 사용합니다. 아래는 테스트를 실행하는 명령어입니다.
python manage.py test myapp
위에서 myapp
은 테스트할 앱의 이름입니다. Django는 tests.py
파일을 자동으로 찾아서 테스트를 실행합니다.
Django의 테스트 기능을 활용하면 애플리케이션의 다양한 부분을 효과적으로 테스트하여 안정성을 확보하고 개발자들이 변경사항을 자신있게 적용할 수 있도록 도움을 줍니다.