Skip to main content

Test client

Introduction

Testing is an integral part of software development, and FastAPI provides a built-in test client to simplify the process. This tutorial will guide you through the steps of setting up and using the test client in FastAPI.

What is a Test Client?

In FastAPI, the TestClient is a class provided by the fastapi.testclient module. It's a Python class that acts as a client to your FastAPI application and allows you to send HTTP requests to it and receive the responses. This is especially useful in testing because it enables you to create automated tests for your API endpoints.

Setting Up a Test Client

Before we can use the TestClient, we first need to have a FastAPI application. Let's create a simple one:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
return {"Hello": "World"}

To create a TestClient, we need to import it from the fastapi.testclient module and then pass our FastAPI application to it:

from fastapi.testclient import TestClient

client = TestClient(app)

After executing the above code, we can now use the client object to send requests to our FastAPI application.

Using the Test Client

The TestClient object provides methods for sending HTTP requests to our FastAPI application. These methods correspond to the different HTTP methods (GET, POST, PUT, DELETE, etc.). For example, to send a GET request to the root endpoint ("/"), we can use the .get() method:

response = client.get("/")

This will send a GET request to the root endpoint and store the response in the response variable.

The response object contains all the information about the response, such as the status code, headers, and body. For example, to get the status code, you can use response.status_code. To get the body as a JSON object, you can use response.json().

print(response.status_code)  # Prints the status code
print(response.json()) # Prints the response body as a JSON object

Writing Tests

We can now start writing tests for our FastAPI application. Tests are functions that check if certain conditions are met. If these conditions are not met, the test function should raise an exception. In Python, we usually use the assert statement for this.

Here is an example of a test function for the root endpoint:

def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}

This test function sends a GET request to the root endpoint and then checks if the status code is 200 and if the body is {"Hello": "World"}.

Summary

In this tutorial, we learned about the FastAPI TestClient and how to use it to test our FastAPI application. We learned how to set up a test client, send requests, and write tests. With this knowledge, you should be able to start writing tests for your own FastAPI applications. Happy testing!