본문으로 바로가기

[FastAPI] Post API의 Form Body 테스트

category Frame Work/FastAPI 2023. 10. 11. 12:19
728x90
반응형

목차

     

    개요 

    FastAPI에서 Post Method를 이용해 동작하는데 API를 만들었다. 이때 입력이 Json 방식이 아니라 Form이라면 테스트 코드는 어떻게 만들어야 할까?

     

    1. FastAPI,  Post API의 Body 

    FastAPI에서 Form을 사용하려면 python-multipart가 설치되어있어야한다. FastAPI를 설치하는 중에는 함께 설치가되진 않는다.

    $ pip install python-multipart

    아래 코드는 FastAPI를 통해 API를 정의한 예제 코드다.

    from __future__ import annotations
    
    from fastapi.responses import JSONResponse
    from fastapi.routing import APIRouter
    
    route = APIRouter(tags=['Some'], prefix="/api")
    
    @route.post(path="/some")
    def some_post_api(
            nickname: str = Form(default=None, description="NickName", embed=True)
    ):
        print(nickname)
    
        return JSONResponse(content={
            'nickname': nickname
        })

    위 예제에서 입력 데이터가 Body로 선언된 것이 아님에 주목해야 된다. FastAPI에서 Body 객체를 이용하면 Json 입력 대신 Multipart-Form 방식으로 입력받을 수 있게 된다.

     

     

    2. Test 코드 작성 시 주의하기

    Body 객체를 이용한 API를 테스트하기 위해선 FastAPI에서는 다음과 같은 코드를 작성할 수 있다.

    from fastapi.testclient import TestClient
    
    client = TestClient(app)
    
    def test_somee_api():
        response = client.post(
            '/api/test',
            data={
                "nickname": "jako",
            })
        assert response.status_code == 200

    TestClient 인스턴스에 post 메서드를 호출하고 인자로 "data"를 이용했다. 만약 Form이 아닌 Body를 사용한다면 "json"이라는 파라미터를 이용해야 한다는 점을 기억하자.

    from fastapi.testclient import TestClient
    
    client = TestClient(app)
    
    def test_somee_api():
        response = client.post(
            '/api/test',
            data={
                "nickname": "jako",
            })
        assert response.status_code == 200

     

    728x90
    반응형