Search Topics

Search across all FastAPI topics

GitHub

Testing

1 topic

Before shipping your API, make sure it works. Testing with FastAPI's TestClient lets you simulate real HTTP requests without running a server.

Tip

FastAPI's TestClient is built on httpx. You write tests with pytest, call your endpoints just like a real client would, and assert on status codes and JSON responses. No server needed.

How Testing Works

Step 1: Write Test

Define a test function using pytest conventions (def test_*).

These are the patterns that trip up developers most often. Switch between Wrong and Fixed to compare the code side by side.

1
Testing against a real database
Not using dependency overrides for database sessions
Don't do this
test_main.py
def test_create_item():
    client = TestClient(app)
    # Writes to your production database!
    response = client.post("/items", json={"name": "Test"})
    assert response.status_code == 200
Always override database dependencies in tests. Without this, tests run against your real database — corrupting data, creating flaky tests, and making cleanup a nightmare.
2
Forgetting to clear overrides
Dependency overrides leaking between test files
Don't do this
test_main.py
# test_items.py
app.dependency_overrides[get_db] = get_test_db

def test_items():
    ...
# Overrides leak to other test files!
Use a pytest fixture with autouse=True and clear overrides in the teardown (after yield). This ensures each test file starts with a clean slate.