[Django] 장고 테스트케이스 만들기(Django Test Case)

장고를 사용할 때 내가 만든 코드가 원하는대로 동작하는지 확인 할 필요가 있다.

코드가 잘 동작하는지 확인하기 위해서 매번 서버를 실행하며 입력값을 넣고,, 출력이 무엇인지 확인할 수도 있지만, 이렇게 테스트를 진행하면 불편하고, 예상치 못한 예외상황이 발생할 수(?)도 있다.

테스트를 코드로 작성하여 자동화 해두면, 사용하기도 편하고 각종 경우의 수를 만들기도 편하다.

 

작성 방법에 대해 알아보자.

 

장고에서 앱을 새로 만들면 tests.py 라는 파일이 생성된다. 이 파일에 테스트 코드를 작성하면 해당하는 앱안에 만들어둔 views.py나 models.py등이 제대로 작동되는지 확인 할 수 있다.

 

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


class MyFirstTestCase(TestCase):

	def test_status(self):
		url = reverse("index")
		response = self.client.get(url)
		self.assertEquals(response.status_code, 200)

위와같이 간단한 테스트 코드를 작성해 보자.

 

reverse는 urls.py에 path를 작성할 때 파라미터로 작성한 name 값을 이용해 url을 가져오는 함수이다.

self.client.get(url)을 사용하면 해당하는 url을 호출하여 연결되어 있는 views.py에 작성해둔 코드에 따라 적절한 응답이 돌아온다. 이것이 response에 저장이 되는 것이다.

 

응답으로 성공적으로 돌아올 경우 http의 상태 코드는 200을 리턴하게 되는데 잘 리턴되는지 확인해 주는 부분이 바로 self.assertEquals이다. 첫번 째 인자가 응답으로 돌아온 상태 코드이고, 두번 째가 내가 실제로 리턴되길 원하는 상태코드이다.

 

만약 둘이 같을 경우 에러는 발생하지 않고, 다를경우 AssertionError 가 발생한다.

 

두 매개변수의 값이 같을 경우 에러는 발생하지 않는다.
두번째 파라미터를 200이 아닌 300으로 작성한 경우 에러가 발생한다.

 

assertEquals 이외에도 assertIs, assertContains, assertGreater 등등 많은 방법이 존재하므로 다양한 방법을 알고 싶다면 아래 사이트를 참조하자.

https://docs.python.org/ko/3/library/unittest.html#assert-methods

 

파이참 기준 테스트 코드 실행 방법은 다음과 같다.

# Run all the tests in the animals.tests module
$ python manage.py test animals.tests

# Run all the tests found within the 'animals' package
$ python manage.py test animals

# Run just one test case
$ python manage.py test animals.tests.AnimalTestCase

# Run just one test method
$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

참고

https://docs.djangoproject.com/ko/4.0/topics/testing/overview/

https://ssamko.tistory.com/52