Атрибут timeout
Атрибут timeout применяется к экземпляру класса
TestClient
и задаёт максимальное время ожидания ответа при выполнении
тестового запроса к приложению. Значение передаётся в конструктор
класса TestClient и хранится в одноимённом атрибуте.
Если обработчик не успевает ответить за указанное время,
поднимается исключение TimeoutException.
По умолчанию атрибут не задан, то есть ожидание не ограничено.
Синтаксис
from fastapi.testclient import TestClient
client = TestClient(app, timeout=5)
Значение timeout указывается в секундах и может быть
целым или дробным числом. Прочитать текущее значение можно
через атрибут timeout экземпляра клиента.
Пример
Давайте создадим приложение с быстрым обработчиком и клиент с таймаутом в 5 секунд:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get('/')
def index():
return {'text': 'hello'}
client = TestClient(app, timeout=5)
res = client.get('/')
print(res.json())
Результат выполнения кода:
{'text': 'hello'}
Пример
Давайте прочитаем значение атрибута timeout:
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
client = TestClient(app, timeout=3.5)
print(client.timeout)
Результат выполнения кода:
3.5
Пример
Давайте проверим, что медленный обработчик не успевает ответить за указанный таймаут:
import time
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get('/slow')
def slow():
time.sleep(2)
return {'text': 'done'}
client = TestClient(app, timeout=0.5)
try:
res = client.get('/slow')
except Exception as e:
print(type(e).__name__)
Результат выполнения кода:
"TimeoutException"
Смотрите также
-
класс
TestClient,
который используется для тестирования приложения FastAPI -
атрибут
app,
который хранит тестируемое приложение -
атрибут
base_url,
который задаёт базовый адрес тестовых запросов -
атрибут
follow_redirects,
который управляет следованием по перенаправлениям