FrameWork/Django
Test
mansoorrr
2024. 7. 26. 11:55
API를 만들고 잘 되는지 확인하기 위해 브라우저에 들어가서 하나씩 확인하는 과정을 거쳤다.
점점 api가 많아질수록 힘들어진다.
이를 위해 django는 api를 만든 후 test해볼 수 있는 기능을 제공한다.(python manage.py test)
각 application마다 tests.py 파일이 있다. 여기에 테스트할 내용을 클래스로 명시하면 된다.
기본적으로 django.test import TestCase가 임포트 되어있다.
하지만 rest_framework.test의 APITestCase를 상속받아 테스트 한다.
테스트를 위해 클래스를 만들고 그 안에 매서드를 만들어 테스트할 사항을 세부적으로 명시한다.
이때 매서드이름에는 "test_"가 앞에 꼭 들어가야 한다. 그래야만 테스트가 가능하다.
[**test**]
- python manage.py test를 통해 테스트를 진행하면 가db가 만들어졌다가 테스트 후 사라짐
- 가 db를 컨트롤하는 매서드는 setUp매서드
from rest_framework.test import APITestCase
from . import models
#------------------------ Amenity(get, post)
class TestAmenities(APITestCase):
NAME="TEST1"
DESC="DESC1"
URL = "/api/v1/rooms/amenities/"
#test시 만들어지는 모델 컨트롤
def setUp(self):
models.Amenity.objects.create(
name=self.NAME,
description=self.DESC,
)
#get
def test_all_amenities(self):
#url에 접근
response = self.client.get("/api/v1/rooms/amenities/")
data = response.json()
#data가 리스트인지 확인
self.assertIsInstance(data, list)
#data잘 입력 됐는지 확인
self.assertEqual(data[0]['name'], self.NAME, 'not name')
#모두 들어갈 수 있는지 확인
self.assertEqual(response.status_code, 200, 'not 200')
#post
def test_create_amenity(self):
new_amenity_name = "post test"
new_amenity_description = "post desc"
#----- 값을 제대로 보낼때
response = self.client.post(
self.URL,
data={
"name":new_amenity_name,
"description": new_amenity_description
}
)
data = response.json()
self.assertEqual(response.status_code, 200, 'not 200') #제대로 실행 됐는지
self.assertEqual(data['name'], new_amenity_name, 'hmmm') #data값 제대로 도출 되는지
self.assertEqual(data['description'], new_amenity_description, 'hmmm') #data값 제대로 도출 되는지
#----- 값을 제대로 보내지 않을때
response = self.client.post(self.URL)
data = response.json()
self.assertEqual(response.status_code, 400, 'have to 400') #400이 나와야만 함
self.assertIn('name', data) #에러가 나와야만 함