- Django Rest Framework
- Django에서 사용할 수 있는 툴들의 종류에 대해서 안다.
- DRF에서 회원가입 기능을 테스트 할 수 있다.
- DRF에서 로그인 기능을 테스트 할 수 있다.
- setUp 메소드를 사용할 수 있다.
- class method를 이해한다.
- static method를 이해한다.
- DRF에서 게시글 작성을 테스트할 수 있다.
- Faker를 사용할 수 있다.
- get absolute url의 사용목적과 방법을 이해한다.
- dictionary의 items 메소드 사용법을 이해한다.
- serializermethodfield로 연관 테이블의 정보를 가져올 수 있다.
[tests.py]
- DRF에서 회원가입 기능을 테스트 할 수 있다.
- DRF에서 로그인 기능을 테스트 할 수 있다.
- setUp 메소드를 사용할 수 있다.
''' TestCase 기본 작동 방식
class TestView(TestCase):
def test_two_is_three(self):
# 괄호 안 적은 인자의 값이 assertEqual 같은지?
self.assertEqual(2,3)
def test_two_is_two(self):
self.assertEqual(2,2)
- python manage.py test 와 tests.py를 이용해 views.py에서 정의한 함수나 class를 테스트 해볼 수 있다.
- App 별로 : test를 돌릴땐 "python manage.py test app이름" 으로 실행시켜준다.
'''
----------------------------------------------------------------------------------
# 1. 회원정보 테스트 코드 및 setUp code 🔥
class UserRegistrationTest(APITestCase):
def test_registration(self):
url = reverse("user_view")
user_data = {
"username":"testuser",
"fullname":"tester",
"email":"test@test.com",
"password":"1234",
}
response = self.client.post(url, user_data)
self.assertEqual(response.status_code, 200)
---------------------------------------------------------------------------------------------------------------------------
''' 테스트용 database는 생긴 뒤, 초기화 시켜주기 때문에 위에서 UserRegistrationTest 로 만든 유저가 db에 저장뒤 삭제되므로, 똑같은 코드일지라도 test_login 함수에선 초기화된 db로 로그인을 하게 되는것이기 떄문에 user가 인증되지 않았기 때문에 401 error가 뜨게된다.
def test_login(self):
url = reverse("token_obtain_pair")
user_data = {
"username":"testuser",
"fullname":"tester",
"email":"test@test.com",
"password":"1234",
}
response = self.client.post(url, user_data)
self.assertEqual(response.status_code, 200)
# FAIL: test_login (users.tests.UserRegistrationTest)
'''
# 그래서, django rest framework에서 제공하는 setup이라는 test tool을 이용해 db에서 초기화 되지 않는 user를 만들어 준 뒤, testcase를 작성해 여러가지 테스트를 진행시켜준다.
---------------------------------------------------------------------------------------------------------------------------
🔥
class LoginUserTest(APITestCase):
def setUp(self):
self.data = {'username':'won', 'password':'1234'}
self.user = User.objects.create_user('won', '1234')
def test_login(self):
response = self.client.post(reverse('token_obtain_pair'), self.data)
print(response.data["access"])
self.assertEqual(response.status_code, 200)
# 2. Article Test code : 게시글 테스트코드 🔥
def test_get_user_data(self):
access_token = self.client.post(reverse('token_obtain_pair'), self.data).data["access"]
response = self.client.get(
path = reverse("user_view"),
HTTP_AUTHORIZATION=f"Bearer {access_token}"
)
# self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['username'], self.data['username'])
'woncoding > TIL' 카테고리의 다른 글
| TIL | 11.2.수 [AWS] (0) | 2022.11.04 |
|---|---|
| TIL | 11.1.화 [AWS] (0) | 2022.11.03 |
| TIL | 10.28.금 [Django : DRF] (0) | 2022.10.31 |
| TIL | 10.27.목 [Django : DRF] (0) | 2022.10.28 |
| TIL | 10.26.수 [Django : DRF] (0) | 2022.10.27 |