거북이반-테스트코드 편
DRF 테스트코드 짜기
강의노트
📌1강 - 테스팅은 무엇인가?
- 1) 여태까지의 방식은
- 모델을 만들고
- API를 만들고
- 프론트엔드를 만드는 방식
- 2) 구현하고, 고치고, 구현하고, 고치는 이런 방식은 몇가지의 문제점을 가지고 있다!
시간낭비
- 매번 같은 값으로 수동으로 테스트
복잡도 증가
- 새로운 기능이 추가될때마다 발생하는 문제들이 어디서 일어나는지 모를 수 있음
허점
- 제대로 돌아가지 않는 기능을 테스트 해보지 못하고 넘어갈 수 있음
- 이런 방식을 해결해주는 것이
테스트코드
이다!
- 3) 테스트 코드를 작성해야 하는 8가지 이유
- 여러 버그를 쉽고 빠르게 찾을 수 있다
- 시간과 돈을 절약한다
- CI를 하는 과정에서 테스팅이 중요하다
- 테스트를 작성하는 것만으로도 도큐먼테이션의 역할을 한다
- 테스트코드를 보면서 어떤 기능이 있는지, 무엇을 위한건지 알 수가 있게된다
- 리드미의 역할 처럼! 설명하는 셈이 된다
- 코드의 신뢰도 증가
- 코드의 퍼포먼스를 체크할 수 있다
- 코드의 안전성 보장
- 코드의 복잡도 줄임
- 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 |