본문 바로가기
개발_TIL

개발_TIL | 2022-07-11 (58)

by Hee94 2022. 7. 11.

거북이반-테스트코드 편


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) 테스트 코드 만들기
      # 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)
  • 각 앱에서 test.py에서 작성할 수 있다!

📌3강 - DRF 테스트코드

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

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

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

  • 13) def setUp
      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)
    
  • def setUp(self): self.data = {"username" : "john", "password": "johnpassword"} self.user = User.objects.create_user("john", "johnpassword")

'개발_TIL' 카테고리의 다른 글

개발_TIL | 2022-07-13 (60)  (0) 2022.07.13
개발_TIL | 2022-07-12 (59)  (0) 2022.07.12
개발_TIL | 2022-07-08 (57)  (0) 2022.07.08
개발_TIL | 2022-07-07 (56)  (0) 2022.07.07
개발_TIL | 2022-07-06 (55) // feat) KPT  (0) 2022.07.06