2024-05-01 21:37:29 发布
网友
我正在使用Flask,并且有需要授权的端点(有时还有其他特定于应用程序的头)。在我的测试中,使用test_client函数创建客户机,然后执行各种get、put、delete调用。所有这些调用都需要授权,并且需要添加其他头。如何设置测试客户机,以便在所有请求上放置这样的头?
test_client
根据@soulsekah的建议,扩展测试客户端并将应用指向它并不太困难。我最近这样做是为了在测试头中有一个默认的api密钥。给出的示例使用py.test夹具,但很容易适应unittest/nosetest。
from flask import testing from werkzeug.datastructures import Headers class TestClient(testing.FlaskClient): def open(self, *args, **kwargs): api_key_headers = Headers({ 'x-api-key': 'TEST-API-KEY' }) headers = kwargs.pop('headers', Headers()) headers.extend(api_key_headers) kwargs['headers'] = headers return super().open(*args, **kwargs) @pytest.fixture(scope='session') def test_client(app): app.test_client_class = TestClient return app.test_client()
您可以包装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()
^{}类采用与^{}类相同的参数,其中有^{}关键字参数。
所以您可以简单地使用client.get( '/', headers={ ... } )发送您的身份验证。
client.get( '/', headers={ ... } )
现在,如果您想从客户端提供一组默认的头,您需要提供自己的^{}实现,它提供一个修改过的环境生成器(类似于^{}),并设置^{}来指向您的新类。
根据@soulsekah的建议,扩展测试客户端并将应用指向它并不太困难。我最近这样做是为了在测试头中有一个默认的api密钥。给出的示例使用py.test夹具,但很容易适应unittest/nosetest。
您可以包装WSGI应用程序并在其中插入标题:
^{} 类采用与^{} 类相同的参数,其中有^{} 关键字参数。
所以您可以简单地使用
client.get( '/', headers={ ... } )
发送您的身份验证。现在,如果您想从客户端提供一组默认的头,您需要提供自己的^{} 实现,它提供一个修改过的环境生成器(类似于^{} ),并设置^{} 来指向您的新类。
相关问题 更多 >
编程相关推荐