私はFlaskを使用しており、承認が必要なエンドポイント(および場合によっては他のアプリケーション固有のヘッダー)を持っています。私のテストでは、test_client
関数を使用してクライアントを作成し、さまざまなget、put、delete呼び出しを行います。これらのすべての呼び出しには、承認とその他のヘッダーを追加する必要があります。このようなヘッダーをすべての要求に入れるようにテストクライアントをセットアップするにはどうすればよいですか?FlaskテストですべてのリクエストにHTTPヘッダーを設定する
5
A
答えて
11
あなたはWSGIアプリをラップし、そこにヘッダを挿入することができます
from flask import Flask, request
import unittest
def create_app():
app = Flask(__name__)
@app.route('/')
def index():
return request.headers.get('Custom', '')
return app
class TestAppWrapper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['HTTP_CUSTOM'] = 'Foo'
return self.app(environ, start_response)
class Test(unittest.TestCase):
def setUp(self):
self.app = create_app()
self.app.wsgi_app = TestAppWrapper(self.app.wsgi_app)
self.client = self.app.test_client()
def test_header(self):
resp = self.client.get('/')
self.assertEqual('Foo', resp.data)
if __name__ == '__main__':
unittest.main()
9
Client
クラスはheaders
キーワード引数で、その中EnvironBuilder
クラス、同じ引数を取ります。
あなたは単にclient.get('/', headers={ ... })
を使用して認証を送信できます。
今、あなたは、クライアントからのヘッダーのデフォルトセットを提供したい場合、あなたは(make_test_environ_builder
と同類)修正環境ビルダーを提供open
の独自の実装を提供する必要があるだろうし、あなたを指すようにapp.test_client_class
を設定新しいクラス。
2
@DazWorrall答えの構築、およびWERKZEUGのソースコードに見て、私は認証のために必要なデフォルトのヘッダーを渡すために、次のラッパーになってしまった:
class TestAppWrapper:
""" This lets the user define custom defaults for the test client.
"""
def build_header_dict(self):
""" Inspired from : https://github.com/pallets/werkzeug/blob/master/werkzeug/test.py#L591 """
header_dict = {}
for key, value in self._default_headers.items():
new_key = 'HTTP_%s' % key.upper().replace('-', '_')
header_dict[new_key] = value
return header_dict
def __init__(self, app, default_headers={}):
self.app = app
self._default_headers = default_headers
def __call__(self, environ, start_response):
new_environ = self.build_header_dict()
new_environ.update(environ)
return self.app(new_environ, start_response)
あなたはそれが好きで使用することができます。
class BaseControllerTest(unittest.TestCase):
def setUp(self):
_, headers = self.get_user_and_auth_headers() # Something like: {'Authorization': 'Bearer eyJhbGciOiJ...'}
app.wsgi_app = TestAppWrapper(app.wsgi_app, headers)
self.app = app.test_client()
def test_some_request(self):
response = self.app.get("/some_endpoint_that_needs_authentication_header")
0
テストクライアントの内部にヘッダーを設定できます。
client = app.test_client()
client.environ_base['HTTP_AUTHORIZATION'] = 'Bearer your_token'
次に、あなたがリクエストからヘッダーを使用することができます。
request.headers['Authorization']
関連する問題
- 1. HTTPリクエストでhttp cookie(ヘッダー)を設定する方法
- 2. java再生フレームワークhttpリクエストでコンテンツ長のヘッダーを設定する
- 3. FlaskレスポンスにHTTPステータステキストを設定する
- 4. AngularJS - すべてのhttpリクエストに適用される共通の基本認証ヘッダーを設定します
- 5. AlamofireのすべてのリクエストのHTTPヘッダーを変更します
- 6. Flaskカスタムヘッダーでputリクエストをテストする
- 7. StringContentProviderはHTTPリクエストでContent-Typeヘッダーを設定していますか?
- 8. citrus httpリクエストでヘッダを設定する
- 9. Flask test_clientでリクエストargsを設定するには?
- 10. ブラウザで生成されたリクエストにhttpヘッダーを設定しますか?
- 11. PythonリクエストでHTTPヘッダーに余分なヘッダーを追加する
- 12. JSONPをリクエストする際の認証HTTPヘッダーの設定方法は?
- 13. httpリクエストにヘッダーを追加
- 14. httpリクエストでUserAgentを設定します
- 15. HTTPリクエストでのHTTPリクエスト承認リクエストのヘッダーcomponentDidMount内
- 16. すべてのHTTPリクエスト
- 17. すべてのHTTPリクエストをHTTPにリダイレクトする方法
- 18. HTTPリクエスト「Content-Type」の設定
- 19. HTTPリクエストのタイマー設定
- 20. Safari/Chrome用のHTTPヘッダーを表示して設定する
- 21. C#で大量のHTTPリクエストをHttpWebRequest.Timeoutに設定する方法
- 22. 春のすべてのリクエストにクッキーを設定する
- 23. javascriptを使用してURLを開き、リクエストにカスタムHTTPヘッダーを設定する方法はありますか?
- 24. Play 2.0(scala)でHTTPヘッダーを設定していますか?
- 25. RSpecリクエスト仕様の各リクエストの前にヘッダーを設定
- 26. Flask-AdminとFlask-Securityを設定する
- 27. AngularJSでアプリケーションワイドのHTTPヘッダーを設定する
- 28. HTTPリクエストのすべてのTCPパケットにHTTPヘッダーが含まれていますか?
- 29. PyQt Webエンジンのhttpヘッダーを設定
- 30. SwiftのヘッダーでHTTPリクエストを作成