Spec-Zone.ru › Werkzeug 2.3

Тестирование WSGI-приложений

Тестовый клиент

Werkzeug предоставляет Client для имитации запросов к WSGI-приложению без запуска сервера. Клиент имеет методы для выполнения различных типов запросов, а также управления куки между запросами.

>>> from werkzeug.test import Client
>>> from werkzeug.testapp import test_app
>>> c = Client(test_app)
>>> response = c.get("/")
>>> response.status_code
200
>>> resp.headers
Headers([('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', '6658')])
>>> response.get_data(as_text=True)
'<!doctype html>...'

Методы запроса клиента возвращают экземпляры TestResponse. Это предоставляет дополнительные атрибуты и методы поверх Response, которые полезны для тестирования.

Тело запроса

Передав словарь в data, клиент создаст тело запроса с данными файлов и формы. Он установит тип контента на application/x-www-form-urlencoded если нет файлов, или на multipart/form-data если они есть.

import io

response = client.post(data={
    "name": "test",
    "file": (BytesIO("file contents".encode("utf8")), "test.txt")
})

Передайте строку, байты или объект, подобный файлу, в data для использования его в качестве тела запроса в сыром виде. В этом случае вы должны соответствующим образом установить тип контента. Например, для отправки YAML:

response = client.post(
    data="a: value\nb: 1\n", content_type="application/yaml"
)

Для тестирования JSON-API есть сокращение: передайте словарь в json вместо использования data. Это автоматически вызовет json.dumps() и установит тип контента на application/json. Кроме того, если приложение возвращает JSON, response.json автоматически вызовет json.loads().

response = client.post("/api", json={"a": "value", "b": 1})
obj = response.json()

Построитель окружения

EnvironBuilder используется для построения словаря окружения WSGI. Тестовый клиент использует его внутри для подготовки своих запросов. Аргументы, передаваемые методам запроса клиента, совпадают с аргументами этого построителя.

Иногда полезно вручную построить WSGI-окружение. Построитель окружения или словарь могут быть переданы методам запроса тестового клиента вместо других аргументов для использования пользовательского окружения.

from werkzeug.test import EnvironBuilder
builder = EnvironBuilder(...)
# build an environ dict
environ = builder.get_environ()
# build an environ dict wrapped in a request
request = builder.get_request()

Ответы тестового клиента предоставляют доступ к этому через TestResponse.request и response.request.environ.

API

class werkzeug.test.Client(application, response_wrapper=None, use_cookies=True, allow_subdomain_redirects=False)

Эмулирует отправку запросов к WSGI-приложению без запуска WSGI- или HTTP-сервера.

Параметры:
  • application (WSGIApplication) – WSGI-приложение, к которому отправляются запросы.
  • response_wrapper (тип[Response] | None) – Класс Response для обертывания данных ответа. По умолчанию, TestResponse. Если это не подкласс TestResponse, будет создан подкласс.
  • use_cookies (bool) – Сохранять куки из заголовков ответа Set-Cookie в заголовке Cookie последующих запросов. Поддерживается соответствие по домену и пути, но другие параметры куки игнорируются.
  • allow_subdomain_redirects (bool) – Разрешить запросам следовать перенаправлениям на поддомены. Включите, если приложение обрабатывает поддомены и перенаправления между ними.

Изменено в версии 2.3: Упростить реализацию куки, поддержка соответствия по домену и пути.

Журнал изменений

Изменено в версии 2.1: Все данные доступны как свойства объекта возвращаемого ответа. Ответ не может быть возвращён как кортеж.

Изменено в версии 2.0: response_wrapper всегда является подклассом :class:TestResponse.

Изменено в версии 0.5: Добавлен параметр use_cookies.

get_cookie(key, domain='localhost', path='/')

Возвращает Cookie, если он существует. Куки уникально идентифицируются по (domain, path, key).

Параметры:
  • key (строка) – Декодированная форма ключа для куки.
  • domain (строка) – Домен, для которого была установлена куки.
  • path (строка) – Путь, для которого была установлена куки.
Тип возвращаемого значения:

Cookie | None

Добавлена в версии 2.3.

set_cookie(key, value='', *args, domain='localhost', origin_only=True, path='/', **kwargs)

Устанавливает куки для отправки в последующих запросах.

