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
Другие расширения