2017-02-22 3 views
0
POOL = redis.ConnectionPool(host='localhost', port=6379, db=0) 

app = Flask(__name__) 

@app.route('/get_cohort_curve/', methods=['GET'])``` 
def get_cohort_curve(): 

    curve = str(request.args.get('curve')) 
    cohort = str(request.args.get('cohort')) 

    key = curve+cohort 
    return get_from_redis(key) 

def get_from_redis(key): 
    try: 
     my_server = redis.Redis(connection_pool=POOL) 
     return json.dumps(my_server.get(key)) 
    except Exception, e: 
     logging.error(e) 

app.run() 

Ich muss Unit-Tests dafür schreiben.Wie kann ich die Funktionen in diesem Flask-App testen?

Wie teste ich nur die Route, d. H. Eine Get-Anfrage geht an den richtigen Ort?

Muss ich Instanzen der App im Test für jede Funktion erstellen und löschen?

Muss ich eine Pseudo-Redis-Verbindung erstellen?

Antwort

1

Wenn Sie etwas in Flask ausführen möchten, können Sie eine virtuelle Umgebung erstellen und den ganzen Shebang testen, aber meiner Meinung nach ist das der schwierigste Weg.

Als ich meine Website für die lokale Installation von Redis erstellte, war das Festlegen des Anschlusses und das anschließende Ablegen einiger Daten mit einem entsprechenden Schlüssel erforderlich. Ich habe all meine Entwicklung in iPython (jupyter) -Notebooks gemacht, so dass ich die Funktionen und Interaktionen mit Redis testen konnte, bevor ich die verwirrende Schicht von Flask hinzufügte.

Dann richten Sie eine makellose Vorlage, solide HTML-Umgebung und CSS, um die Website zu stylen. Wenn es ohne Daten als HTML-Seite funktioniert, dann geht es weiter zum Python-Teil von Flask.

Vereinheitlichen Sie die Flask-Verzeichnisse. Stellen Sie sicher, dass Sie sie in einer virtuellen Umgebung unterbringen, damit Sie sie von Ihrem Browser aus aufrufen können und Ihre virtuelle Umgebung als Server behandelt wird.

Sie erstellen Ihre app.py Anwendung. Ich habe jede der Seitenfunktionen einzeln erstellt. getestet, um zu sehen, dass es die Variablen richtig pendelte, um auf der Seite zu posten und die richtige Vorlage aufzurufen. Nachdem Sie mit Fotos und Daten richtig rauf, dann mit der Vorlage der nächsten Seite, mit @app.route

Nehmen Sie wenn sehr langsam, Stück für Stück mit Debuggen auf, so dass Sie sehen können, wann und wie Sie gehen falsch. Sie erhalten nur die Site, auf der der Redis-Server ausgeführt wird und Ihre virtuelle Umgebung ausgeführt wird. Dann müssen Sie die VE zum Bearbeiten und Neustarten zum Testen herunterfahren. Am Anfang ist es furchtbar, aber im Laufe der Zeit wird es immer rarer.

EDIT:

Wenn Sie wirklich nur um die Strecke testen wollen, dann eine app.py machen nur mit der @ app.route Definition und kehren nur die Seite (die Vorlage, die Sie anrufen). Sie können das Testen in Stücke so klein wie Sie möchten zerlegen, aber Sie müssen sicher sein, dass die von Ihnen ausgewählten Quanten entweder als Python-Skript in einer Notebook- oder Befehlszeilenausführung oder als kompakte funktionale eigenständige Website ausführbar sind .... es sei denn Sie verwenden das Paket, das ich im Kommentar erwähnte: Flask Unit Testing Applications

Und Sie müssen REAL Redis Verbindungen erstellen oder Sie werden Fehler aus.

+0

Es müssen Komponententests für diesen Code in Produktion gehen. Ich sehe, was Sie sagen - Ich testete den Code auf einem Jupyter Notebook mit einem Redis-Server lokal ausgeführt. –

+0

Es gibt eine eingebaute Funktionalität für Komponententests. Hier ist der Link dazu: http://flask.pocoo.org/docs/0.12/testing/. Aber Unit-Tests können auch manuell durchgeführt werden. Mein oben beschriebener Prozess beinhaltet das Testen von Einheiten bei jedem Schritt. – sconfluentus

Verwandte Themen