Это удобный способ пропустить тестовый запрос к маршруту, который установил бы куки. Для проверки куки выполните тестовый запрос к маршруту, использующему значение куки.

Клиент использует domain, origin_only, и path для определения, какие куки отправлять с запросом. Он не использует другие параметры куки, которые используются браузерами, так как они не применимы в тестах.

Параметры:
  • key (строка) – Ключевая часть куки.
  • value (строка) – Значение части куки.
  • domain (строка) – Отправлять эту куки с запросами, соответствующими этому домену. Если origin_only равно true, должно быть точное совпадение, иначе может быть совпадение по суффиксу.
  • origin_only (bool) – Требуется ли точное совпадение домена с запросом.
  • path (строка) – Отправлять эту куки с запросами, соответствующими этому пути, либо точно, либо как префикс.
  • kwargs (любое) – Передается в dump_cookie().
  • args (любое) –
Тип возвращаемого значения:

None

Изменено в версии 2.3: Добавлен параметр origin_only.

Изменено в версии 2.3: Параметр domain по умолчанию localhost.

Изменено в версии 2.3: Первый параметр server_name устарел и будет удалён в Werkzeug 3.0. Первый параметр key. Используйте параметры domain и origin_only вместо него.

delete_cookie(key, *args, domain='localhost', path='/', **kwargs)

Удаляет куки, если она существует. Куки уникально идентифицируются по (domain, path, key).

Параметры:
  • key (строка) – Декодированная форма ключа для куки.
  • domain (строка) – Домен, для которого была установлена куки.
  • path (строка) – Путь, для которого была установлена куки.
  • args (любое) –
  • kwargs (любое) –
Тип возвращаемого значения:

None

Изменено в версии 2.3: Параметр domain по умолчанию localhost.

Изменено в версии 2.3: Первый параметр server_name устарел и будет удалён в Werkzeug 3.0. Первый параметр key. Используйте параметр domain вместо него.

Изменено в версии 2.3: Параметры secure, httponly и samesite устарели и будут удалены в Werkzeug 2.4.

open(*args, buffered=False, follow_redirects=False, **kwargs)

Создаёт словарь environ из заданных аргументов, выполняет запрос к приложению с его использованием и возвращает ответ.

Параметры:
  • args (Any) – Передаётся в EnvironBuilder для создания словаря environ для запроса. Если передан один аргумент, это может быть существующий EnvironBuilder или словарь environ.
  • buffered (bool) – Преобразует итератор, возвращаемый приложением, в список. Если итератор имеет метод close(), он вызывается автоматически.
  • follow_redirects (bool) – Выполняет дополнительные запросы для следования HTTP-редиректам, пока не будет возвращён статус без редиректа. TestResponse.history содержит список промежуточных ответов.
  • kwargs (Any) –
Тип возвращаемого значения:

TestResponse

Журнал изменений

Изменено в версии 2.1: Удален параметр as_tuple.

Изменено в версии 2.0: Поток ввода запроса закрывается при вызове response.close(). Потоки ввода для редиректов закрываются автоматически.

Изменено в версии 0.5: Если в словаре для параметра data в качестве файла предоставлен словарь, тип содержимого должен называться content_type вместо mimetype. Это изменение было внесено для согласованности с werkzeug.FileWrapper.

Изменено в версии 0.5: Добавлен параметр follow_redirects.

get(*args, **kw)

Вызывает open() с method установленным в GET.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

post(*args, **kw)

Вызывает open() с method установленным в POST.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

put(*args, **kw)

Вызывает open() с method установленным в PUT.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

delete(*args, **kw)

Вызывает open() с method установленным в DELETE.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

patch(*args, **kw)

Вызывает open() с method установленным в PATCH.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

options(*args, **kw)

Вызывает open() с method установленным в OPTIONS.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

head(*args, **kw)

Вызывает open() с method установленным в HEAD.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

trace(*args, **kw)

Вызывает open() с method установленным в TRACE.

Параметры:
  • args (Any) –
  • kw (Any) –
Тип возвращаемого значения:

TestResponse

class werkzeug.test.TestResponse(response, status, headers, request, history=(), **kwargs)

Response подкласс, предоставляющий дополнительную информацию о запросах, сделанных с помощью тестового Client.

