Wie kann ich die unit-test-diese Flasche-app?
Ich habe eine Flask Anwendung, die mit Flask-Restless dienen eine API.
Ich habe nur geschrieben, einige Authentifizierung überprüft
- Wenn der Verbraucher host erkannt wird
- Die Anforderung enthält einen hash (berechnet durch die Verschlüsselung der Anforderung von Inhalten für die POST und die URL für die GET zusammen mit einem geheimen API-Schlüssel) und
- Der hash gültig ist
Ich möchte in der Lage sein, einige schreiben von unit-tests für diese, aber ich bin mir nicht sicher, wie, weil meine Funktionen benutzen Sie das Anfrage-Objekt. Soll ich lustig das request-Objekt?
Würde gerne einige Ratschläge dazu.
Config
API_CONSUMERS = [{'name': 'localhost',
'host': '12.0.0.1:5000',
'api_key': 'Ahth2ea5Ohngoop5'},
{'name': 'localhost2',
'host': '127.0.0.1:5001',
'api_key': 'Ahth2ea5Ohngoop6'}]
Authentifizierungsmethoden
import hashlib
from flask import request
def is_authenticated(app):
"""
Checks that the consumers host is valid, the request has a hash and the
hash is the same when we excrypt the data with that hosts api key
Arguments:
app -- instance of the application
"""
consumers = app.config.get('API_CONSUMERS')
host = request.host
try:
api_key = next(d['api_key'] for d in consumers if d['host'] == host)
except StopIteration:
app.logger.info('Authentication failed: Unknown Host (' + host + ')')
return False
if not request.headers.get('hash'):
app.logger.info('Authentication failed: Missing Hash (' + host + ')')
return False
if request.method == 'GET':
hash = calculate_hash_from_url(api_key)
elif request.method == 'POST':
hash = calculate_hash_from_content(api_key)
if hash != request.headers.get('hash'):
app.logger.info('Authentication failed: Hash Mismatch (' + host + ')')
return False
return True
def calculate_hash_from_url(api_key):
"""
Calculates the hash using the url and that hosts api key
Arguments:
api_key -- api key for this host
"""
data_to_hash = request.base_url + '?' + request.query_string
data_to_hash += api_key
return hashlib.sha1(request_uri).hexdigest()
def calculate_hash_from_content(api_key):
"""
Calculates the hash using the request data and that hosts api key
Arguments:
api_key -- api key for this host
"""
data_to_hash = request.data
data_to_hash += api_key
return hashlib.sha1(data_to_hash).hexdigest()
- Haben Sie sah Testing-Kolben-Anwendungen?
- Ich glaube, Sie verwenden test_request_object() flask.pocoo.org/docs/quickstart/#accessing-request-data
- Ah, Sie kann auf etwas, das es Affen, danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
test_request_object()
Tat den trick, Dank monkey.Machte ich eine Nase-test-suite getestet, meine Graffiti-app, indem Sie einfach den Aufruf der Methode, und übergeben Sie die URL-segment wie die parameter der Methode. also: