출처:
독립적인 콤포넌트의 (성능이 아닌) 기능적인 동작을 검증한다. 흔히 class나 function 레벨로 수행한다
DJANGO는 파이썬 표준 라이브러리 UnitTest로 만들어진 작은 클라스 계층의 테스트 툴을 제공합니다. 그래서 내가 작성한 로직을 테스트하는 유닛테스트 코드를 짜서 테스트하게 됩니다. 해당 유닛테스트를 사용하는 이유는 API를 테스트하는데 앤드포인트가 10개라면 테스트할 때 Httpie나 Postman을 사용하면 수분이 걸릴 것을 유닛테스트를 진행하게 되면 수초안에 해결할 수 있기 때문에 사용하죠! 거기다가 추가적으로 사람이 테스트를 하게 될 경우, 부정확성과 비용에 대한 부분도 생각해야 되기 때문에 여러면에서 Unittest을 사용하는 것이 효율적이겠죠?
Unit Test를 구현할 때 지켜야 하는 일반적인 원칙들입니다. (해당 자료는 다양한 블로그를 참조해서 작성했습니다.)
import json
from homes.models import Home, HomeType, BuildingType,Region,PriceCategory,HomePrice
from django.test import TestCase, Client
class HomeListTest(TestCase):
def setUp(self):
building_type = BuildingType.objects.create(
name = '집 전체'
)
home_type = HomeType.objects.create(
name = '다인실'
)
region = Region.objects.create(
id = 1,
name = "강남구",
latitude = "37.492465",
longitude = "127.068818",
zoom_level = 13,
around_radius_m = 8000
)
region2 = Region.objects.create(
id = 2,
name = "구로구",
latitude = "37.392465",
longitude = "127.168818",
zoom_level = 13,
around_radius_m = 8000
)
price = PriceCategory.objects.create(
name = "1박비용"
)
home1 = Home.objects.create(
name = "승재's 오피스텔 #2 구일점",
address = "구로구, 서울, 대한민국",
description = "Welcome to my home. 저희 집에 오신것을 환영합니다.",
capacity_guest = 4,
latitude = 37.501670,
longitude = 127.035530,
home_type = home_type,
building_type = building_type,
region = region2
)
home2 = Home.objects.create(
name = "승재's 오피스텔 #2 강남점",
address = "강남구, 서울, 대한민국",
description = "Welcome to my home. 저희 집에 오신것을 환영합니다.",
capacity_guest = 4,
latitude = 37.301670,
longitude = 127.135530,
home_type = home_type,
building_type = building_type,
region = region
)
HomePrice.objects.create(home=home1,price_category=price,cost=10000)
HomePrice.objects.create(home=home2,price_category=price,cost=100000)
def tearDown(self):
Home.objects.all().delete()
HomeType.objects.all().delete()
BuildingType.objects.all().delete()
Region.objects.all().delete()
def test_homelistview_get_success(self):
client = Client()
response = client.get('/homes')
self.assertEqual(response.json()['homes'][0]['home_name'], "승재's 오피스텔 #2 구일점")
self.assertEqual(response.status_code, 200)
def test_homelistview_get_filtering_region(self):
client = Client()
response = client.get('/homes?region=1')
self.assertEqual(response.json()['homes'][0]['region']['region_name'], "강남구")
self.assertEqual(response.status_code, 200)
def test_homelistview_get_not_found(self):
client = Client()
response = client.get('/homes?region=3')
self.assertEqual(response.status_code, 404)
현재 2차 프로젝트로 숙박업소 데이터가 필요하여 Models에 숙박 (Home)과 해당 숙박의 숙박 유형/건물 유형/ 지역 정보/ 가격정보(HomeType, BuildingType, RegionType, PriceCategory)가 있습니다.
먼저 setUp() 함수로 테스트에 필요한 객체들을 선언!
해당 데이터는 다른 DB 풀에서 생성되기 때문에 실제 DB 데이터와는 상관이 없습니다.
해당 테스트가 끝나고 만들었던 데이터를 삭제하는 tearDown() 메소드 설정 !
그 밑으로는 Client()객체를 만들어서 API 앤드포인트 호출시 조회된 값이 잘 오는지는 로직을 짜면 끝!
결과 화면 ~!
위에 사진처럼 준비한 테스트를 python test 테스트할 APP명
명령어로 시작하면 테스트에 통과했는지 안 했는지를 알 수 있습니다 !