지금까지 API 테스트는 Postman을 통해 진행했었다.
Test 코드를 작성하면 한줄의 명령으로 모든 테스트 케이스를 한번에 처리할 수 있다
APITestCase 사용하기
drf의 APITestCase를 상속받아서 클래스로 test 케이스를 만들 수 있다.
# tests.py
from rest_framework.test import APITestCase
from rest_framework.views import status
from django.shortcuts import resolve_url
from django.urls import reverse
from ..models import *
class TestCode(APITestCase):
def setUp(self):
self.url_1 = '/accounts/verification'
self.url_2 = reverse('accounts:verification')
self.data = {"phone": "01012345678"}
def test_post_phone_number_success(self):
response = self.client.post(self.url_1, data=self.data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_post_phone_number_string_error(self):
data = {"phone": "010123456abc"}
response = self.client.post(self.url_2, data=data, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
setUp 작성하기
- 먼저 setUp 메서드에서 기본적으로 test에 필요한 url, 공통적으로 body에 담길 data 등을 지정할 수 있다.
- url에서 만약 url name을 사용하려면 위 코드의 url_2와 같이 reverse 혹은 resolve_url 사용할 수 있다.
테스트 케이스 만들기
- 테스트 함수명의 앞에는 test가 있어야 테스트가 실행된다.
- self.client 뒤에 http 메소드(위에서는 post)를 써주고 인자로 (url, data, format)을 넣으면 이에 대한 응답이 response에 담기게 된다.
- self.assertEqual는 테스트의 응답이 기대하는 응답과 일치하는지 확인해준다. 위 코드에서는 인자로 response의 상태코드, 기대하는 응답의 상태 코드를 넣어주었다.
- python manage.py test 명령으로 테스트가 실행된다.
첫번째 테이스 케이스에서 201 상태 코드를 반환하면 테스트에 통과하게 되고 다른 상태 코드를 반환하면 fail이 뜨게 된다.
'TIL > Python' 카테고리의 다른 글
[DRF] Nested Serializer (0) | 2024.05.16 |
---|---|
[Python] 웹 크롤링 / trafilatura (0) | 2024.05.07 |
DRF JWT로 로그아웃 기능 넣기 (0) | 2024.05.01 |
DRF Pagination 설정 / APIView 사용 시 세팅 (0) | 2024.04.29 |
DRF Serializer 패스워드 해싱 (0) | 2024.04.26 |