최용우
장고 테스트 케이스 사용법 본문
테스트의 중요성이 크다고 한다.
내가 만든 api가 잘 작동하는지 확인하기 위해서, 예상치 못한 오류를 잡아내기 위해서
테스트는 아무리 강조해조 지나치지 않다.
사실 나는 지금까지 insomnia라는 http request를 통해서 수동으로 테스트를 했다.
얼마나 비효율적인 방식인가.
'프로그래머 = 효율' 이라고 생각했던 내가 만연하게 저지르고 있었던 잘못이다.
장고 프로젝트에서 app을 생성하면 tests.py가 딸려온다.
예제를 통해 알아보자.
#tests.py
class TestRegister(APITestCase):
def setUp(self):
self.url = "http://127.0.0.1:8000/api/register/"
def test_post_user_data(self):
self.user_data = {
"username": "test@naver.com",
"password": "test"
}
self.client.post(self.url, data=self.user_data)
TestRegister라는 임의의 테스트 클래스다. APITestCase를 상속 받았다. 다시 APITestCase는 장고의 TestCase를 상속 받고 기본 클라이언트가 아닌 APIclient를 사용한다. 여기서 말하는 클라이언트는 http request를 보내는 프론트 역할을 한다. APIclient도 장고의 기본 클라이언트를 상속 받았지만 credential 기능이 추가 된것이 큰 차이점이다. (인증이 필요한 기능을 테스트 할 수 있겠다)
setUp 메소드는 인스턴스 생성시 단 한번 실행된다. 초기데이터를 지정한다.
그 아래 test_post_user_date 함수는 실질적으로 post 요청을 테스트 하는 것인데
이런 테스트 함수는 앞에 test_를 붙여주어야 한다.
그럼 이 test 함수안에 사용할만한 메소드를 알아보자.
- self.assertEquals(first, second) - first와 second를 비교하기
- self.asserTrue(arg) - arg가 true인지 확인
- self.assertFalse(arg) - arg가 false인지 확인
상황에 맞게 위 assert를 사용하여 테스트 케이스를 구축하면된다.
테스트 코드를 작성하고는 manage.py가 있는 디렉토리에서(가상환경 진입후)
$python manage.py test'장고' 카테고리의 다른 글
| 파이썬 정규식 비캡처링 그룹 '?:' (1) | 2022.03.06 |
|---|---|
| 장고 ReadOnlyField의 쓰임 (1) | 2022.02.26 |
| Django 시리얼라이저, ReadOnlyField (1) | 2022.02.13 |
| 하나의 서버에서 2개 이상 django 프로젝트 배포하기 (2) | 2022.02.12 |
| requirements.txt 만들기 (2) | 2022.02.09 |