Flask kullanıyorum ve yetkilendirme gerektiren uç noktalara (ve bazen de uygulamaya özel başka başlıklar) sahibim. Testlerimde bir istemci oluşturmak için test_client
işlevini kullanın ve ardından çeşitli arama, alma, çağrıları silme işlemini yapın. Bu çağrıların tümü yetkilendirmeyi ve eklenecek diğer başlıkların kullanılmasını gerektirecektir. Test istemcisini, bu istekleri tüm isteklere eklemek için nasıl kurabilirim?Bir Flask testindeki tüm istekler için HTTP üstbilgileri ayarlayın
cevap
Sen WSGI uygulamasını sarın ve orada başlıkları enjekte edebilir
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
sınıf headers
kelime argümanı aralarında EnvironBuilder
sınıfında, aynı argüman alır.
Kimlik doğrulamanızı göndermek için client.get('/', headers={ ... })
'u kullanabilirsiniz.
Eğer istemciden başlıklarını varsayılan olarak bir dizi sağlamak istiyorsanız, siz (make_test_environ_builder
benzeyen) modifiye ortam oluşturucu sağlayan open
kendi uygulama sağlamak gerekiyordu ve işaret edecek app.test_client_class
set senin yeni sınıf.
@DazWorrall cevap üzerine inşa edilen ve Werkzeug kaynak koduna bakarak, ben kimlik doğrulaması için gerekli varsayılan Başlıkları geçmek için aşağıdaki sarmalayıcı ile sona erdi:
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)
Daha sonra bu gibi kullanabilirsiniz:
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")
Başlığı test istemcisinin içine ayarlayabilirsiniz.
client = app.test_client()
client.environ_base['HTTP_AUTHORIZATION'] = 'Bearer your_token'
Sonra isteğinden başlığını kullanabilirsiniz:
request.headers['Authorization']
- 1. Tüm istekler için HTTP Temel Kimlik Doğrulaması'nın ayarlanması
- 2. Flask ve Ajax Gönderi istekler 400
- 3. jQuery.ajax ve JSONP ile Üstbilgileri Ayarlayın
- 4. Github sayfaları, HTTP üstbilgileri
- 5. Angular2/Http (POST) üstbilgileri
- 6. Bilinmeyen İçerik-Uzunluğu için HTTP Üstbilgileri
- 7. IIS önbellekleme için http-üstbilgileri yapılandırılabilir
- 8. Kakao'da NSURLRequest/NSURLConnection üzerinden HTTP Üstbilgileri Al
- 9. HttpClient tüm üstbilgileri al
- 10. Özel HTTP İstek üstbilgileri HTML
- 11. Bir librowl ile HTTP üstbilgileri nasıl ayrıştırılır?
- 12. Gerekli HTTP üstbilgileri alanları nedir
- 13. Global, angularJS'de CORS kullanmak için $ http yapılandırması (tüm istekler için sabit etki alanı)
- 14. Flask'taki tüm istekler için nasıl bir eylem gerçekleştiririm?
- 15. http başlıklarını tarayıcı tarafından oluşturulan isteklere ayarlayın.
- 16. Python - İstekler HTTP Kitaplığı SSL Anahtarı
- 17. HTTP önbellek denetim üstbilgileri WCF hizmetinde ayarlama
- 18. Golang testindeki armatürler
- 19. Flask werkzeug request.authorization hiçbiri değil ama Yetkilendirme üstbilgileri mevcut
- 20. Eşzamansız WebClient isteğinde HTTP üstbilgileri alın
- 21. Web API'sinde HTTP önbellek denetim üstbilgileri ayarlama
- 22. http üstbilgileri ayarlama RSpec 2.4/Rails 3
- 23. Tüm çalışma kitabındaki tüm satırları ayarlayın
- 24. Özel HTTP üstbilgileri RESTful isteklerine iletme
- 25. WSGI katman yazılımında http üstbilgileri nasıl eklenir?
- 26. HTTP Üstbilgileri JAX-WS hizmet yanıtına ekle
- 27. Süre Sonu ve Son Değiştirilen HTTP Üstbilgileri için Zaman Dilimi
- 28. Tüm Xamarin.iOS uygulaması için özel bir varsayılan yazı tipi ayarlayın.
- 29. Tüm Flask oturumlarını nasıl silebilirim?
- 30. Python, Flask: Ben böyle bir şey benim http başlıkları yanıtların hepsi ayarlamak istediğiniz