[DRF] DRF 테스트 코드 작성하기

Yungsang Hwang·2022년 7월 11일
0

Django-Rest-Framework

목록 보기
3/15
post-thumbnail

거북이반-테스트코드 편


DRF 테스트코드 짜기

강의노트


📌1강 - 테스팅은 무엇인가?

  • 1) 여태까지의 방식은
    • 모델을 만들고
    • API를 만들고
    • 프론트엔드를 만드는 방식
  • 2) 구현하고, 고치고, 구현하고, 고치는 이런 방식은 몇가지의 문제점을 가지고 있다!
    1. 시간낭비
      • 매번 같은 값으로 수동으로 테스트
    2. 복잡도 증가
      • 새로운 기능이 추가될때마다 발생하는 문제들이 어디서 일어나는지 모를 수 있음
    3. 허점
      • 제대로 돌아가지 않는 기능을 테스트 해보지 못하고 넘어갈 수 있음
    • 이런 방식을 해결해주는 것이 테스트코드이다!
  • 3) 테스트 코드를 작성해야 하는 8가지 이유
    1. 여러 버그를 쉽고 빠르게 찾을 수 있다
    2. 시간과 돈을 절약한다
    3. CI를 하는 과정에서 테스팅이 중요하다
    4. 테스트를 작성하는 것만으로도 도큐먼테이션의 역할을 한다
      • 테스트코드를 보면서 어떤 기능이 있는지, 무엇을 위한건지 알 수가 있게된다
      • 리드미의 역할 처럼! 설명하는 셈이 된다
    5. 코드의 신뢰도 증가
    6. 코드의 퍼포먼스를 체크할 수 있다
    7. 코드의 안전성 보장
    8. 코드의 복잡도 줄임
  • 4) 테스트 주도 개발(Test Driven Develop)
    • 개발할 때 테스트 코드를 만들고, 테스트를 통과하게 만들면, 리팩터링과정까지 거치는 개발 방식
    • 추가한 기능 간의 상호 연결성을 올려줌
    • 테스트코드를 만든다는 점에서 효율을 올려줄 수 있는 개발 방식으로 진행하는 것이 매우 좋다!

📌2강 - Django 테스트코드

  • 5) 프로젝트 실습용 코드
  • 6) 테스트해보기 장고에서 기본적으로 제공하는 명령어를 사용하는 것으로 테스트할 수 있다
    python manage.py test
  • 7) 테스트 코드 만들기 각 앱에서 test.py에서 작성할 수 있다!
    # user.test
    
    from django.test import TestCase
    
    class TestView(TestCase):
    	def test_two_is_three(self):
    		self.assertEqual(2,3)
    
    	def test_two_is_two(self):
    		self.assertEqual(2,2)

📌3강 - DRF 테스트코드

  • 8) drf testing 구글링 DRF 테스트 관련 공식문서 Testing

📌4강 - 회원가입 테스트

  • 9) reverse를 활용한 테스트코드
    • django.urls 라이브러리에서 reverse를 활용하여, 패스 이름을 가져옴

    • url이 바뀌더라도 테스트에는 지장이 없게 하기 위함

      from django.urls import reverse
      from rest_framework.test import APITestCase
      from rest_framework import status
      
      class UserRegistrationAPIViewTestCase(APITestCase):
      	def test_registration(self):
      		url = reverse("user_view")
      		user_data = {
      		"username" : "testuser",
      		"fullname" : "테스터",
      		"email" : "test@testuser.com",
      		"password" : "password",
      		}
      		response = self.client.post(url, user_data)
      		self.assertEqual(response.status_code, 200)

📌5강 - 로그인 테스트

  • 10) 로그인 기능 테스트
    def test_login(self):
    	url = reverse("token_obtain_view")
    	user_data = {
    	"username" : "testuser",
    	"fullname" : "테스터",
    	"email" : "test@testuser.com",
    	"password" : "password",
    	}
    	response = self.client.post(url, user_data)
    	self.assertEqual(response.status_code, 200)
    똑같은 유저를 만들었지만 로그인이 되질 않는다..?

📌6강 - setup 메서드

  • 11) 테스트 데이터베이스? 테스트코드를 진행할 때는 기존 데이터베이스가 아니라 시작할 때 임의로 생성해서 사라지기 때문에, A테스트에 의존하여 B테스트를 작성해서는 안된다
    • 테스트코드는 독립적(Stateless)이어야만 한다!
      • 하나의 기능을 검사하기 위해 있는 테스트코드가 연관되면서,
      • 어디가 문제인지 알기 어렵게 한다!
  • 12) 셋업 메서드 작성한 테스트 메서드를 실행하기 전에 실행하게 되는 메서드! 이곳에 DB를 담아서 테스트를 진행하는 것이다
    • def setup으로 테스트 코드가 시작하기 전에 불러온다
    • def teardown으로 테스트 코드가 끝날 때 불러온다

📌7강 - setup 메서드로 로그인 테스트

  • 13) def setUp
    def setUp(self):
    	self.data = {"username" : "john", "password": "johnpassword"}
    	self.user = User.objects.create_user("john", "johnpassword")
    from django.urls import reverse
    from rest_framework.test import APITestCase
    from rest_framework import status
    
    class LoginUserTest(APITestCase):
    	def setUp(self):
    		self.data = {"username" : "john", "password": "johnpassword"}
    		self.user = User.objects.create_user("john", "johnpassword")
    
    	def test_login(self):
    		response = self.client.post(reverse('token_obtain_pair'), self.data)
    		self.assertEqual(response.status_code, 200)
    
profile
하루종일 몽상가

0개의 댓글