API тестового клиента Flask
FlaskClient — это имитация браузера, которая может отправлять запросы и проверять ответы без запуска сервера.
С помощьюapp.test_client()создайте экземпляр.
Создайте тестовый клиент
| Метод | Описание |
|---|---|
| app.test_client(use_cookies=True) | Стандартный способ создания. use_cookies=False отключает обработку cookie |
| with app.test_client() as client: | Контекстный менеджер. Автоматически очищает контекст запроса при выходе. |
Метод запроса
Все методы возвращаютTestResponseобъект (наследуется от Response).
| Методы | Описание |
|---|---|
| get(path, **kwargs) | Отправить GET-запрос |
| post(path, **kwargs) | Отправить POST-запрос |
| put(path, **kwargs) | Отправить PUT-запрос |
| delete(path, **kwargs) | Отправить DELETE-запрос |
| patch(path, **kwargs) | Отправить PATCH-запрос |
| open(path, method, **kwargs) | Универсальный метод запроса; метод должен быть явно указан. |
Параметры запроса (kwargs)
| Параметр | Описание |
|---|---|
| data | Тело запроса (строка или bytes). Используется для отправки формы. |
| json | Данные JSON, автоматически сериализуемые с установленным Content-Type: application/json |
| query_string | Строка или словарь параметров запроса URL |
| headers | Словарь заголовков запроса |
| content_type | Пользовательский Content-Type |
| follow_redirects | bool, автоматически следовать перенаправлениям. По умолчанию False. |
| buffered | bool, указывает, буферизовать ли ответ. По умолчанию — False. |
Объект Response (TestResponse)
| Атрибуты/Методы | Описание |
|---|---|
| status_code | HTTP-код состояния (int) |
| status | Текст состояния HTTP, например "200 OK" |
| data | Тело ответа (bytes) |
| text | Получить тело ответа в виде текста (str). |
| get_json() | Разобрать тело ответа как JSON. Возвращает dict или list. |
| headers | Заголовки ответа (объект Headers) |
| location | URL-адрес цели перенаправления (только для ответов 3xx). |
| json_module | Модуль, используемый для сериализации JSON (по умолчанию — app.json). |
Тест сессии
| Методы | Описание |
|---|---|
| session_transaction(**kwargs) | Контекстный менеджер для прямого чтения и записи сессии. Возвращает объект SessionMixin. |
Примеры кода
Пример
from app import create_app
app = create_app()
app.config["TESTING"] = True
def test_api():
with app.test_client() as client:
# Запрос GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# POST-запрос JSON
resp = client.post("/api/posts", json={
"title": "ПРИМЕР Руководство",
"body": "Содержимое для начала работы"
})
assert resp.status_code == 201
assert resp.get_json()["title"] == "ПРИМЕР Руководство"
# Запрос с параметрами запроса
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Имитация авторизованного состояния
with client.session_transaction() as sess:
sess["username"] = "пример"
resp = client.get("/dashboard")
assert b"example" in resp.data
# Следовать перенаправлениям
resp = client.post("/login", data={
"username": "admin"
}, follow_redirects=True)
assert resp.status_code == 200
app = create_app()
app.config["TESTING"] = True
def test_api():
with app.test_client() as client:
# Запрос GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# POST-запрос JSON
resp = client.post("/api/posts", json={
"title": "ПРИМЕР Руководство",
"body": "Содержимое для начала работы"
})
assert resp.status_code == 201
assert resp.get_json()["title"] == "ПРИМЕР Руководство"
# Запрос с параметрами запроса
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Имитация авторизованного состояния
with client.session_transaction() as sess:
sess["username"] = "пример"
resp = client.get("/dashboard")
assert b"example" in resp.data
# Следовать перенаправлениям
resp = client.post("/login", data={
"username": "admin"
}, follow_redirects=True)
assert resp.status_code == 200