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) #에러가 나와야만 함