WSGIアプリケーションのテスト—Werkzeugドキュメント

提供:Dev Guides
Werkzeug/docs/2.0.x/test
移動先:案内検索

WSGIアプリケーションのテスト

テストクライアント

Werkzeugは、サーバーを起動せずにWSGIアプリケーションへの要求をシミュレートするためのClientを提供します。 クライアントには、さまざまなタイプのリクエストを作成したり、リクエスト間で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をテストするときのショートカットは、dataを使用する代わりに、jsonにdictを渡すことです。 これにより、自動的にjson.dumps()が呼び出され、コンテンツタイプがapplication/jsonに設定されます。 さらに、アプリがJSONを返す場合、response.jsonは自動的にjson.loads()を呼び出します。

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

環境ビルダー

EnvironBuilderは、WSGI環境辞書を構築するために使用されます。 テストクライアントはこれを内部的に使用してリクエストを準備します。 クライアントのリクエストメソッドに渡される引数は、ビルダーと同じです。

WSGI環境を手動で構築すると便利な場合があります。 カスタム環境を使用するために、他の引数の代わりに環境ビルダーまたはdictをテストクライアントの要求メソッドに渡すことができます。

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