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.
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.
Setiap contoh TestClient mewujudkan sambungan HTTP sendiri dan memulakan kebergantungan. Menggunakan TestClient tunggal meminimumkan overhed, menghasilkan pelaksanaan ujian yang lebih pantas.
Aplikasi FastAPI sering memulakan sumber, termasuk sambungan pangkalan data atau tugas latar belakang, semasa permulaan. Berbilang kejadian boleh menyebabkan permulaan berlebihan atau konflik sumber.
<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>
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>
<code class="language-python"># main.py from fastapi.testclient import TestClient from app import app client = TestClient(app)</code>
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>
<code class="language-python">def test_example(test_client): response = test_client.get("/items/") assert response.status_code == 200</code>
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!