5.1 KiB
🔬
👏 💃, 🔬 FastAPI 🈸 ⏩ & 😌.
⚫️ ⚓️ 🔛 🇸🇲, ❔ 🔄 🏗 ⚓️ 🔛 📨, ⚫️ 📶 😰 & 🏋️.
⏮️ ⚫️, 👆 💪 ⚙️ ✳ 🔗 ⏮️ FastAPI.
⚙️ TestClient
/// info
⚙️ TestClient, 🥇 ❎ httpx.
🤶 Ⓜ. pip install httpx.
///
🗄 TestClient.
✍ TestClient 🚶♀️ 👆 FastAPI 🈸 ⚫️.
✍ 🔢 ⏮️ 📛 👈 ▶️ ⏮️ test_ (👉 🐩 pytest 🏛).
⚙️ TestClient 🎚 🎏 🌌 👆 ⏮️ httpx.
✍ 🙅 assert 📄 ⏮️ 🐩 🐍 🧬 👈 👆 💪 ✅ (🔄, 🐩 pytest).
{!../../docs_src/app_testing/tutorial001.py!}
/// tip
👀 👈 🔬 🔢 😐 def, 🚫 async def.
& 🤙 👩💻 😐 🤙, 🚫 ⚙️ await.
👉 ✔ 👆 ⚙️ pytest 🔗 🍵 🤢.
///
/// note | 📡 ℹ
👆 💪 ⚙️ from starlette.testclient import TestClient.
FastAPI 🚚 🎏 starlette.testclient fastapi.testclient 🏪 👆, 👩💻. ✋️ ⚫️ 👟 🔗 ⚪️➡️ 💃.
///
/// tip
🚥 👆 💚 🤙 async 🔢 👆 💯 ↖️ ⚪️➡️ 📨 📨 👆 FastAPI 🈸 (✅ 🔁 💽 🔢), ✔️ 👀 🔁 💯{.internal-link target=_blank} 🏧 🔰.
///
🎏 💯
🎰 🈸, 👆 🎲 🔜 ✔️ 👆 💯 🎏 📁.
& 👆 FastAPI 🈸 5️⃣📆 ✍ 📚 📁/🕹, ♒️.
FastAPI 📱 📁
➡️ 💬 👆 ✔️ 📁 📊 🔬 🦏 🈸{.internal-link target=_blank}:
.
├── app
│ ├── __init__.py
│ └── main.py
📁 main.py 👆 ✔️ 👆 FastAPI 📱:
{!../../docs_src/app_testing/main.py!}
🔬 📁
⤴️ 👆 💪 ✔️ 📁 test_main.py ⏮️ 👆 💯. ⚫️ 💪 🖖 🔛 🎏 🐍 📦 (🎏 📁 ⏮️ __init__.py 📁):
.
├── app
│ ├── __init__.py
│ ├── main.py
│ └── test_main.py
↩️ 👉 📁 🎏 📦, 👆 💪 ⚙️ ⚖ 🗄 🗄 🎚 app ⚪️➡️ main 🕹 (main.py):
{!../../docs_src/app_testing/test_main.py!}
...& ✔️ 📟 💯 💖 ⏭.
🔬: ↔ 🖼
🔜 ➡️ ↔ 👉 🖼 & 🚮 🌖 ℹ 👀 ❔ 💯 🎏 🍕.
↔ FastAPI 📱 📁
➡️ 😣 ⏮️ 🎏 📁 📊 ⏭:
.
├── app
│ ├── __init__.py
│ ├── main.py
│ └── test_main.py
➡️ 💬 👈 🔜 📁 main.py ⏮️ 👆 FastAPI 📱 ✔️ 🎏 ➡ 🛠️.
⚫️ ✔️ GET 🛠️ 👈 💪 📨 ❌.
⚫️ ✔️ POST 🛠️ 👈 💪 📨 📚 ❌.
👯♂️ ➡ 🛠️ 🚚 X-Token 🎚.
//// tab | 🐍 3️⃣.6️⃣ & 🔛
{!> ../../docs_src/app_testing/app_b/main.py!}
////
//// tab | 🐍 3️⃣.1️⃣0️⃣ & 🔛
{!> ../../docs_src/app_testing/app_b_py310/main.py!}
////
↔ 🔬 📁
👆 💪 ⤴️ ℹ test_main.py ⏮️ ↔ 💯:
{!> ../../docs_src/app_testing/app_b/test_main.py!}
🕐❔ 👆 💪 👩💻 🚶♀️ ℹ 📨 & 👆 🚫 💭 ❔, 👆 💪 🔎 (🇺🇸🔍) ❔ ⚫️ httpx, ⚖️ ❔ ⚫️ ⏮️ requests, 🇸🇲 🔧 ⚓️ 🔛 📨' 🔧.
⤴️ 👆 🎏 👆 💯.
🤶 Ⓜ.:
- 🚶♀️ ➡ ⚖️ 🔢 🔢, 🚮 ⚫️ 📛 ⚫️.
- 🚶♀️ 🎻 💪, 🚶♀️ 🐍 🎚 (✅
dict) 🔢json. - 🚥 👆 💪 📨 📨 💽 ↩️ 🎻, ⚙️
data🔢 ↩️. - 🚶♀️ 🎚, ⚙️
dictheaders🔢. - 🍪,
dictcookies🔢.
🌖 ℹ 🔃 ❔ 🚶♀️ 💽 👩💻 (⚙️ httpx ⚖️ TestClient) ✅ 🇸🇲 🧾.
/// info
🗒 👈 TestClient 📨 💽 👈 💪 🗜 🎻, 🚫 Pydantic 🏷.
🚥 👆 ✔️ Pydantic 🏷 👆 💯 & 👆 💚 📨 🚮 💽 🈸 ⏮️ 🔬, 👆 💪 ⚙️ jsonable_encoder 🔬 🎻 🔗 🔢{.internal-link target=_blank}.
///
🏃 ⚫️
⏮️ 👈, 👆 💪 ❎ pytest:
$ pip install pytest
---> 100%
⚫️ 🔜 🔍 📁 & 💯 🔁, 🛠️ 👫, & 📄 🏁 🔙 👆.
🏃 💯 ⏮️:
$ pytest
================ test session starts ================
platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
rootdir: /home/user/code/superawesome-cli/app
plugins: forked-1.1.3, xdist-1.31.0, cov-2.8.1
collected 6 items
---> 100%
test_main.py <span style="color: green; white-space: pre;">...... [100%]</span>
<span style="color: green;">================= 1 passed in 0.03s =================</span>