测试 WSGI 应用程序 — Werkzeug 文档

来自菜鸟教程
Werkzeug/docs/2.0.x/test
跳转至:导航、​搜索

测试 WSGI 应用程序

测试客户端

Werkzeug 提供了一个 Client 来模拟对 WSGI 应用程序的请求,而无需启动服务器。 客户端具有发出不同类型请求以及跨请求管理 cookie 的方法。

>>> 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 之上提供了对测试有用的额外属性和方法。


请求正文

通过将 dict 传递给 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 时的捷径是将 dict 传递给 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.requestresponse.request.environ 使其可用。


应用程序接口