Тестовые запросы клиента всегда возвращают экземпляр этого класса. Если класс пользовательского ответа передан клиенту, он также наследуется от этого класса для поддержки тестовой информации.

Если тестовый запрос включал большие файлы или приложение обрабатывает файл, вызовите close() для закрытия всех открытых файлов и предотвращения отображения Python сообщения об ошибке ResourceWarning.

Журнал изменений

Изменено в версии 2.2: Установлено значение default_mimetype в None для предотвращения предположения mimetype при его отсутствии.

Изменено в версии 2.1: Объекты ответа не могут обрабатываться как кортежи.

Добавлен в версии 2.0: Методы тестового клиента всегда возвращают экземпляры этого класса.

Параметры:
  • response (Iterable[str] | Iterable[bytes]) –
  • status (str) –
  • headers (Headers) –
  • request (Request) –
  • history (tuple[werkzeug.test.TestResponse, ...]) –
  • kwargs (t.Any) –
default_mimetype: str | None = None

Значение mimetype по умолчанию, если оно не указано.

request: Request

Объект запроса с окружением, используемым для создания запроса, который привёл к этому ответу.

history: tuple[werkzeug.test.TestResponse, ...]

Список промежуточных ответов. Заполняется, когда тестовый запрос создан с follow_redirects включённым.

property text: str

Данные ответа в виде текста. Является сокращением для response.get_data(as_text=True).

Журнал изменений

Добавлен в версии 2.1.

class werkzeug.test.Cookie(key, value, decoded_key, decoded_value, expires, max_age, domain, origin_only, path, secure, http_only, same_site)

Ключ, значение и параметры cookie.

Класс сам по себе не является общедоступным API. Его атрибуты документированы только для проверки с помощью Client.get_cookie().

Добавлен в версии 2.3.

Параметры:
  • key (str) –
  • value (str) –
  • decoded_key (str) –
  • decoded_value (str) –
  • expires (datetime | None) –
  • max_age (int | None) –
  • domain (str) –
  • origin_only (bool) –
  • path (str) –
  • secure (bool | None) –
  • http_only (bool | None) –
  • same_site (str | None) –
key: str

Ключ cookie, закодированный так, как его видит клиент.

value: str

Значение cookie, закодированное так, как его видит клиент.

decoded_key: str

Ключ cookie, декодированный так, как его устанавливает и видит приложение.

decoded_value: str

Значение cookie, декодированное так, как его устанавливает и видит приложение.

expires: datetime | None

Время, после которого cookie становится недействительным.

max_age: int | None

Число секунд от момента установки cookie, после которого он становится недействительным.

domain: str

Домен, для которого установлен cookie, или домен запроса, если не указан.

origin_only: bool

Указывает, будет ли cookie отправлен только для точных совпадений домена. Это True если параметр Domain не был указан.

path: str

Путь, для которого установлен cookie.

secure: bool | None

Параметр Secure.

http_only: bool | None

Параметр HttpOnly.

same_site: str | None

Параметр SameSite.

END_OF_DOCUMENT_MARKER
class werkzeug.test.EnvironBuilder(path='/', base_url=None, query_string=None, method='GET', input_stream=None, content_type=None, content_length=None, errors_stream=None, multithread=False, multiprocess=False, run_once=False, headers=None, data=None, environ_base=None, environ_overrides=None, charset=None, mimetype=None, json=None, auth=None)

Этот класс можно использовать для удобного создания WSGI-среды в целях тестирования. Он позволяет быстро создавать WSGI-среды или объекты запроса из произвольных данных.

Подпись этого класса также используется в некоторых других местах начиная с Werkzeug 0.5 (create_environ(), Response.from_values(), Client.open()). По этой причине большая часть функциональности доступна только через конструктор.

Файлы и данные обычной формы можно обрабатывать независимо друг от друга с помощью атрибутов form и files, но они передаются с тем же аргументом в конструктор: data.

