WSGIアプリケーションのテスト—Werkzeugドキュメント
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