DRF Test.py 공식문서
https://www.django-rest-framework.org/api-guide/testing/
Testing - Django REST framework
www.django-rest-framework.org
class SignupTest(APITestCase):
def test_create_user(self):
"""
user signup testcode
"""
url = reverse('accounts:signup')
data = {
"username" : "tests",
"password" : "tests1234@",
"nickname" : "tests",
"email" : "tests@naver.com"
}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(CustomUser.objects.count(), 1)
# 생성된 객체가 올바르게 저장되었는지 확인
self.assertEqual(CustomUser.objects.get().username, 'tests')
# 성공했을 경우 username 디버깅
if CustomUser.objects.count() > 0:
user = CustomUser.objects.first()
print("성공 :", user.username)
app_name = 'accounts'
urls.py 에 위의 경우처럼 app_name 을 지정할 경우 reverse 부분에 app name을 써준다.
lass SigninTest(APITestCase):
def setUp(self):
""" 테스트 실행 전에 사용자 생성 """
self.user = CustomUser.objects.create_user(
username="tests",
email="tests@naver.com",
nickname="tests",
password="tests1234@"
)
"""access token 생성"""
url = reverse('accounts:token_obtain_pair')
data = {
"email" : "tests@naver.com",
"password" : "tests1234@"
}
response = self.client.post(url, data, format='json')
self.access_token = response.data.get("access")
def test_signin(self):
"""
로그인 되는지 확인용 함수
"""
url = reverse('accounts:token_obtain_pair')
data = {
"email" : "tests@naver.com",
"password" : "tests1234@"
}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(CustomUser.objects.count(), 1)
self.assertEqual(CustomUser.objects.get().email, 'tests@naver.com')
# access token 확인용 디버그
self.assertIn("access", response.data)
print("로그인 성공, jwt token:", response.data["access"])
# 성공했을 경우 email 디버깅
if CustomUser.objects.count() > 0:
user = CustomUser.objects.first()
print("로그인성공 :", user.email)
def test_get_user(self):
"""
마이 페이지 관련 테스트
"""
url = reverse('accounts:myprofile', kwargs={'nickname': self.user.nickname})
self.client.credentials(HTTP_AUTHORIZATION=f'Bearer {self.access_token}')
response = self.client.get(url, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["nickname"], "tests")
# 성공했을 경우 username 디버깅
print("마이페이지 username", response.data['username'])
setup() 은 테스트코드에서 함수가 실행될때마다 초기화되서 다시 실행하는 중요한 함수
이 함수가 없을경우 일일이 테스트코드에 같은 데이터들을 넣어줘야함
setup() 실행순서는 위치 상관 없이 언제나 가장 먼저 실행됨
성공시 출력예제

assertEqual()은 두 값이 정확히 같은지 확인하는 메서드
def test_example(self):
result = 10 + 5
self.assertEqual(result, 15)
""" 테스트 결과 : OK """
""" if result == 14: //// 테스트 결과 : ERROR """
assertIn()은 특정 값이 리스트, 딕셔너리, 문자열 등에 포함되어 있는지 확인할 때 사용
def test_example(self):
fruits = ["apple", "banana", "cherry"]
self.assertIn("banana", fruits)
""" if banana in fruits:
테스트 결과 : OK """
""" if banana not in fruits
테스트 결과 : ERROR """