data может быть любым из этих значений:

  • объект str или bytes: Объект преобразуется в input_stream, content_length устанавливается, и вам нужно предоставить content_type.
  • объект dict или MultiDict: Ключи должны быть строками. Значения должны быть любым из следующих объектов или списком любых из следующих объектов:

    • объект, подобный file: Эти объекты автоматически преобразуются в объекты FileStorage.
    • объект tuple: Метод add_file() вызывается с ключом и распакованными элементами tuple в качестве позиционных аргументов.
    • строка str: Строка устанавливается как данные формы для соответствующего ключа.
  • объект, подобный файлу: Содержимое объекта загружается в память и затем обрабатывается как обычный объект str или bytes.
Параметры:
  • path (str) – путь к запросу. В WSGI-среде он будет представлен как PATH_INFO. Если query_string не определен, и в path есть знак вопроса, всё после него используется как строка запроса.
  • base_url (str | None) – базовый URL, используемый для извлечения схемы URL WSGI, хоста (имя сервера + порт сервера) и корня скрипта (SCRIPT_NAME).
  • query_string (t.Mapping[str, str] | str | None) – необязательная строка или словарь с параметрами URL.
  • method (str) – HTTP-метод, используемый по умолчанию GET.
  • input_stream (t.IO[bytes] | None) – необязательный поток ввода. Не указывайте его и data. Как только поток ввода задан, вы не можете изменять args и files, если не установите input_stream на None снова.
  • content_type (str | None) – тип содержимого для запроса. Начиная с версии 0.5, вам не нужно указывать его при указании файлов и данных формы через data.
  • content_length (int | None) – длина содержимого для запроса. Вам не нужно указывать его при предоставлении данных через data.
  • errors_stream (t.IO[str] | None) – необязательный поток ошибок, используемый для wsgi.errors. По умолчанию stderr.
  • multithread (bool) – управляет wsgi.multithread. По умолчанию False.
  • multiprocess (bool) – управляет wsgi.multiprocess. По умолчанию False.
  • run_once (bool) – управляет wsgi.run_once. По умолчанию False.
  • headers (Headers | t.Iterable[tuple[str, str]] | None) – необязательный список или объект Headers заголовков.
  • data (None | (t.IO[bytes] | str | bytes | t.Mapping[str, t.Any])) – строка, словарь данных формы или объект файла. См. объяснение выше.
  • json (t.Mapping[str, t.Any] | None) – объект, подлежащий сериализации и назначенный data. По умолчанию тип содержимого устанавливается в "application/json". Сериализуется с помощью функции, назначенной json_dumps.
  • environ_base (t.Mapping[str, t.Any] | None) – необязательный словарь с базовыми значениями среды.
  • environ_overrides (t.Mapping[str, t.Any] | None) – необязательный словарь с переопределениями среды.
  • auth (Authorization | tuple[str, str] | None) – объект авторизации, используемый для значения заголовка Authorization. Кортеж (username, password) — это сокращение для Basic авторизации.
  • charset (str | None) –
  • mimetype (str | None) –

Изменено в версии 2.3: Параметр charset устарел и будет удален в Werkzeug 3.0

Журнал изменений

Изменено в версии 2.1: CONTENT_TYPE и CONTENT_LENGTH не дублируются в качестве ключей заголовка в environ.

Изменено в версии 2.0: REQUEST_URI и RAW_URI представляет собой полный необработанный URI, включая строку запроса, а не только путь.

Изменено в версии 2.0: По умолчанию request_class используется Request вместо BaseRequest.

Добавлена в версии 2.0: Добавлен параметр auth.

Добавлена в версии 0.15: Параметр json и метод json_dumps().

Добавлена в версии 0.15: В environ есть ключи REQUEST_URI и RAW_URI, содержащие путь до проценто-декодирования. Это не часть PEP WSGI, но многие серверы WSGI его включают.

Изменено в версии 0.6: path и base_url теперь могут быть строками unicode, которые закодированы с помощью iri_to_uri().

server_protocol = 'HTTP/1.1'

протокол сервера для использования. По умолчанию HTTP/1.1

wsgi_version = (1, 0)

версия wsgi для использования. По умолчанию (1, 0)

request_class

Класс запроса по умолчанию, используемый get_request().

Псевдоним для Request

static json_dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Функция сериализации, используемая при передаче json.

classmethod from_environ(environ, **kwargs)

Преобразование словаря environ обратно в конструктор. Любые дополнительные параметры kwargs переопределяют аргументы, извлеченные из environ.

Журнал изменений

