>백엔드 개발 >파이썬 튜토리얼 >단일 FastAPI 앱과 TestClient 인스턴스를 사용해야 하는 이유

단일 FastAPI 앱과 TestClient 인스턴스를 사용해야 하는 이유

Barbara Streisand
Barbara Streisand원래의
2025-01-18 22:15:09557검색

Why You Should Use a Single FastAPI App and TestClient Instance

FastAPI 개발, 특히 대규모 프로젝트의 경우 프로젝트 전반에 걸쳐 단일 FastAPI 애플리케이션 인스턴스와 단일 TestClient 인스턴스를 사용하는 것은 일관성을 유지하고 성능을 최적화하며 안정성을 보장하는 데 중요합니다. 이 모범 사례의 이유를 살펴보고 실제 사례를 살펴보겠습니다.

1. 애플리케이션 전체의 일관성

여러 FastAPI 앱 인스턴스를 생성하면 불일치가 발생할 수 있습니다. 각 인스턴스는 자체 내부 상태, 미들웨어 구성 및 종속성 관리를 보유합니다. 여러 인스턴스에서 인메모리 스토리지 또는 데이터베이스 연결과 같은 상태 저장 데이터를 공유하면 예측할 수 없는 동작과 오류가 발생할 수 있습니다.

2. 향상된 성능

각 TestClient 인스턴스는 자체 HTTP 연결을 설정하고 종속성을 초기화합니다. 단일 TestClient를 활용하면 오버헤드가 최소화되어 테스트 실행 속도가 빨라집니다.

3. 초기화 문제 예방

FastAPI 애플리케이션은 시작 중에 데이터베이스 연결이나 백그라운드 작업을 포함한 리소스를 초기화하는 경우가 많습니다. 여러 인스턴스로 인해 중복 초기화 또는 리소스 충돌이 발생할 수 있습니다.

실습 코드 예시

올바른 접근 방식: 단일 앱 및 TestClient

<code class="language-python">from fastapi import FastAPI, Depends
from fastapi.testclient import TestClient

# Single FastAPI app instance
app = FastAPI()

# Simple in-memory database
database = {"items": []}

# Dependency function
def get_database():
    return database

@app.post("/items/")
def create_item(item: str, db: dict = Depends(get_database)):
    db["items"].append(item)
    return {"message": f"Item '{item}' added."}

@app.get("/items/")
def list_items(db: dict = Depends(get_database)):
    return {"items": db["items"]}

# Single TestClient instance
client = TestClient(app)

# Test functions
def test_create_item():
    response = client.post("/items/", json={"item": "foo"})
    assert response.status_code == 200
    assert response.json() == {"message": "Item 'foo' added."}

def test_list_items():
    response = client.get("/items/")
    assert response.status_code == 200
    assert response.json() == {"items": ["foo"]}</code>

잘못된 접근 방식: 다중 인스턴스

<code class="language-python"># Incorrect: Multiple app instances
app1 = FastAPI()
app2 = FastAPI()

# Incorrect: Multiple TestClient instances
client1 = TestClient(app1)
client2 = TestClient(app2)

# Problem: State changes in client1 won't affect client2</code>

다중 인스턴스의 일반적인 문제

  1. 일관되지 않은 상태: 공유 상태(예: 데이터베이스)는 여러 앱 인스턴스에서 독립적으로 작동합니다.
  2. 중복 종속성 초기화: 데이터베이스 연결과 같은 종속성은 여러 번 초기화되어 잠재적으로 리소스 고갈을 초래할 수 있습니다.
  3. 시작/종료 이벤트 중복: 여러 앱 인스턴스가 시작 및 종료 이벤트를 독립적으로 트리거하여 불필요하거나 충돌하는 동작을 유발합니다.

모범 사례

재사용을 위한 프로젝트 구조

FastAPI 앱을 별도의 파일(예: app.py)로 생성하고 필요한 곳에 가져옵니다.

<code class="language-python"># app.py
from fastapi import FastAPI

app = FastAPI()
# Add your routes here</code>
<code class="language-python"># main.py
from fastapi.testclient import TestClient
from app import app

client = TestClient(app)</code>

공유 인스턴스에 대한 pytest 설비 활용

pytest 픽스처는 TestClient와 같은 공유 리소스를 효과적으로 관리합니다.

<code class="language-python">import pytest
from fastapi.testclient import TestClient
from app import app

@pytest.fixture(scope="module")
def test_client():
    client = TestClient(app)
    yield client  # Ensures proper cleanup</code>
<code class="language-python">def test_example(test_client):
    response = test_client.get("/items/")
    assert response.status_code == 200</code>

관련 문서

  • Starlette 테스트 클라이언트
  • FastAPI로 테스트
  • pytest 설비

이러한 지침을 준수하면 FastAPI 프로젝트가 더욱 일관되고 효율적이며 유지 관리하기 쉬워집니다.


사진: Shawon Dutta: https://www.php.cn/link/e2d083a5fd066b082d93042169313e21

위 내용은 단일 FastAPI 앱과 TestClient 인스턴스를 사용해야 하는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.