Skip to main content
FastAPI provides excellent testing support through the TestClient, which is built on top of Starlette’s testing utilities and uses the HTTPX library.

Installing Test Dependencies

Install pytest and httpx:
If you installed FastAPI with pip install fastapi[standard], these dependencies are already included.

Using TestClient

Import TestClient and create a client instance with your FastAPI app:
You can use both def and async def for test functions with TestClient. The client works the same way regardless.

Basic Testing Pattern

1

Create TestClient

Instantiate TestClient with your FastAPI application:
2

Make Requests

Use the client to make HTTP requests:
3

Assert Results

Verify the response:

Test File Organization

Organize your tests in a separate directory:

Example Test File

Testing Different HTTP Methods

GET Requests

POST Requests

PUT Requests

DELETE Requests

Testing with Headers

Add headers to your requests:

Testing Request Bodies

JSON Bodies

Form Data

File Uploads

Testing Query Parameters

Complete Testing Example

Application Code (main.py)

Test Code (test_main.py)

Running Tests

Run tests with pytest:

Testing with Fixtures

Use pytest fixtures for reusable test setup:

Testing Dependencies

Override dependencies for testing:
Dependency overrides are useful for mocking databases, authentication, and other external services.

Testing Database Operations

Use a test database or mock:

Testing WebSockets

Test WebSocket connections:

Best Practices

1

Separate Test Files

Organize tests by feature or module, mirroring your application structure.
2

Use Fixtures

Create reusable fixtures for common setup like database connections, test clients, and authentication.
3

Test Edge Cases

Test not just the happy path, but also error conditions, validation failures, and edge cases.
4

Mock External Services

Use dependency overrides to mock external APIs, databases, and services.
5

Clean Up

Ensure tests clean up after themselves (close connections, delete test data, etc.).
6

Test Coverage

Aim for high test coverage, but focus on meaningful tests over just hitting coverage targets.
TestClient runs your FastAPI application in the same process, making tests fast and eliminating network overhead. You can use it with both synchronous and asynchronous code.