Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Anda Perlu Menggunakan Apl FastAPI Tunggal dan Contoh TestClient

Mengapa Anda Perlu Menggunakan Apl FastAPI Tunggal dan Contoh TestClient

Barbara Streisand
Lepaskan: 2025-01-18 22:15:09
asal
600 orang telah melayarinya

Why You Should Use a Single FastAPI App and TestClient Instance

Dalam pembangunan FastAPI, terutamanya untuk projek yang lebih besar, menggunakan satu contoh aplikasi FastAPI dan satu contoh TestClient sepanjang projek anda adalah penting untuk mengekalkan konsistensi, mengoptimumkan prestasi dan memastikan kebolehpercayaan. Mari kita periksa sebab di sebalik amalan terbaik ini dan terokai contoh praktikal.

1. Ketekalan Luas Aplikasi

Mencipta berbilang contoh apl FastAPI boleh menimbulkan ketidakkonsistenan. Setiap kejadian mempunyai keadaan dalaman sendiri, konfigurasi perisian tengah dan pengurusan pergantungan. Berkongsi data berstatus, seperti storan dalam memori atau sambungan pangkalan data, merentas berbilang kejadian boleh membawa kepada tingkah laku dan ralat yang tidak dapat diramalkan.

2. Prestasi Dipertingkat

Setiap contoh TestClient mewujudkan sambungan HTTP sendiri dan memulakan kebergantungan. Menggunakan TestClient tunggal meminimumkan overhed, menghasilkan pelaksanaan ujian yang lebih pantas.

3. Mencegah Masalah Permulaan

Aplikasi FastAPI sering memulakan sumber, termasuk sambungan pangkalan data atau tugas latar belakang, semasa permulaan. Berbilang kejadian boleh menyebabkan permulaan berlebihan atau konflik sumber.

Contoh Kod Hands-On

Pendekatan Betul: Apl Tunggal dan 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>
Salin selepas log masuk

Pendekatan Salah: Berbilang Kejadian

<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>
Salin selepas log masuk

Masalah Biasa dengan Berbilang Kejadian

  1. Keadaan Tidak Konsisten: Keadaan kongsi (seperti pangkalan data) bertindak secara bebas merentas kejadian apl yang berbeza.
  2. Permulaan Ketergantungan Berlebihan: Ketergantungan seperti sambungan pangkalan data mungkin dimulakan beberapa kali, yang berpotensi membawa kepada kehabisan sumber.
  3. Peristiwa Permulaan/Tutup Bertindih: Berbilang kejadian apl mencetuskan peristiwa permulaan dan penutupan secara berasingan, menyebabkan gelagat yang tidak perlu atau bercanggah.

Amalan Terbaik

Struktur Projek untuk Kebolehgunaan Semula

Buat apl FastAPI anda dalam fail berasingan (cth., app.py) dan importnya di mana perlu.

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

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

client = TestClient(app)</code>
Salin selepas log masuk

Memanfaatkan Lekapan pytest untuk Kejadian Dikongsi

lekapan pytest mengurus sumber kongsi dengan berkesan, seperti 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>
Salin selepas log masuk
<code class="language-python">def test_example(test_client):
    response = test_client.get("/items/")
    assert response.status_code == 200</code>
Salin selepas log masuk

Dokumentasi Berkaitan

  • Starlette TestClient
  • Menguji dengan FastAPI
  • Pytest Lekapan

Dengan mematuhi garis panduan ini, projek FastAPI anda akan menjadi lebih konsisten, cekap dan lebih mudah diselenggara.


Foto oleh Shawon Dutta: https://www.php.cn/link/e2d083a5fd066b082d93042169313e21

Atas ialah kandungan terperinci Mengapa Anda Perlu Menggunakan Apl FastAPI Tunggal dan Contoh TestClient. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan