Django Framework - Test

이제일·2021년 1월 1일
0

Django

목록 보기
8/15
post-thumbnail
post-custom-banner

자동화 테스트

한 번 테스트 세트를 작성한 이후에는 앱을 변경할 때 수동 테스트를 수행하지 않아도 원래 의도대로 코드가 작동하는지 확인할 수 있습니다.

Model - 버그 식별

$ python manage.py shell

위 명령어를 통해 shell을 실행해서 테스트 코딩 진행

>>> import datetime
>>> from django.utils import timezone
>>> from polls.models import Question
>>> future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
>>> future_question.was_published_recently()
>>> True

Question모델에 미래의 시간을 입력하고 미리 만들어둔 was_published_recently()함수를 이용해 체크

Model - 테스트 작성

앱 폴더의 tests.py 파일에서 테스트를 진행 할 코드들을 넣어놓는다.
TestCase를 상속받는 class 생성
time : 미래 시간 저장 변수
future_question : 미래시간을 pub_date로 하는 Question객체 변수
self.assertIs(테스트할 함수, 원하는 반환값) : 적어 놓은 반환값이 아니면 에러를 일으킴

python에서의 self
self에 대한 값은 파이썬이 자동으로 넘겨주는 자기 자신에 대한 인스턴스.


Test 실행

$ python manage.py test 앱이름

아래의 결과를 보고 버그 수정


View Test

Django는 뷰 레벨에서 코드와 상호 작용하는 사용자를 시뮬레이트하기위해 테스트 클라이언트 클래스 Client를 제공합니다. 이 테스트 클라이언트를 tests.py또는 shell에서 사용할 수 있습니다.

View Test - shell

$ python manage.py shell

>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()

>>> from django.test import Client
>>> client = Client()

위 작업으로 View에서의 테스트 환경 구성을 완료했습니다.
setup_test_environment() : 템플릿 렌더러를 설치합니다. 이 메소드는 Test DB를 셋업하지 않기 때문에 테스트는 현재 사용중인 데이터베이스 위에서 돌게됩니다.
Client() : 테스트 클라이언트 클래스

>>> response.status_code
404
>>> from django.urls import reverse
>>> response = client.get(reverse('polls:index'))
>>> response.status_code
200
>>> response.content
b'\n  <ul>\n  \n   <li><a href="/polls/1/">What&#x27;s up?</a></li>\n   \n </ul>\n\n'
>>> response.context['latest_question_list']
<QuerySet [<Question: What's up?>]>

status_code : 현재 페이지의 상태
content : 출력되는 페이지의 문자열
context['kwargs'] : 인자 사전 자료형 열어보기

View Test - tests.py

assertEqual() : 첫 번째 인자와 두 번째 인자 값이 다를 경우 Test 실패
assertContains(response, text, status_code=200) : Response 인스턴스가 지정된 status_code를 생성하고 해당 텍스트가 응답의 내용에 표시되는지 확인합니다. 결과가 다를경우 Test 실패
assertQuerysetEqual(QuerySet, values) : 두 인자 값인 쿼리셋이 다를경우 Test 실패


more Test

profile
세상 제일 이제일
post-custom-banner

0개의 댓글