2013-08-16 10 views
19

Ich teste gerade meine App mit Vorschlägen von http://flask.pocoo.org/docs/testing/, aber ich möchte eine Header-Anfrage hinzufügen.Flask und Werkzeug: Testen einer Postanforderung mit benutzerdefinierten Headern

ist mein Wunsch zur Zeit:

self.app.post('/v0/scenes/test/foo', data=dict(image=(StringIO('fake image'), 'image.png'))) 

aber ich möchte ein Content-md5 auf die Anfrage hinzuzufügen. Ist das möglich?

Meine Untersuchungen:

Flask Client (in Kolben/testing.py) erstreckt Werkzeug des Kunden, hier dokumentiert: http://werkzeug.pocoo.org/docs/test/

Wie Sie sehen können, post verwendet open. Aber open hat nur:

Parameters: 
as_tuple – Returns a tuple in the form (environ, result) 
buffered – Set this to True to buffer the application run. This will automatically close the application for you as well. 
follow_redirects – Set this to True if the Client should follow HTTP redirects. 

So sieht es aus wie es nicht unterstützt wird. Wie kann ich eine solche Funktion jedoch erhalten?

Antwort

37

open auch nehmen *args und **kwargs die als EnvironBuilder Argumente verwendet. So können Sie nur headers Argument zu Ihrer ersten Post-Anfrage hinzufügen:

with self.app.test_client() as client: 
    client.post('/v0/scenes/test/foo', 
       data=dict(image=(StringIO('fake image'), 'image.png')), 
       headers={'content-md5': 'some hash'}); 
6

Werkzeug zur Rettung!

from werkzeug.test import EnvironBuilder, run_wsgi_app 
from werkzeug.wrappers import Request 

builder = EnvironBuilder(path='/v0/scenes/bucket/foo', method='POST', data={'image': (StringIO('fake image'), 'image.png')}, \ 
    headers={'content-md5': 'some hash'}) 
env = builder.get_environ() 

(app_iter, status, headers) = run_wsgi_app(http.app.wsgi_app, env) 
status = int(status[:3]) # output will be something like 500 INTERNAL SERVER ERROR 
Verwandte Themen