Изменено в версии 2.0: Значения пути и строки запроса передаются через WSGI-декодирование, чтобы избежать двойного кодирования.

Добавлена в версии 0.15.

Параметры:
  • environ (WSGIEnvironment) –
  • kwargs (t.Any) –
Тип возвращаемого значения:

EnvironBuilder

property base_url: str

Базовый URL используется для извлечения схемы URL, имени хоста, порта и корневого пути.

property content_type: str | None

Тип содержимого для запроса. Отражается из и в headers. Не устанавливайте, если вы установили files или form для автоматического определения.

property mimetype: str | None

MIME-тип (тип содержимого без набора символов и т. д.).

Журнал изменений

Добавлена в версии 0.14.

property mimetype_params: Mapping[str, str]

Параметры MIME-типа в виде словаря. Например, если тип содержимого text/html; charset=utf-8, параметры будут {'charset': 'utf-8'}.

Журнал изменений

Добавлена в версии 0.14.

property content_length: int | None

Длина содержимого как целое число. Отражается из и в headers. Не устанавливайте, если вы установили files или form для автоматического определения.

property form: MultiDict

Словарь значений формы.

property files: FileMultiDict

Словарь загруженных файлов. Используйте add_file() для добавления новых файлов.

property input_stream: IO[bytes] | None

Дополнительный поток ввода. Это взаимоисключающее свойство с установкой form и files. Установка этого свойства очистит эти свойства. Не указывайте это, если метод не POST или другой метод с телом.

property query_string: str

Строка запроса. Если вы установите это значение в строку, args больше недоступно.

property args: MultiDict

Аргументы URL в виде словаря.

property server_name: str

Имя сервера (только для чтения, используйте host для установки)

property server_port: int

Порт сервера как целое число (только для чтения, используйте host для установки)

close()

Закрывает все файлы. Если вы поместили реальные объекты file в словарь files, вы можете вызвать этот метод, чтобы автоматически закрыть их все сразу.

Тип возвращаемого значения:

None

get_environ()

Возвращает созданный словарь environ.

Журнал изменений

Изменено в версии 0.15: Заголовки типа содержимого и длины устанавливаются на основе обнаружения потока ввода. Ранее это устанавливало только ключи WSGI.

Тип возвращаемого значения:

WSGIEnvironment

get_request(cls=None)

Возвращает запрос с данными. Если класс запроса не указан, используется request_class.

Параметры:

cls (type[werkzeug.wrappers.request.Request] | None) – Обёртка объекта запроса для использования.

Тип возвращаемого значения:

Request

werkzeug.test.create_environ(*args, **kwargs)

Создайте новый словарь WSGI environ на основе переданных значений. Первый параметр должен быть путем запроса, по умолчанию «/». Второй параметр может быть абсолютным путем (в этом случае хост localhost:80) или полным путем к запросу со схемой, доменным именем, портом и путем к скрипту.

Принимает те же аргументы, что и конструктор EnvironBuilder.

Changelog

Изменено в версии 0.5: Эта функция теперь является тонким обёрткой над EnvironBuilder, которая была добавлена в 0.5. Параметры headers, environ_base, environ_overrides и charset были добавлены.

Parameters:
  • args (t.Any) –
  • kwargs (t.Any) –
Тип возвращаемого значения:

WSGIEnvironment

werkzeug.test.run_wsgi_app(app, environ, buffered=False)

Возвращает кортеж в виде (app_iter, status, headers) выходных данных приложения. Это лучше всего работает, если вы передаёте приложение, которое всегда возвращает итератор.

Иногда приложения могут использовать вызываемый объект write(), возвращаемый функцией start_response. Это пытается автоматически решить такие частные случаи. Но если вы не получаете ожидаемый результат, вы должны установить buffered в True, что обеспечивает буферизацию.

Если передано некорректное WSGI-приложение, поведение этой функции не определено. Никогда не передавайте несовместимые WSGI-приложения в эту функцию.

Parameters:
  • app (WSGIApplication) – приложение для выполнения.
  • buffered (bool) – установить в True для принудительной буферизации.
  • environ (WSGIEnvironment) –
Возвращаемое значение:

кортеж в формате (app_iter, status, headers)

Тип возвращаемого значения:

кортеж[t.Iterable[bytes], str, Headers]

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.3.x/test/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API