[python] Flask-RESTful에서 유닛 테스트 작성 방법

Flask-RESTful은 Flask 프레임워크를 기반으로 한 RESTful API 개발을 위한 확장판입니다. API의 기능을 검증하기 위해 유닛 테스트를 작성하는 것은 매우 중요합니다. 이 글에서는 Flask-RESTful에서 유닛 테스트를 작성하는 방법에 대해 알아보겠습니다.

테스트 환경 설정

먼저, 테스트 환경을 설정해야 합니다. 테스트를 위해 unittest 모듈을 사용할 것입니다. Flask-RESTful은 테스트를 위해 Flask-Testing이라는 패키지도 제공합니다. 이 패키지를 설치해야 합니다.

pip install Flask-Testing

또한, 테스트할 API에 대한 클래스를 작성해야 합니다. 예를 들어, UserAPI라는 클래스를 작성한다고 가정해봅시다. 이 클래스는 GET, POST, PUT, DELETE 등의 HTTP 메소드를 사용하여 사용자 데이터를 처리하는 역할을 합니다.

from flask_restful import Resource

class UserAPI(Resource):
    def get(self, user_id):
        ...
    
    def post(self):
        ...
    
    def put(self, user_id):
        ...
    
    def delete(self, user_id):
        ...

유닛 테스트 작성하기

이제 유닛 테스트를 작성해보겠습니다. unittest.TestCase를 상속받은 테스트 클래스를 작성하고, 테스트 메소드를 작성합니다. 테스트 클래스 이름은 관례에 따라 Test 접두사를 붙여주는 것이 좋습니다.

import unittest
from flask import Flask
from flask_restful import Api
from your_app import UserAPI

class TestUserAPI(unittest.TestCase):
    def setUp(self):
        self.app = Flask(__name__)
        self.api = Api(self.app)
        self.api.add_resource(UserAPI, '/users')

    def test_get_user(self):
        with self.app.test_client() as client:
            response = client.get('/users/1')
            self.assertEqual(response.status_code, 200)
            # 추가적인 검증 로직 작성

    def test_post_user(self):
        with self.app.test_client() as client:
            response = client.post('/users')
            self.assertEqual(response.status_code, 201)
            # 추가적인 검증 로직 작성

    def test_put_user(self):
        with self.app.test_client() as client:
            response = client.put('/users/1')
            self.assertEqual(response.status_code, 200)
            # 추가적인 검증 로직 작성
    
    def test_delete_user(self):
        with self.app.test_client() as client:
            response = client.delete('/users/1')
            self.assertEqual(response.status_code, 204)
            # 추가적인 검증 로직 작성

if __name__ == '__main__':
    unittest.main()

각 테스트 메소드는 Flask의 테스트 클라이언트를 사용하여 API의 각 엔드포인트에 대해 요청을 보내고, 예상한 응답을 검증합니다. assertEqual 메소드를 사용하여 응답 상태 코드 등을 검증할 수 있습니다.

테스트 실행 및 결과 확인

테스트 클래스를 실행하기 위해 터미널에서 다음 명령을 실행합니다.

python -m unittest test_user_api.py

테스트 결과가 표시되고, 각 테스트 메소드의 검증 결과가 보여질 것입니다.

이제 Flask-RESTful에서 유닛 테스트를 작성하는 방법에 대해 알아보았습니다. API의 기능을 확실히 검증하기 위해서는 테스트 코드를 작성하는 것이 필수적입니다.