Python / FastAPI Interview Questions
How do you test async FastAPI endpoints and async dependencies?
Use httpx.AsyncClient with ASGITransport for async tests, and pytest-asyncio to run async test functions. Combine with app.dependency_overrides to mock async dependencies.
# pip install pytest pytest-asyncio httpx
# conftest.py
import pytest
from httpx import AsyncClient, ASGITransport
from app.main import app, get_db
from app.database import AsyncSessionLocal, Base, engine
@pytest.fixture(scope="function")
async def async_client():
# Use a test database
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async def override_db():
async with AsyncSessionLocal() as session:
yield session
app.dependency_overrides[get_db] = override_db
async with AsyncClient(
transport=ASGITransport(app=app),
base_url="http://test",
) as client:
yield client
app.dependency_overrides.clear()
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
# tests/test_users.py
import pytest
@pytest.mark.asyncio
async def test_create_user(async_client):
response = await async_client.post(
"/users",
json={"username": "alice", "email": "alice@example.com"},
)
assert response.status_code == 201
data = response.json()
assert data["username"] == "alice"
assert "password" not in data # response_model excludes it
@pytest.mark.asyncio
async def test_list_users_empty(async_client):
response = await async_client.get("/users")
assert response.status_code == 200
assert response.json() == []
@pytest.mark.asyncio
async def test_validation_error(async_client):
response = await async_client.post("/users", json={"username": "ab"}) # too short
assert response.status_code == 422
errors = response.json()["detail"]
assert any("username" in str(e) for e in errors)
# pytest.ini
[pytest]
asyncio_mode = auto # or use @pytest.mark.asyncio on each test
Invest now in Acorns!!! 🚀
Join Acorns and get your $5 bonus!
Acorns is a micro-investing app that automatically invests your "spare change" from daily purchases into diversified, expert-built portfolios of ETFs. It is designed for beginners, allowing you to start investing with as little as $5. The service automates saving and investing. Disclosure: I may receive a referral bonus.
Invest now!!! Get Free equity stock (US, UK only)!
Use Robinhood app to invest in stocks. It is safe and secure. Use the Referral link to claim your free stock when you sign up!.
The Robinhood app makes it easy to trade stocks, crypto and more.
Webull! Receive free stock by signing up using the link: Webull signup.
More Related questions...
