Spec-Zone.ru › Werkzeug 2.1

Тестирование 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"...'

Методы запроса клиента возвращают экземпляры 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)

Этот класс позволяет отправлять запросы к обернутому приложению.

Параметр use_cookies указывает, следует ли хранить и отправлять файлы cookie для последующих запросов. По умолчанию это значение равно True, но передача False отключит это поведение.

Если вы хотите запросить какой-либо поддомен вашего приложения, вы можете установить allow_subdomain_redirects на True, так как в противном случае внешние перенаправления не допускаются.

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

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

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

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

Параметры
  • application (WSGIApplication) –
  • response_wrapper (Optional[Type[Response]]) –
  • use_cookies (bool) –
  • allow_subdomain_redirects (bool) –
Тип возвращаемого значения

None

set_cookie(server_name, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None, charset='utf-8')

Устанавливает cookie в хранилище cookie клиента. Требуется имя сервера, и оно должно совпадать с тем, которое также передается в открытый вызов.

Параметры
  • server_name (str) –
  • key (str) –
  • value (str) –
  • max_age (Optional[Union[datetime.timedelta, int]]) –
  • expires (Optional[Union[str, datetime.datetime, int, float]]) –
  • path (str) –
  • domain (Optional[str]) –
  • secure (bool) –
  • httponly (bool) –
  • samesite (Optional[str]) –
  • charset (str) –
Тип возвращаемого значения

None

delete_cookie(server_name, key, path='/', domain=None, secure=False, httponly=False, samesite=None)

Удаляет cookie в тестовом клиенте.

Параметры
  • server_name (str) –
  • key (str) –
  • path (str) –
  • domain (Optional[str]) –
  • secure (bool) –
  • httponly (bool) –
  • samesite (Optional[str]) –
Тип возвращаемого значения

None

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) –
Тип возвращаемого значения

werkzeug.test.TestResponse

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

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

Изменено в версии 2.0: as_tuple устарел и будет удален в Werkzeug 2.1. Используйте TestResponse.request и request.environ вместо этого.

Изменено в версии 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) –
Тип возвращаемого значения

werkzeug.test.TestResponse

post(*args, **kw)

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

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

werkzeug.test.TestResponse

put(*args, **kw)

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

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

werkzeug.test.TestResponse

delete(*args, **kw)

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

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

werkzeug.test.TestResponse

patch(*args, **kw)

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

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

werkzeug.test.TestResponse

options(*args, **kw)

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

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

werkzeug.test.TestResponse

head(*args, **kw)

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

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

werkzeug.test.TestResponse

trace(*args, **kw)

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

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

werkzeug.test.TestResponse

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

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

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

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

Изменено в версии 2.1: Убрано устаревшее поведение по обработке экземпляра ответа как кортежа.

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

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

Параметры
  • response (Union[Iterable[str], Iterable[bytes]]) –
  • status (str) –
  • headers (werkzeug.datastructures.Headers) –
  • request (werkzeug.wrappers.request.Request) –
  • history (Tuple[werkzeug.test.TestResponse, ...]) –
  • kwargs (Any) –
Тип возвращаемого значения

None

request: werkzeug.wrappers.request.Request

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

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

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

property text: str

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

Новое в версии 2.1.

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='utf-8', 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 (Optional[str]) – базовый URL, используемый для извлечения схемы URL WSGI, хоста (имя сервера + порт сервера) и корня скрипта (SCRIPT_NAME).
  • query_string (Optional[Union[Mapping[str, str], str]]) – необязательная строка или словарь с параметрами URL.
  • method (str) – HTTP-метод, используемый по умолчанию GET.
  • input_stream (Optional[IO[bytes]]) – необязательный входной поток. Не указывайте его и data. Как только задан входной поток, вы не можете изменить args и files, если не установите input_stream на None снова.
  • content_type (Optional[str]) – тип контента для запроса. Начиная с версии 0.5, его не нужно указывать при указании файлов и данных формы через data.
  • content_length (Optional[int]) – длина контента запроса. Не нужно указывать при предоставлении данных через data.
  • errors_stream (Optional[IO[str]]) – необязательный поток ошибок, используемый для wsgi.errors. По умолчанию stderr.
  • multithread (bool) – управляет wsgi.multithread. По умолчанию False.
  • multiprocess (bool) – управляет wsgi.multiprocess. По умолчанию False.
  • run_once (bool) – управляет wsgi.run_once. По умолчанию False.
  • headers (Optional[Union[werkzeug.datastructures.Headers, Iterable[Tuple[str, str]]]]) – необязательный список или объект Headers заголовков.
  • data (Optional[Union[IO[bytes], str, bytes, Mapping[str, Any]]]) – строка, словарь данных формы или объект файла. См. объяснение выше.
  • json (Optional[Mapping[str, Any]]) – объект, который нужно сериализовать и присвоить data. По умолчанию тип контента "application/json". Сериализуется с помощью функции, присвоенной json_dumps.
  • environ_base (Optional[Mapping[str, Any]]) – необязательный словарь со значениями по умолчанию для среды.
  • environ_overrides (Optional[Mapping[str, Any]]) – необязательный словарь с переопределениями среды.
  • charset (str) – кодировка символов, используемая для кодирования строковых данных.
  • auth (Optional[Union[werkzeug.datastructures.Authorization, Tuple[str, str]]]) – объект авторизации для использования в качестве значения заголовка Authorization. Кортеж (username, password) — это сокращение для Basic авторизации.
  • mimetype (Optional[str]) –
Тип возвращаемого значения

None

Изменено в версии 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().

Псевдоним werkzeug.wrappers.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 обратно в билдер. Любые дополнительные ключевые параметры переопределяют аргументы, извлеченные из environ.

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

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

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

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

EnvironBuilder

property base_url: str

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

property content_type: Optional[str]

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

property mimetype: Optional[str]

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

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

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

property mimetype_params: Mapping[str, str]

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

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

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

property content_length: Optional[int]

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

property form: werkzeug.datastructures.MultiDict

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

property files: werkzeug.datastructures.FileMultiDict

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

property input_stream: Optional[IO[bytes]]

Необязательный поток ввода. Взаимоисключающее с настройкой form и files, ее установка очистит их. Не предоставляйте, если метод не POST или другой метод, имеющий тело.

property query_string: str

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

property args: werkzeug.datastructures.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 (Optional[Type[werkzeug.wrappers.request.Request]]) – Обёртка запроса для использования.

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

werkzeug.wrappers.request.Request

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

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

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

Изменения

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

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

WSGIEnvironment

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

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

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

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

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

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

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

Tuple[Iterable[bytes], str, werkzeug.datastructures.Headers]

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

Spec-Zone.ru

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