Класс TestClient
Класс TestClient применяется для тестирования приложения
FastAPI. Первым параметром передаётся экземпляр приложения
app. Клиент использует библиотеку httpx
под капотом и позволяет вызывать методы get,
post, put, patch, delete
и другие. Вторым параметром можно передать
base_url, по умолчанию используется
'http://testserver'. Также можно указать
headers, cookies, follow_redirects
и другие параметры.
Синтаксис
from fastapi.testclient import TestClient
client = TestClient(app, base_url='http://testserver')
Пример
Давайте создадим приложение FastAPI и протестируем корневой маршрут:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get('/')
def index():
return {'text': 'hello'}
client = TestClient(app)
res = client.get('/')
print(res.status_code)
print(res.json())
Результат выполнения кода:
200
{'text': 'hello'}
Пример
Давайте отправим POST-запрос с данными и проверим ответ:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.post('/user')
def create_user(name: str):
return {'name': name}
client = TestClient(app)
res = client.post('/user', json={'name': 'abcde'})
print(res.status_code)
print(res.json())
Результат выполнения кода:
200
{'name': 'abcde'}
Пример
Давайте проверим заголовки и cookies ответа:
from fastapi import FastAPI, Response
from fastapi.testclient import TestClient
app = FastAPI()
@app.get('/set')
def set_data(response: Response):
response.set_cookie('user', 'abcde')
response.headers['X-Custom'] = 'hello'
return {'text': 'article'}
client = TestClient(app)
res = client.get('/set')
print(res.headers['X-Custom'])
print(res.cookies['user'])
Результат выполнения кода:
hello
abcde
Пример
Давайте проверим работу с параметрами URL и query-параметрами:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get('/user/{name}')
def user(name: str, age: int = 0):
return {'name': name, 'age': age}
client = TestClient(app)
res = client.get('/user/abcde?age=25')
print(res.status_code)
print(res.json())
Результат выполнения кода:
200
{'name': 'abcde', 'age': 25}