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
반응형
'Frame Work > FastAPI' 카테고리의 다른 글
[FastAPI] Request 단위의 Transaction 잡기 (1) | 2023.12.01 |
---|---|
[FastAPI] Header Authenticate와 Swagger Authorize (1) | 2023.11.27 |
[FastAPI] 테스트 코드 작성 시에는 연결을 조정할 수 있게 만들자. (0) | 2023.10.10 |
[FastAPI] DI는 bootstrapping을 생각해보기 (0) | 2023.10.06 |
[FastAPI] 실행은 Factory Pattern을 적용하자. (0) | 2023.09.15 |