首頁 > 後端開發 > Python教學 > 為什麼應該使用單一 FastAPI 應用程式和 TestClient 實例

為什麼應該使用單一 FastAPI 應用程式和 TestClient 實例

Barbara Streisand
發布: 2025-01-18 22:15:09
原創
600 人瀏覽過

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. 重疊的啟動/關閉事件:多個應用程式實例獨立觸發啟動和關閉事件,導致不必要或衝突的行為。

最佳實踐

可重用性項目結構

在單獨的檔案(例如 app.py)中建立 FastAPI 應用程式並在需要時匯入。

<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 專案將更加一致、有效率且更易於維護。


肖恩杜塔拍攝:https://www.php.cn/link/e2d083a5fd066b082d93042169313e21

以上是為什麼應該使用單一 FastAPI 應用程式和 TestClient 實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板